ODBC(open database connectivity) API(보통 C/ C++로 만들어짐 microsoft에서 만듦 => JAVA에서 쓸 수 없음(프로그래밍 언어가 달라서))
=> DBMS 마다 API 가 달라서 프로그래밍의 일관성이 없는 문제를 해결하기 위해 API 규격을 통일(메서드 사용법)
=> ODBC API 정의
=> DBMS 제조사는 ODBC API 규격에 맞춰 클래스와 메서드를 제작
ODBC 를 사용하게 되면 API 가 같기 떄문에 DBMS 마다 따로 프로그래밍 할 필요가 없다.
ODBC Driver 동작의 방법
1. venderAPI 호출
2. 직접 DBMS와 통신(여기서는 속도의 단점X)
ODBC 장점
=> DBMS 마다 따로 프로그래밍 할 필요가 없다.
ODBC 단점
=> 실행속도가 느릴 수 있다.
Native API? (문맥에 따라서 해석해야함)
1. DBMS 제조사에서 제공하는 C/C++ API <- JDBC API에서 말하는 의미
2. OS 에 맞춰 기계어로 컴파일된 API <- 프로그래밍 세계에서 일반적으로 말하는 의미
Type마다 다운 받아야하는 게 좀 다름 숙지 필요
Type1 드라이버 pc에 vender 랑 ODBC 설치해야함 (근데 jre에 들어있음)
Type2드라이버 pc에 vender 랑 ODBC 설치해야함 + Driver 별도 다운 필요
Type3(요즘은 잘 안씀) 드라이버 DBMS 별로 드라이버를 다운로드 할 필요가 없다. 근데 중계서버가 필요해서 구입비용이 추가된다. & 속도도 느리다.
Type4 별로 다운로드 필요, DBMS 서버와 직접 통신, 실무에서 가장 많이 사용
주요 JDBC API
드라이버 인터페이스 - JDBC 드라이버 정보를 다루는 메서드, connection 객체를 준비하는 메서드
커넥션 인터페이스 - DBMS 연결과 관련된 일을 수행, statment 객체를 준비
스테이트먼트 인터페이스 - DBMS 에 SQL 을 전달하는 일을 수행, ResultSet 객체를 준비
리절트셋 인터페이스 - DBMS 에서 select 실행결괄르 가져오는 일을 수행
2022 03 - 03 오후12 : 30 ~ 40 JDBC 설치
JDBC 사용 설명서
https://mariadb.com/kb/en/about-mariadb-connector-j/#using-the-driver
VenderAPI = NativeAPI
JDBC 등장 배경 - ODBC가 c/c++ 로 만들어 졌기 때문에 JAVA 로 사용 못함 그래서 JAVA언어로 사용할 수 있도록 만들어 놓은 거(JDBC Driver)
javax => 확장기능을 다루는 패키지(extention의 줄임말)
항상 문서를 보기
사용할 수 있게 드라이버매니저에 등록해야함
java.sql.Driver driver = DriverManager.getDriver("jdbc:mariadb://");
System.out.println(driver);
java.sql.Driver driver2 = DriverManager.getDriver("jdbc:oracle:thin://"); => JDBC URL 규칙을 맞춰야함항상 문서를 봐야지 드라이버를 꺼낼 수 있음 규격이 있음
System.out.println(driver2);
java.sql.Driver driver3 = DriverManager.getDriver("jdbc:sqlserver://");
JDBC등록방법 : 직접 Driver 구현 객체를 생성하고 등록하기
static 블럭에 들어있기 떄문에 클래스가 로딩될 때 생성되기 떄문에 직접 객체를 생성할 필요 없음
*fully-qualified class name 뜻 : 패키지명을 포함한 클래스명
-.properties file은 key / value 형식의 환경변수를 간단하게 저장하는 파일 포맷
ex) key=value(key, value 각각 사이에 공백 불가)
& 한줄에 한개의 key/value 여야함
ex) jdbc.url=jdbc:mariadb://
key 이름을 작성할 때 OGNL(object graph navigation language => 객체명.프로퍼티명.프로퍼티명.) 방식을 사용하면 값을 쉽게 구분할 수 있다.
값을 꺼낼 때는 getProperties(파일 경로)
// DriverManager에 자동 등록된 것을 확인해보자!
// => DriverManager의 getDriver()를 호출하여 java.sql.Driver 구현체를 달라고 요구할 때,
// 1) JDBC 드라이버 초기화 절차를 수행하지 않았으면
// - CLASSPATH 경로에 설정된 모든 *.jar 파일에 대해
// 서비스 로더 규칙에 따라 Driver 구현체를 찾아 로딩한다.
// - JVM 프로퍼티 "jdbc.drivers" 이름으로 구현된 Driver 구현체가 있다면 로딩한다.
// 2) 이전에 단 한번이라도 JDBC 드라이버 초기화 절차를 수행했다면,
// - 등록된 Driver 구현체 목록에서 찾아 리턴한다.
java.sql.Driver driver = DriverManager.getDriver("jdbc:mariadb://");
=> 드라이버 방식(다 try 문으로 감싸야함)예시 위치C:\Users\bitcamp\git\bitcamp-study\java-lang\app\src\main\java\com\eomcs\jdbc\ex1\Exam0110.java
java.sql.Driver oracleDriver = new oracle.jdbc.OracleDriver();
DriverManager.registerDriver(oracleDriver);
java.sql.Driver driver = DriverManager.getDriver("jdbc:oracle:thin://");
System.out.println(driver);
=> 옛날에는 driver를 Manager에 넘겨줘서 로딩이 되게끔 했어야했음 그런데 지금은
=>
Properties props = new Properties();
props.load(new FileReader("./jdbc-driver.properties"));
System.out.println(props.getProperty("jdbc.driverClassName"));
System.out.println(props.getProperty("jdbc.url"));
//위의 방식을 사용하면 Driver 구현체를 소스 파일에 직접 명시할 필요가 없다.
Class.forName(props.getProperty("jdbc.driverClassName"));
java.sql.Driver driver = DriverManager.getDriver(props.getProperty("jdbc.url"));
System.out.println(driver);
=> 이런 식으로 외부파일에 저장해두고 로딩하면 되는 방법도 있음
그런데 최신 방법은 자동으로 로딩되게 함
java.sql.Driver driver = DriverManager.getDriver("jdbc:mariadb://");
그냥 이렇게 한 줄 쓰면 끝
이렇게 가능한 이유?? DriverManger 에서 자동으로 찾아서 로딩(드라이버를 달라고 할 때)해주기 때문
=>
위와 같은 과정을 거쳐서 등록되고 로딩됨