JDBC-퀵 가이드

JDBC 란 무엇입니까?

JDBC는 Java Database Connectivity는 Java 프로그래밍 언어와 광범위한 데이터베이스 간의 데이터베이스 독립적 연결을위한 표준 Java API입니다.

JDBC 라이브러리에는 일반적으로 데이터베이스 사용과 관련된 각 작업에 대한 API가 포함되어 있습니다.

  • 데이터베이스에 연결

  • SQL 또는 MySQL 문 생성

  • 데이터베이스에서 해당 SQL 또는 MySQL 쿼리 실행

  • 결과 레코드보기 및 수정

전제 조건 :

JDBC를 배우려면 다음 두 가지 주제를 잘 이해해야합니다.

  • 핵심 JAVA 프로그래밍

  • SQL 또는 MySQL 데이터베이스

JDBC-환경 설정 :

다음 설정을 완료했는지 확인하십시오.

  • 핵심 JAVA 설치

  • SQL 또는 MySQL 데이터베이스 설치

위와 별도로 프로젝트에 사용할 데이터베이스를 설정해야합니다. 이것이 EMP이고 동일한 데이터베이스 내의 Employees 테이블에 생성했다고 가정합니다.

JDBC 애플리케이션 생성 :

이 튜토리얼에서 간략하게 설명 할 JDBC 애플리케이션 빌드에는 6 단계가 포함됩니다.

패키지 가져 오기 :

이를 위해서는 데이터베이스 프로그래밍에 필요한 JDBC 클래스가 포함 된 패키지를 포함해야합니다. 대부분의 경우 import java.sql. *를 사용하면 다음과 같이 충분합니다.

//STEP 1. Import required packages
import java.sql.*;

JDBC 드라이버를 등록하십시오.

데이터베이스와의 통신 채널을 열 수 있도록 드라이버를 초기화해야합니다. 다음은이를위한 코드 스 니펫입니다.

//STEP 2: Register JDBC driver
Class.forName("com.mysql.jdbc.Driver");

연결 열기 :

이를 위해서는 DriverManager.getConnection () 메서드를 사용하여 다음과 같이 데이터베이스와의 물리적 연결을 나타내는 Connection 객체를 만들어야합니다.

//STEP 3: Open a connection
//  Database credentials
static final String USER = "username";
static final String PASS = "password";
System.out.println("Connecting to database...");
conn = DriverManager.getConnection(DB_URL,USER,PASS);

쿼리를 실행합니다.

이를 위해서는 다음과 같이 SQL 문을 작성하고 데이터베이스에 제출하기 위해 Statement 또는 PreparedStatement 유형의 개체를 사용해야합니다.

//STEP 4: Execute a query
System.out.println("Creating statement...");
stmt = conn.createStatement();
String sql;
sql = "SELECT id, first, last, age FROM Employees";
ResultSet rs = stmt.executeQuery(sql);

SQL UPDATE, INSERT 또는 DELETE 문이 필요한 경우 다음 코드 조각이 필요합니다.

//STEP 4: Execute a query
System.out.println("Creating statement...");
stmt = conn.createStatement();
String sql;
sql = "DELETE FROM Employees";
ResultSet rs = stmt.executeUpdate(sql);

결과 세트에서 데이터 추출 :

이 단계는 데이터베이스에서 데이터를 가져 오는 경우에 필요합니다. 적절한 ResultSet.getXXX () 메소드를 사용하여 다음과 같이 결과 세트에서 데이터를 검색 할 수 있습니다.

//STEP 5: Extract data from result set
while(rs.next()){
    //Retrieve by column name
    int id  = rs.getInt("id");
    int age = rs.getInt("age");
    String first = rs.getString("first");
    String last = rs.getString("last");

    //Display values
    System.out.print("ID: " + id);
    System.out.print(", Age: " + age);
    System.out.print(", First: " + first);
    System.out.println(", Last: " + last);
}

환경 정리 :

다음과 같이 JVM의 가비지 수집에 의존하는 대신 모든 데이터베이스 리소스를 명시 적으로 닫아야합니다.

//STEP 6: Clean-up environment
rs.close();
stmt.close();
conn.close();

첫 번째 JDBC 프로그램 :

위의 단계를 기반으로 JDBC 코드를 작성하는 동안 템플릿으로 사용할 수있는 다음과 같은 통합 샘플 코드를 가질 수 있습니다.

이 샘플 코드는 환경 장에서 수행 한 환경 및 데이터베이스 설정을 기반으로 작성되었습니다.

//STEP 1. Import required packages
import java.sql.*;

public class FirstExample {
   // JDBC driver name and database URL
   static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";  
   static final String DB_URL = "jdbc:mysql://localhost/EMP";

   //  Database credentials
   static final String USER = "username";
   static final String PASS = "password";
   
   public static void main(String[] args) {
   Connection conn = null;
   Statement stmt = null;
   try{
      //STEP 2: Register JDBC driver
      Class.forName("com.mysql.jdbc.Driver");

      //STEP 3: Open a connection
      System.out.println("Connecting to database...");
      conn = DriverManager.getConnection(DB_URL,USER,PASS);

      //STEP 4: Execute a query
      System.out.println("Creating statement...");
      stmt = conn.createStatement();
      String sql;
      sql = "SELECT id, first, last, age FROM Employees";
      ResultSet rs = stmt.executeQuery(sql);

      //STEP 5: Extract data from result set
      while(rs.next()){
         //Retrieve by column name
         int id  = rs.getInt("id");
         int age = rs.getInt("age");
         String first = rs.getString("first");
         String last = rs.getString("last");

         //Display values
         System.out.print("ID: " + id);
         System.out.print(", Age: " + age);
         System.out.print(", First: " + first);
         System.out.println(", Last: " + last);
      }
      //STEP 6: Clean-up environment
      rs.close();
      stmt.close();
      conn.close();
   }catch(SQLException se){
      //Handle errors for JDBC
      se.printStackTrace();
   }catch(Exception e){
      //Handle errors for Class.forName
      e.printStackTrace();
   }finally{
      //finally block used to close resources
      try{
         if(stmt!=null)
            stmt.close();
      }catch(SQLException se2){
      }// nothing we can do
      try{
         if(conn!=null)
            conn.close();
      }catch(SQLException se){
         se.printStackTrace();
      }//end finally try
   }//end try
   System.out.println("Goodbye!");
}//end main
}//end FirstExample

이제 위의 예제를 다음과 같이 컴파일 해 보겠습니다.

C:\>javac FirstExample.java
C:\>

당신이 달릴 때 FirstExample, 다음 결과를 생성합니다.

C:\>java FirstExample
Connecting to database...
Creating statement...
ID: 100, Age: 18, First: Zara, Last: Ali
ID: 101, Age: 25, First: Mahnaz, Last: Fatma
ID: 102, Age: 30, First: Zaid, Last: Khan
ID: 103, Age: 28, First: Sumit, Last: Mittal
C:\>

SQLException 메서드 :

SQLException은 드라이버와 데이터베이스 모두에서 발생할 수 있습니다. 이러한 예외가 발생하면 SQLException 유형의 오브젝트가 catch 절에 전달됩니다.

전달 된 SQLException 객체에는 예외에 대한 추가 정보를 검색하는 데 사용할 수있는 다음 메서드가 있습니다.

방법 기술
getErrorCode () 예외와 관련된 오류 번호를 가져옵니다.
getMessage () 드라이버가 처리 한 오류에 대한 JDBC 드라이버의 오류 메시지를 가져 오거나 데이터베이스 오류에 대한 Oracle 오류 번호 및 메시지를 가져옵니다.
getSQLState () XOPEN SQLstate 문자열을 가져옵니다. JDBC 드라이버 오류의 경우이 메서드에서 유용한 정보가 반환되지 않습니다. 데이터베이스 오류의 경우 5 자리 XOPEN SQLstate 코드가 리턴됩니다. 이 메서드는 null을 반환 할 수 있습니다.
getNextException () 예외 체인의 다음 예외 개체를 가져옵니다.
printStackTrace () 현재 예외 또는 throwable 및 역 추적을 표준 오류 스트림으로 인쇄합니다.
printStackTrace (PrintStream s) 이 throwable 및 역 추적을 지정한 인쇄 스트림에 인쇄합니다.
printStackTrace (PrintWriter w) 이 throwable 및 역 추적을 지정한 인쇄 작성기에 인쇄합니다.

Exception 객체에서 사용 가능한 정보를 활용하여 예외를 포착하고 적절하게 프로그램을 계속할 수 있습니다. 다음은 try 블록의 일반적인 형식입니다.

try {
   // Your risky code goes between these curly braces!!!
}
catch(Exception ex) {
   // Your exception handling code goes between these 
   // curly braces, similar to the exception clause 
   // in a PL/SQL block.
}
finally {
   // Your must-always-be-executed code goes between these 
   // curly braces. Like closing database connection.
}

JDBC-데이터 유형 :

다음 표는 PreparedStatement 또는 CallableStatement 오브젝트의 setXXX () 메소드 또는 ResultSet.updateXXX () 메소드를 호출 할 때 Java 데이터 유형이 변환되는 기본 JDBC 데이터 유형을 요약합니다.

SQL JDBC / 자바 setXXX updateXXX
VARCHAR java.lang.String setString updateString
java.lang.String setString updateString
LONGVARCHAR java.lang.String setString updateString
비트 부울 setBoolean updateBoolean
숫자 java.math.BigDecimal setBigDecimal updateBigDecimal
TINYINT 바이트 setByte updateByte
SMALLINT 짧은 setShort updateShort
정수 int setInt updateInt
BIGINT setLong updateLong
레알 흙손 setFloat updateFloat
흙손 흙손 setFloat updateFloat
더블 더블 setDouble updateDouble
VARBINARY 바이트 [] setBytes updateBytes
바이너리 바이트 [] setBytes updateBytes
데이트 java.sql.Date setDate 업데이트 날짜
시각 java.sql.Time setTime updateTime
타임 스탬프 java.sql.Timestamp setTimestamp updateTimestamp
CLOB java.sql.Clob setClob updateClob
얼룩 java.sql.Blob setBlob updateBlob
정렬 java.sql.Array setARRAY updateARRAY
REF java.sql.Ref SetRef updateRef
구조 java.sql.Struct SetStruct updateStruct

JDBC 3.0은 BLOB, CLOB, ARRAY 및 REF 데이터 유형에 대한 지원을 강화했습니다. 이제 ResultSet 객체에는 서버의 각 데이터를 직접 조작 할 수있는 updateBLOB (), updateCLOB (), updateArray () 및 updateRef () 메서드가 있습니다.

setXXX () 및 updateXXX () 메소드를 사용하면 특정 Java 유형을 특정 JDBC 데이터 유형으로 변환 할 수 있습니다. setObject () 및 updateObject () 메소드를 사용하면 거의 모든 Java 유형을 JDBC 데이터 유형에 매핑 할 수 있습니다.

ResultSet 오브젝트는 열 값을 검색하기 위해 각 데이터 유형에 해당하는 getXXX () 메소드를 제공합니다. 각 방법은 열 이름 또는 서수 위치와 함께 사용할 수 있습니다.

SQL JDBC / 자바 setXXX getXXX
VARCHAR java.lang.String setString getString
java.lang.String setString getString
LONGVARCHAR java.lang.String setString getString
비트 부울 setBoolean getBoolean
숫자 java.math.BigDecimal setBigDecimal getBigDecimal
TINYINT 바이트 setByte getByte
SMALLINT 짧은 setShort getShort
정수 int setInt getInt
BIGINT setLong getLong
레알 흙손 setFloat getFloat
흙손 흙손 setFloat getFloat
더블 더블 setDouble getDouble
VARBINARY 바이트 [] setBytes getBytes
바이너리 바이트 [] setBytes getBytes
데이트 java.sql.Date setDate getDate
시각 java.sql.Time setTime getTime
타임 스탬프 java.sql.Timestamp setTimestamp getTimestamp
CLOB java.sql.Clob setClob getClob
얼룩 java.sql.Blob setBlob getBlob
정렬 java.sql.Array setARRAY getARRAY
REF java.sql.Ref SetRef getRef
구조 java.sql.Struct SetStruct getStruct

JDBC-일괄 처리 :

일괄 처리를 사용하면 관련 SQL 문을 일괄 처리로 그룹화하고 한 번의 호출로 데이터베이스에 제출할 수 있습니다.

한 번에 여러 SQL 문을 데이터베이스에 보낼 때 통신 오버 헤드 양이 줄어들어 성능이 향상됩니다.

  • 이 기능을 지원하는 데 JDBC 드라이버는 필요하지 않습니다. 당신은 사용해야 DatabaseMetaData.supportsBatchUpdates () 대상 데이터베이스가 배치 갱신 처리를 지원하는지 확인하는 방법을. JDBC 드라이버가이 기능을 지원하는 경우 메서드는 true를 반환합니다.

  • 그만큼 addBatch()Statement, PreparedStatementCallableStatement의 메소드는 개별 명령문을 배치에 추가하는 데 사용됩니다. 그만큼executeBatch() 함께 그룹화 된 모든 명령문의 실행을 시작하는 데 사용됩니다.

  • 그만큼 executeBatch() 정수 배열을 반환하고 배열의 각 요소는 각 업데이트 문에 대한 업데이트 수를 나타냅니다.

  • 처리를 위해 일괄 처리에 문을 추가 할 수있는 것처럼 clearBatch()방법. 이 메서드는 addBatch () 메서드로 추가 한 모든 문을 제거합니다. 그러나 제거 할 문을 선택적으로 선택할 수는 없습니다.

JDBC-스트리밍 데이터 :

PreparedStatement 개체에는 입력 및 출력 스트림을 사용하여 매개 변수 데이터를 제공하는 기능이 있습니다. 이를 통해 CLOB 및 BLOB 데이터 유형과 같은 큰 값을 보유 할 수있는 데이터베이스 열에 전체 파일을 배치 할 수 있습니다.

데이터를 스트리밍하는 데 사용할 수있는 방법은 다음과 같습니다.

  • setAsciiStream(): 이 방법은 큰 ASCII 값을 제공하는 데 사용됩니다.

  • setCharacterStream(): 이 방법은 큰 UNICODE 값을 제공하는 데 사용됩니다.

  • setBinaryStream(): 이 방법은 큰 이진 값을 제공하는 데 사용됩니다.

setXXXStream () 메서드에는 매개 변수 자리 표시 자 외에 추가 매개 변수 인 파일 크기가 필요합니다. 이 매개 변수는 스트림을 사용하여 데이터베이스로 전송해야하는 데이터의 양을 드라이버에 알려줍니다.

이러한 모든 개념에 대한 자세한 내용을 보려면 전체 자습서를 진행해야합니다.