[Java] 자바 이클립스 JDBC 4. 특정 DBMS에 종속되는 것을 막기
JDBC 프로그래밍 : 특정 DBMS에 종속되는 것을 막기
- 기존 코드에서는 java.sql.Driver 구현체(이 규칙에 따라 만든 클래스)의
인스턴스를 만들기 위해 직접 클래스 명을 언급하였다.
예) com.mysql.jdbc.Driver. driver = new com.mysql.jdbc.Driver();
- 이렇게 하면 코드가 특정 DBMS에 종속되는 문제가 발생한다.
즉 다른 DBMS
- 해결 방법?
- java.sql.Driver 구현체의 이름을 변수로 받아서 처리한다.
- 명령창에서 실행하는 법
> java -cp bin:xxx.jar -Djdbc.driver=com.mysql.jdbc.Driver step20.Test04_1
- 이클립스에서 실행하는 법
1) 일단 그냥 실행한다. 그러면 실행 정보가 이클립스에 기록된다.
Run > Run Configurations... > "Java Application / Test04_1" 선택 >arguments > -Djdbc.driver=com.mysql.jdbc.Driver step20.Test04_1
System.getProperty("...")로 드라이버를 등록하고,
Class.forName(...)에 드라이버 이름을 주는 예제 ->
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class Test04_2 {
public static void main(String[] args) {
try {
// JVM 아규먼트로 java.sql.Driver 구현체의 이름을 받는다.
String driverClassName = System.getProperty("jdbc.driver");
// 아규먼트로 넘겨준 문자열로 지정된 클래스를 찾아 로딩한다.
// => Class.forName("com.mysql.jdbc.Driver")라면,
// com.mysql.jdbc.Driver 클래스를 찾아서 로딩한다.
// => 객체를 만들어서 DriverManager에 등록하지 않아도 자동으로 인식한다.
Class.forName(driverClassName);
./* 참고!
* 클래스가 로딩되는 경우, (조건: 클래스가 로딩되어 있지 않을 때)
1) 인스턴스를 만들 때 - new 연산자
2) 스태틱 멤버(변수나 메서드)를 사용할 때 - Student.a;
3) Class.forName()을 호출할 때.
*/
} catch (Exception e) {
e.printStackTrace();
return;
}
try ( // 이 괄호 안에 선언하는 변수는 오직 java.lang.AutoCloseable 구현체 만이 가능하다.
Connection con = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/webappdb",
"webapp",
"1111");
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery("select mno, name, tel, email from memb");
) {
while (rs.next()) {
System.out.printf("%d, %s, %s, %s\n",
rs.getInt("mno"),
rs.getString("name"),
rs.getString("tel"),
rs.getString("email"));
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
'Programming > java' 카테고리의 다른 글
[Java] 추상 클래스 (abstract class)와 추상 메서드(abstract method)의 개념 (0) | 2017.05.29 |
---|---|
[Java] 이클립스 JDBC 5. Statement와 PreparedStatement 비교 (0) | 2017.05.29 |
[Java] 이클립스 JDBC 3. try ~ catach~ 를 이용하여 자원 해제시키기 (0) | 2017.05.29 |
[Java] 이클립스 JDBC 2. java.sql 패키지의 주요 인터페이스 (규칙) (0) | 2017.05.29 |
[Java] 이클립스 JDBC 1. MySQL JDBC Type 4 드라이버 다운로드 (0) | 2017.05.26 |