Jam's story

[JDBC] days02-db에 연동하기 위한 클래스 라이브러리 생성 본문

JDBC

[JDBC] days02-db에 연동하기 위한 클래스 라이브러리 생성

애플쩀 2022. 5. 3. 12:17
JDBC

데이터베이스 연동하는 자바 표준 인터페이스 

인터페이스 :

상수와 추상메소드 포함

default 메소드 포함 (Java 8)

private 메소드 포함 (Java 9)

static 메소드 포함 (Java 9)

 

데이터베이스에서 연결과 작업을 하기 위한 자바 표준 인터페이스

 

JDBC 를 사용하여 DB에 연결하는 순서 

1. JDBC 드라이버 로드 

Class.forName()

2.Connection 객체 얻어오기  

DriverManager.getConnection()

3.필요한 조작(CRUD)

4.Close 

Connection객체.close()

 

 

위의 순서에 맞춰서 오라클서버에 scott/tiger 로 DB에 연결하는 전체 코딩을 main() 메서드에 하시고, 연결된 Connection 객체 정보를  출력하고  Connection 객체 연결 상태를 true, false로 출력하는 코딩을 하세요. 

 

package jdbcPro;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Scanner;

public class Ex05 {

	public static void main(String[] args) {
	      // DB 연동 순서

	      String className = "oracle.jdbc.driver.OracleDriver";
	      String url = "jdbc:oracle:thin:@localhost:1521:xe";
	      String user = "SCOTT";
	      String password = "tiger";
	      Connection conn = null;

	      Scanner sc = new Scanner(System.in);
	      System.out.println("부서 번호를 입력하세요 >>");
	      int vdeptno = sc.nextInt();

	      String sql = "SELECT * "
	                      + " FROM emp "
	                      + " WHERE deptno =" + vdeptno 
	                      +"ORDER BY ename ASC";

	      Statement  stmt = null;
	      try {
	         Class.forName(className);
	         conn = DriverManager.getConnection(url, user, password);       
	         stmt = conn.createStatement(); 
	         //java.sql.SQLSyntaxErrorException
	         //	at jdbcPro.Ex05.main(Ex05.java:35) 35번줄에서 쿼리문법 오류
	         //sql에 name  칼럼명이 틀려서 바꿈 
	         ResultSet  rs = stmt.executeQuery(sql);   
	      
	         // boolean rs.next() 리절트셋 안에 다음 레코드가 있니?  true/ false
	         if( rs.next() ) {
	            // 다음(next) 레코드를 읽어와서 출력.
	            int empno = rs.getInt(1);
	            String ename = rs.getString(2);
	            String job=rs.getString(3);
	            int mgr = rs.getInt("mgr");
	            //날짜형은 String 으로 받아도 된다. 
	            String hiredate = rs.getString(5);
	            //number(7,2)는 실수형태이기 때문에 double로 바꾸어야함
	            //int sal = rs.getInt(6);
	            double sal=rs.getDouble(6);
	            //int comm = rs.getInt(7);
	            Double  comm = rs.getDouble(7);
	            int deptno = rs.getInt(8);
	            System.out.printf("%d\t %s\t %s\t %d\t %s\t %.2f\t %.2f\t %d\t",
	            		empno, ename, job, mgr, hiredate, sal, comm, deptno);
	            System.out.println(empno);
	         }else {
	            System.out.println(" 읽을 레코드는 없습니다. ");
	         }

	      } catch (ClassNotFoundException e) { 
	         e.printStackTrace();
	      } catch (SQLException e) { 
	         e.printStackTrace();
	      } finally {
	         try {
	            stmt.close();
	            // 4. close
	            conn.close();
	         } catch (SQLException e) { 
	            e.printStackTrace();
	         } //try         
	      } // finally 

	      System.out.println( " END ");
	   } // main

} //

 

 

db에 연동하기 위한 클래스 라이브러리 생성 
com.util.DBconn.java
->작업을 편하게 하기 위해 라이브러리를 만듬 

 

package com.util;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
 
// SingleTon 선언
public class DBconn {
	private DBconn() {};
	//private로  잡아서 외부에서 접근하지 못하도록 
	private static Connection connection =null;
	
	public static Connection getConnection() {
		//null이면 생성해서 돌리고 아니면 반환 
		if(connection==null) {
			String className="oracle.jdbc.driver.OracleDriver";
		//내꺼가 아닌 다른 서버 다른 디비랑 연결할 수 도 있다. 
			String url="jdbc:Oracle:thin@localhost:1521:xe";
			String user="scott";		
			String password="tiger";
			
			try {
				Class.forName(className);
				connection =DriverManager.getConnection(url,user,password);
			} catch (ClassNotFoundException e) {
				//드라이버 로딩오류
				e.printStackTrace();
			}catch (SQLException e) {
				//커넥션오류 디비 연결 오류 
				e.printStackTrace();
			}
		}
		
		return connection;
	}
	
	//오버로딩 
	public static Connection getConnection(String url, String user, String password) {
		//null이면 생성해서 돌리고 아니면 반환 
		if(connection==null) {
			String className="oracle.jdbc.driver.OracleDriver";
		//내꺼가 아닌 다른 서버 다른 디비랑 연결할 수 도 있다. 
		//className 도 바꾸면 오라클이 아닌 다른 dbms 사용하겠다는 뜻 
			
			try {
				Class.forName(className);
				connection =DriverManager.getConnection(url,user,password);
			} catch (ClassNotFoundException e) {
				//드라이버 로딩오류
				e.printStackTrace();
			}catch (SQLException e) {
				//커넥션오류 디비 연결 오류 
				e.printStackTrace();
			}
		}
		
		return connection;
	}
	
	public static void close() {
		try {
			if(connection !=null &&!connection.isClosed()) {
				connection.close();
			}
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
		connection=null; //중요하다 null 안붙이면 나중에 문제생김 		
	}
} // class

강사님 코드 

package com.util;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
 
// SingleTon 선언
public class DBconn {

   private static Connection connection = null;
   
   private DBconn() { }
   
   public static Connection getConnection(){
      
      if ( connection == null) {  
         String className = "oracle.jdbc.driver.OracleDriver" ; 
         String url = "jdbc:oracle:thin:@localhost:1521:xe";
         String user = "scott";
         String password = "tiger";
         try {
            Class.forName(className);
            connection = DriverManager.getConnection(url, user, password);
         } catch (ClassNotFoundException e) { 
            e.printStackTrace();
         } catch (SQLException e) { 
            e.printStackTrace();
         }         
      } // if
      
      return connection;
   } // getConnection
   
   // [오버로딩] , 오버라이딩
   public static Connection getConnection(String url, String user, String password){
      
      if ( connection == null) {  
         String className = "oracle.jdbc.driver.OracleDriver" ;
         
         try {
            Class.forName(className);
            connection = DriverManager.getConnection(url, user, password);
         } catch (ClassNotFoundException e) { 
            e.printStackTrace();
         } catch (SQLException e) { 
            e.printStackTrace();
         }         
      } // if
      
      return connection;
   } // getConnection
   
   public static void close() {
      
      try {
         if ( connection != null && !connection.isClosed()) {            
            connection.close();
         } // if
      } catch (SQLException e) { 
         e.printStackTrace();
      } // try
      
      // *****
      connection = null;
   } // close
    
} // class

 

 

객체를 불러옴 
package days02;

import java.sql.Connection;

import com.util.DBconn;

public class Ex02 {

	public static void main(String[] args) {
	
		//hr계정으로 접속 
		Connection conn=DBconn.getConnection("jdbc:oracle:thin:@localhost:1521:xe","hr","lion");
		System.out.println(conn);
		DBconn.close();
		System.out.println("end");
		

		Connection conn=DBconn.getConnection();
		System.out.println(conn);
		DBconn.close();
		System.out.println("end");
		//oracle.jdbc.driver.T4CConnection@768b970c
		
		
		conn=DBconn.getConnection();
		System.out.println(conn);
		DBconn.close();
		System.out.println("end");
		
		//oracle.jdbc.driver.T4CConnection@175b9425
		//close()에 의해서 닫혔기 때문에 새로운 객체 불러옴 

	}

}

 


ConnectionString.properties 파일을 읽어서 url, user, password 가져와서

Connection 객체를 DBconn클래스를 사용해서 얻어오는 코딩 
Properties 컬렉션 클래스 

 

ConnectionString.properties 파일 

만약에 다른 사용자로 들어가려면 이거 바꾸면 된다. 

#>JDBC \uD658\uACBD\uC124\uC815<
#Fri Mar 25 14:38:27 KST 2022
user=scott
password=tiger
url=jdbc\:oracle\:thin\:@localhost\:1521\:xe
className=oracle.jdbc.driver.OracleDriver

 

package days02;

import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
import java.sql.Connection;
import java.util.Properties;

import com.util.DBconn;

public class Ex02_02 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
//ConnectionString.properties 파일을 읽어서 url, user, password 가져와서
		//Connection 객체를 DBconn클래스를 사용해서 얻어오는 코딩 
		//Properties 컬렉션 클래스 
		//Map인터페이스를 구현한 클래스 
		//key+value 한쌍 entry
		//String /String 
		//파일/저장 읽기 메소드
		
		
		//파일에 있는 url, user, passwd 읽어와서 파일 실행 
		Properties p=new Properties();
		String fileName=".\\src\\com\\util\\ConnectionString.properties ";
		try {
			Reader reader=new FileReader(fileName);
			p.load(reader);
			String url=p.getProperty("url");
			String user=p.getProperty("user");
			String password=p.getProperty("password");
			
			Connection conn=DBconn.getConnection(url,user,password);
			System.out.println(conn);
			DBconn.close();
		} catch (IOException e) {
			// TODO: handle exception
			e.printStackTrace();
		}
		System.out.println("end");
	}//main
}//class

 

 

 

'JDBC' 카테고리의 다른 글

[JDBC]days04 - 게시판 만들기 (DTO ,DAO)  (0) 2022.05.09
[JDBC] days02- (조회,수정,삭제,검색)  (0) 2022.05.04
[JDBC] days02 - 클래스 select  (0) 2022.05.03
[JDBC] days01  (0) 2022.05.02
이클립스 환경 설정  (0) 2022.05.02
Comments