<JDBC> 3. Example_(2)_ECLIPSE에서 JDBC 활용하는 방법

51235 단어 JDBC 이론JDBC 이론

1. 데이터 베이스 연결하기

-Class.forName()메서드를 이용해서 드라이브를 등록한다.
->oracle.jdbc.driver.OracleDriver ->ojdbc.jar에 있는 내용
-ojdbc.jar파일을 프로젝트에 라이브러리로 추가를 해줘야한다!
-Class.forName()메서드의 경우에는 ClassNotFoundException을 처리해야한다.

public class Ex {

	public static void main(String[] args) {
------------------------------
        Connection conn=null;
	Statement stmt=null;		이곳에 선언된 변수 3개의 경우 추후 설명되오니, 우선 작성한다.
	ResultSet rs=null;
-------------------------------
        
	try {
		Class.forName("oracle.jdbc.driver.OracleDriver");	
		        
		}catch(ClassNotFoundException e) {
			e.printStackTrace();
		}  
	}
}

2. Connection 객체 생성하기

DB연결 정보를 가지고 있는 객체

-DriverManager 클래스의 getConnection() static 메서드를 이용
-매개변수 1 : DB접속 주소, 정보 -> 형식이 정해져 있음 -> jdbc:oracle:thin:@ip주소:포트번호:sid
-매개변수 2 : DB접속 사용자 계정명 / 대,소문자 구분하지 않는다
-매개변수 3 : 사용자 계정의 비밀번호 / 대,소문자를 구분한다
-3개의 매개변수 모두 String으로 대입!
-서버 DB를 이용하는 경우 -> jdbc:oracle:thin:@rclass:iptime.org:1521:xe
-예제에서 사용된 DB접속 사용자 계정명과 비밀번호는 student / student 이다.

 public class Ex {

	public static void main(String[] args) {
------------------------------
        Connection conn=null;
	Statement stmt=null;		
	ResultSet rs=null;
-------------------------------
        
	try {
		Class.forName("oracle.jdbc.driver.OracleDriver");
        	//반환값을 Connection 변수에 담는다
        	conn=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe", 
								"student", "student");
		        
		}catch(ClassNotFoundException e) {
			e.printStackTrace();
		}catch(SQLException e) {
			e.printStackTrace();
		}  
	}
} 
   

3. Connection 객체를 이용해서 sql문을 실행할 객체를 생성하기

Statement 인터페이스

-Connection의 createStatement()메서드를 이용해서 생성함
-Statement는 connect에 연결되어 있는 DB에 SQL구문을 실행하고, 그 결과를 가져오는 역할

 public class Ex {

	public static void main(String[] args) {
------------------------------
        Connection conn=null;
	Statement stmt=null;		
	ResultSet rs=null;
-------------------------------
        
	try {
		Class.forName("oracle.jdbc.driver.OracleDriver");
        	//반환값을 Connection 변수에 담는다
        	conn=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe", 
								"student", "student");
                stmt = conn.createStatement();
		        
		}catch(ClassNotFoundException e) {
			e.printStackTrace();
		}catch(SQLException e) {
		e.printStackTrace();
		}    
	}
} 
   

4. DB에서 실행할 SQL구문을 작성

String으로 작성!

-쿼리문 작성시 모든것을 동일하게 작성 해야한다. 단, 마지막 세미콜론은 생략한다!

 public class Ex {

	public static void main(String[] args) {
------------------------------
        Connection conn=null;
	Statement stmt=null;		
	ResultSet rs=null;
-------------------------------
        
	try {
		Class.forName("oracle.jdbc.driver.OracleDriver");
        	//반환값을 Connection 변수에 담는다
        	conn=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe", 
								"student", "student");
                stmt = conn.createStatement();
	        String sql="SELECT * FROM MEMBER";
                
		}catch(ClassNotFoundException e) {
			e.printStackTrace();
		}catch(SQLException e) {
			e.printStackTrace();
		}    
	}
} 

5. Statement객체의 executeQuery()메서드를 이용해서 작성된 sql 구문을 실행

-executeQuery(sql구문을 대입);
-executeQuery()메서드를 실행하면 ResultSet를 반환한다. ->DB실행경과(data)가 저장되어 있기 때문에 ResultSet변수로 받아줘야 합니다.
-select문 실행은 executeQuery() 실행->ResultSet
-DML(insert, update, delete) executeUpdate()실행 ->int형 반환

 public class Ex {

	public static void main(String[] args) {
------------------------------
        Connection conn=null;
	Statement stmt=null;		
	ResultSet rs=null;
-------------------------------
        
	try {
		Class.forName("oracle.jdbc.driver.OracleDriver");
        	//반환값을 Connection 변수에 담는다
        	conn=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe", 
								"student", "student");
                stmt = conn.createStatement();
	        String sql="SELECT * FROM MEMBER";
            	//반환값을 resultSet에 담는다
                rs = stmt.executeQuery(sql);  
                
		}catch(ClassNotFoundException e) {
			e.printStackTrace();
		}catch(SQLException e) {
		e.printStackTrace();
		}    
	}
} 

6. ResultSet으로 받아온 data확인, 클래스에 저장하기

-ResultSet의 getOO(컬렴명||index번호)메서드를 이용
-자료형별로 메서드가 만들어져 있음
-문자열(varchar2, nvarchar2, nchar) : getString();
-숫자(number) : getInt()또는 getDouble();
-날짜(Date) : getDate() - java.sql.Date;로 반환
-resultSet에서의 데이터는 각 row별로 데이터를 받아옴
-resultSet의 next()메서드를 이용하면 row에 차례대로 접근할 수 있다. -next() 진위형을 반환

 public class Ex {

	public static void main(String[] args) {
------------------------------
        Connection conn=null;
	Statement stmt=null;		
	ResultSet rs=null;
-------------------------------
        
	try {
		Class.forName("oracle.jdbc.driver.OracleDriver");
        	//반환값을 Connection 변수에 담는다
        	conn=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe", 
								"student", "student");
                stmt = conn.createStatement();
	        String sql="SELECT * FROM MEMBER";
            	//반환값을 resultSet에 담는다
                rs = stmt.executeQuery(sql);  
	while(rs.next()) {
			System.out.print(rs.getString("member_id"));
			System.out.print(rs.getString("member_pwd"));
			System.out.print(rs.getString("member_name"));
			System.out.print(rs.getString("gender"));
			System.out.print(rs.getInt("age"));
			System.out.print(rs.getString("email"));
			System.out.print(rs.getString("phone"));
			System.out.print(rs.getString("address"));
			System.out.print(rs.getString("hobby"));
			System.out.print(rs.getDate("enroll_date"));
			System.out.println();
            
		SELECT문으로 가져온 데이터는 통상 VO클래스를 만들어서 저장 후 객체로 활용
		수의 객체가 생성된 경우(resultSet에 다수 row가 있는 경우)에는 ArrayList를 이용함
       		 이 부분에 있어서는, 추후 예제부분에서 정리하도록 하겠습니다.
	}
                
		}catch(ClassNotFoundException e) {
			e.printStackTrace();
		}catch(SQLException e) {
		e.printStackTrace();
		}    
	}
} 

위 while문의 구문으로 다음과 같이 데이터를 출력할 수 있다.

하지만, 일반적으로 이렇게 데이터를 단순히 출력하는 것이 아닌 DB에서 가져온 데이터를 타 클래스로 옮기는 경우가 많으니 이 부분은 실전예제를 통해 다루겠습니다.

7. 생성된 객체를 닫아주기

-connection, statement, result(select문을 실행한 경우)
-객체를 반환할때는 생성순서의 역순으로 진행

 public class Ex {

	public static void main(String[] args) {
------------------------------
        Connection conn=null;
	Statement stmt=null;		
	ResultSet rs=null;
-------------------------------
        
	try {
		Class.forName("oracle.jdbc.driver.OracleDriver");
        	//반환값을 Connection 변수에 담는다
        	conn=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe", 
								"student", "student");
                stmt = conn.createStatement();
	        String sql="SELECT * FROM MEMBER";
            	//반환값을 resultSet에 담는다
                rs = stmt.executeQuery(sql);  
	while(rs.next()) {
			System.out.print(rs.getString("member_id"));
			System.out.print(rs.getString("member_pwd"));
			System.out.print(rs.getString("member_name"));
			System.out.print(rs.getString("gender"));
			System.out.print(rs.getInt("age"));
			System.out.print(rs.getString("email"));
			System.out.print(rs.getString("phone"));
			System.out.print(rs.getString("address"));
			System.out.print(rs.getString("hobby"));
			System.out.print(rs.getDate("enroll_date"));
			System.out.println();
            
		SELECT문으로 가져온 데이터는 통상 VO클래스를 만들어서 저장 후 객체로 활용
		수의 객체가 생성된 경우(resultSet에 다수 row가 있는 경우)에는 ArrayList를 이용함
       		 이 부분에 있어서는, 추후 예제부분에서 정리하도록 하겠습니다.
	}
                
		}catch(ClassNotFoundException e) {
			e.printStackTrace();
		}catch(SQLException e) {
		e.printStackTrace();
		}finally {
		//DB연결 객체는 try문 밖에서 선언을 해줘야한다.
		try {
			if(rs!=null && !rs.isClosed())rs.close();
			if(stmt!=null && !stmt.isClosed())stmt.close();
			if(conn!=null && !conn.isClosed())conn.close();
		}catch(SQLException e) {
			e.printStackTrace();
		}
	}    
	}
} 

이 부분에서 확인해야 할 사항이 있습니다. 처음에 conn, stmt, rs 변수를 첫 try문 시작전에 선언하였었는데 이는 finally 내부의 try문에서 사용하기 위해서입니다.
만일 try문 내부에서 변수를 선언하였다면 이는 try문 밖으로 벗어나면 사용할 수 없게됩니다. 또한, finally 구문으로 처리해야하는 이유는 첫 try문의 마지막 부분에서
객체를 닫는 과정을 처리하게된다면 이전에 오류가 발생하여 바로 catch문으로 이동하게되면 정상적으로 처리가 되지 않기 때문에 마지막으로 무조건 실행되게 하는 finally 구문으로 처리하게 되는 것입니다.

좋은 웹페이지 즐겨찾기