[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();
    }
  }

}



블로그 이미지

필로그래머

,

[Java] 자바 이클립스 JDBC 2. java.sql 패키지의 주요 인터페이스 (규칙)


java.sql 패키지의 주요 인터페이스 (규칙)

 1) java.sql.Driver (=> com.mysql.jdbc.Driver 클래스)

    - JDBC Driver정보를 제공한다.

    - DBMS와의 연결을 관리하는 객체를 리턴한다.

 2) java.sql.Connection (=> com.mysql.jdbc.ConnectionImpl 클래스)

    - DBMS와 연결을 수행핸다.

    - DBMS에 SQL을 전달할 객체를 리턴한다.

 3) java.sql.Statement (=> com.mysql.jdbc.StatementImpl 클래스)

    - SQL을 MySQL 형식에 맞춰서 변환한 다음 서버에 보내는 일을 한다.

    - 서버가 보낸 결과를 다룰 객체를 리턴한다.

    - executeQuery() : SELECT 문을 실행한다.

    - executeUpdate() : INSERT, UPDATE, DELETE 등 DML, DDL 명령문을 실행한다.

    - executeBatch() : 여러 개의 SQL을 실행할 때 사용한다.

SELECT, INSERT, UPDATE, DELETE 등 모든 SQL 명령문이 실행 가능하다.

 4) java.sql.ResultSet (=> com.mysql.jdbc.ResultSetImpl 클래스)

    - DBMS 서버에서 SELECT를 실행한 후 생성된 결과를 가져온다.

    - next() : 서버에서 한 개의 레코드를 가져온다. 정상적으로 갸져왔으면 true를

     리턴하고, 가져올 레코드가 없으면 false를 리턴한다.

    - getXxx(컬럼 번호 또는 컬럼명) : 

 서버에서 가져온 레코드의 컬럼 값을 꺼낸다. 

컬럼의 타입에 따라 호출하는 메서드가 다르다.

숫자 -> getInt(), 문자 -> getString(), 날짜 -> getDate()


자원의 해제

 - 파일 I/O(HDD)나 소켓(랜카드)이나 DBMS(랜카드와 연결된 서버) API 처럼 

   컴퓨터에 붙어 있는 장비를 다루고 나면, 다른 프로그램이 사용할 수 있도록 자원을

   해제해야 한다. 

블로그 이미지

필로그래머

,