• jdbc api
    • 실제 수행코드는 정의되어 있지 않다. 
    • 매소드 호출 방식만 정의해 놨다. 
    • DB 서버마다 처리하는 방식이 다르다. 
      • 인터페이스로
      • 인터페이스의 자식 클래스를 jdbc driver로 대신하는 것
      • 알맹이는 드라이버가 제공 
    • 공통적인건 class
    • 코드는 같은데 driver만 다른거 준비하면 된다. 
    • 객체 생성을 대신해주는 매소드 (팩토리 매소드)
    • 인터페이스 활용이 많이 돋보이는 기술

 

  • executeQuery()
    • resultset으로 반환함
      • next() 행 단위로 옮겨서 여러 값 추출

 

주요 JDBC API

  • statement -> (확장) preparedStatement
  • DriverManger 
    • DB서버에 대한 접속이 선행되어야 한다. drivermanager.getconnection

 

  1. jdbc 로딩
    Class.forName("com.mysql.cj.jdbc.Driver");
  2. jdbc url ( Uniform Resource Locator ) -> 위치 알릴 때 단일화
    "jdbc:mysql://localhost:3306/sqldb?characterEncoding=UTF-8&serverTimezone=UTC";​
    • 어떤 DB 서버를 어떤 driver에 연결할지 
    • jdbc:어떤 서버://[호스트 네임][:port]/dbname[?param1 = value1][&param2=value2]... → mysql
  3. user id, passwd 설정
  4. 실제 연결 DriverManager.getConnection (내부적으로 연결)
    Connection conn = DriverManager.getConnection(url, user, passwd);​

 

데이터 읽기

  • DriverManager
    Class.forName("com.mysql.cj.jdbc.Driver");​
  • Connection
    String url = 
    			"jdbc:mysql://localhost:3306/sqldb?characterEncoding=UTF-8&serverTimezone=UTC";
    			String user = "root";
    			String passwd = "1234";
    			Connection conn = DriverManager.getConnection(url, user, passwd);​
  • Statement
    • statement의 팩토리 메소드를 connection이 가지고 있음
    • 객체 생성을 대신해주는 일반 메소드: 팩토리 메소드
      Statement stmt = conn.createStatement()
    • statement 객체를 가지고 올 수 있다. 
  • ResultSet
    • 추출된 데이터 집합을 하나씩 읽어 옴
    • ReultSet rs = stmt.excuteQurey("SELECT ename, sal FROM emp);
    • resultSet 객체에서 값 들고오기
      • next() : 첫번째 값 가르킴
      • 최초의 집합에서 0번째 줄 가리키고 있음
  • 커넥션 반환하기
    • rs.close()
    • stmt.close()
    • conn.close()
      • 다른 프로그램의 connection 요청 못 받을 수도 있음, connection꺼줘야 한다.

 

package mysql.level1;

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


public class SelectEmp {
	public static void main(String[] args) {
		
		try {
			Class.forName("com.mysql.cj.jdbc.Driver");
		}
		catch (ClassNotFoundException cnfe) {
			System.out.println("해당 클래스를 찾을 수 없습니다." + cnfe.getMessage());
		}
		String url = "jdbc:mysql://localhost:3306/sqldb?characterEncoding=UTF-8&serverTimezone=UTC";
		String user = "root";
		String passwd = "1234";
		Connection conn = null;
		Statement stmt = null;
		ResultSet rs = null;
		try {
			conn = DriverManager.getConnection(url, user, passwd);
			stmt = conn.createStatement();
			rs = stmt.executeQuery("select ename, sal, hiredate from emp");
			while(rs.next()) {
				System.out.println(rs.getString("ename") + ","+rs.getDate("hiredate") + "," + rs.getInt("sal"));
			}
		}catch(SQLException se1) {
			System.out.println(se1.getMessage());
		}finally {	//	생성된 객체 close
			try {
				if(rs!= null)
					rs.close();
				if(stmt!= null)
					stmt.close();
				if(conn != null)
					conn.close();
			}catch(SQLException se2) {
				System.out.println(se2.getMessage());
			}
		}
	}
}

 

  • conn 인터페이스를 구현하고 있는 자식의 객체를 반환한다.
    conn = DriverManager.getConnection(url, user, passwd);​
     
    • com.mysql.cj.jdbc.ConnectionImpl
  • executeQuery
    • select 반환 값 DB 서버에 저장소에 들어있음
    • 반환값으로 ResultSet 객체 반환
  • executeUpdate
    • Int 타입 값 반환
      • insert, delete, update : 건수 반환
      • create, drop : -1반환
    • select 구문 제외한 다른거 사용할 때

 

select절에 나온 값 두 가지로 할 수 있다. 

  • rs.getString("ename") 
  • rs.getString(1)

 

 

'study > JAVA 전문가' 카테고리의 다른 글

[JDBC] 방명록  (0) 2021.12.21
JDBC 2  (0) 2021.12.21
mysql 5  (0) 2021.12.20
mysql 4 - 연습문제  (0) 2021.12.20
Mysql 1 - 연습문제  (0) 2021.12.18

+ Recent posts