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, PreparedStatement 및 CallableStatement의 메소드는 개별 명령문을 배치에 추가하는 데 사용됩니다. 그만큼executeBatch() 함께 그룹화 된 모든 명령문의 실행을 시작하는 데 사용됩니다.
그만큼 executeBatch() 정수 배열을 반환하고 배열의 각 요소는 각 업데이트 문에 대한 업데이트 수를 나타냅니다.
처리를 위해 일괄 처리에 문을 추가 할 수있는 것처럼 clearBatch()방법. 이 메서드는 addBatch () 메서드로 추가 한 모든 문을 제거합니다. 그러나 제거 할 문을 선택적으로 선택할 수는 없습니다.
JDBC-스트리밍 데이터 :
PreparedStatement 개체에는 입력 및 출력 스트림을 사용하여 매개 변수 데이터를 제공하는 기능이 있습니다. 이를 통해 CLOB 및 BLOB 데이터 유형과 같은 큰 값을 보유 할 수있는 데이터베이스 열에 전체 파일을 배치 할 수 있습니다.
데이터를 스트리밍하는 데 사용할 수있는 방법은 다음과 같습니다.
setAsciiStream(): 이 방법은 큰 ASCII 값을 제공하는 데 사용됩니다.
setCharacterStream(): 이 방법은 큰 UNICODE 값을 제공하는 데 사용됩니다.
setBinaryStream(): 이 방법은 큰 이진 값을 제공하는 데 사용됩니다.
setXXXStream () 메서드에는 매개 변수 자리 표시 자 외에 추가 매개 변수 인 파일 크기가 필요합니다. 이 매개 변수는 스트림을 사용하여 데이터베이스로 전송해야하는 데이터의 양을 드라이버에 알려줍니다.
이러한 모든 개념에 대한 자세한 내용을 보려면 전체 자습서를 진행해야합니다.