jdbc resultset how use java resultset retrieve data
이 튜토리얼에서는 JDBC ResultSet을 사용하여 데이터를 검색하는 방법을 설명합니다. 또한 예제를 통해 ResultSetMetaData 및 DatabaseMetaData 인터페이스에 대해 학습합니다.
에서 JDBC DriverManager 튜토리얼 JDBC 튜토리얼 시리즈 , 우리는 Java 애플리케이션에서 JDBC DriverManager 및 그 메소드 인 JDBC PreparedStatement를 사용하는 방법을 배웠습니다.
이 튜토리얼에서는 JDBC의 나머지 인터페이스에 대해 설명합니다. 이전 자습서에서 Statement, PreparedStatement 및 CallableStatement 인터페이스를 다루었습니다.
여기서는 JDBC ResultSet, ResultSetMetaData 및 DatabaseMetaData 인터페이스, 해당 메소드 및 Java 프로그램에서 메소드 사용 방법에 대해 학습합니다.
학습 내용 :
JDBC ResultSet 인터페이스
ResultSet 인터페이스는 java.sql 패키지에 있습니다. Java 프로그램에서 SQL 문을 수행 한 후 데이터베이스 테이블에서 반환 된 데이터를 저장하는 데 사용됩니다. ResultSet의 오브젝트는 결과 데이터에서 커서 포인트를 유지합니다. 기본적으로 커서는 결과 데이터의 첫 번째 행 앞에 위치합니다.
next () 메서드는 커서를 앞으로의 다음 위치로 이동하는 데 사용됩니다. 더 이상 레코드가 없으면 FALSE를 반환합니다. 명령문 객체를 사용하여 executeQuery () 메서드를 호출하여 데이터를 검색합니다. Statement, PreparedStatement 또는 CallableStatement 객체 일 수 있습니다. PreparedStatement 및 CallableStatement 인터페이스는 Statement 인터페이스의 하위 인터페이스입니다.
문 인터페이스
Statement statemnt1 = conn.createStatement(); ResultSet rs1 = statemnt1.executeQuery(“Select * from EMPLOYEE_DETAILS”);
PreparedStatement 인터페이스
PreparedStatement pstatemnt1 = conn.prepareStatement(insert_query); ResultSet rs1 = pstatemnt1.executeQuery(“Select * from EMPLOYEE_DETAILS”);
getX () 메서드를 사용하여 X –가 열의 데이터 유형 인 결과를 반복하면서 열의 데이터를 가져올 수 있습니다. 열 이름 또는 인덱스를 사용하여 getX () 메서드를 사용하여 값을 가져올 수 있습니다.
while(rs1.next()) { int empNum = rs1.getInt('empNum'); String lastName = rs1.getString('lastName'); String firstName = rs1.getString('firstName'); String email = rs1.getString('email'); String deptNum = rs1.getString('deptNum'); String salary = rs1.getString('salary'); System.out.println(empNum + ',' +lastName+ ',' +firstName+ ',' +email +','+deptNum +',' +salary); }
getX () 메서드에서 Column Name 대신 Column의 인덱스 번호를 언급 할 수도 있습니다.
while(rs1.next()) { int empNum = rs1.getInt(1); String lastName = rs1.getString(2); String firstName = rs1.getString(3); String email = rs1.getString(4); String deptNum = rs1.getString(5); String salary = rs1.getString(6); System.out.println(empNum + ',' +lastName+ ',' +firstName+ ',' +email +','+deptNum +',' +salary); }
결과 세트 유형
기본적으로 실행 된 SQL 문의 출력으로 반환 된 ResultSet의 데이터 / 값을 순방향으로 반복 할 수 있습니다. Scrollable ResultSet을 사용하여 다른 방향으로 값을 반복 할 수 있습니다. Statement, PreparedStatement 및 CallableStatement 객체를 생성하는 동안 ResultSet의 유형과 동시성을 지정할 수 있습니다.
ResultSet에는 3 가지 유형이 있습니다. 그들은:
- TYPE_FORWARD_ONLY : 커서가 처음부터 끝까지 즉, 앞으로 이동하는 기본 옵션입니다.
- TYPE_SCROLL_INSENSITIVE : 이 유형에서는 커서가 앞뒤로 이동합니다. 저장된 데이터를 반복하는 동안 데이터를 변경하면 누군가 DB의 데이터를 변경해도 데이터 세트에서 업데이트되지 않습니다. 데이터 세트에는 SQL 쿼리가 데이터를 반환하는 시점의 데이터가 있기 때문입니다.
- TYPE_SCROLL_SENSITIVE : TYPE_SCROLL_INSENSITIVE와 유사합니다. 차이점은 SQL 쿼리가 데이터를 반환 한 후 데이터를 업데이트하는 경우 반복하는 동안 데이터 집합의 변경 사항을 반영한다는 것입니다.
ResultSet 동시성
ResultSet에는 두 가지 동시성 모드가 있습니다. 그들은:
- ResultSet.CONCUR_READ_ONLY : 기본 동시성 모드입니다. ResultSet의 데이터 만 읽을 수 있습니다. 업데이트가 적용되지 않습니다.
- ResultSet.CONCUR_UPDATABLE : ResultSet 객체의 데이터를 업데이트 할 수 있습니다.
일부 데이터베이스는 모든 ResultSet 유형에 대해 동시성 모드를 지원하지 않습니다. 이 경우 supportsResultSetConcurrency () 메소드를 사용하여 원하는 유형 및 동시성 모드를 지원하는지 확인해야합니다.
ResultSet 인터페이스의 메소드
ResultSet 메서드에는 4 가지 범주가 있습니다. 그들은:
- 탐색 방법
- 게터 메서드
- 세터 방법
- 기타 방법
먼저 탐색 방법에 대해 논의한 다음 더 나아갈 것입니다.
# 1) 탐색 방법
이 방법은 데이터 세트 주위로 커서를 이동하는 데 사용됩니다.
- 부울 절대 값 (int row) : 매개 변수에 언급 된 지정된 행으로 커서를 이동하고 작업이 성공하면 true를 반환하고 그렇지 않으면 false를 반환하는 데 사용됩니다.
- afterLast () 무효화 : ResultSet 커서가 마지막 행 뒤로 이동하도록합니다.
- beforeFirst () 무효화 : ResultSet 커서가 첫 번째 행 앞으로 이동하도록합니다.
- 부울 first () : ResultSet 커서를 첫 번째 행으로 이동합니다. 작업이 성공하면 True를 반환하고 그렇지 않으면 False를 반환합니다.
- 부울 last () : ResultSet 커서를 마지막 행으로 이동합니다. 작업이 성공하면 True를 반환하고 그렇지 않으면 False를 반환합니다.
- 부울 next () : ResultSet 커서를 다음 행으로 이동합니다. 레코드가 더 있으면 True를 반환하고 더 이상 레코드가 없으면 False를 반환합니다.
- 부울 이전 () : ResultSet 커서를 이전 행으로 이동합니다. 작업이 성공하면 True를 반환하고 그렇지 않으면 False를 반환합니다.
- 부울 relative () : 커서를 앞뒤로 주어진 행 수로 이동합니다.
- Int getRow () : ResultSet 오브젝트가 현재 가리키는 현재 행 번호를 리턴합니다.
- moveToCurrentRow () 무효화 : 현재 행 삽입에있는 경우 커서를 현재 행으로 다시 이동합니다.
- moveToInsertRow () 무효화 : 커서를 특정 행으로 이동하여 데이터베이스에 행을 삽입합니다. 현재 커서 위치를 기억합니다. 따라서 moveToCurrentRow () 메서드를 사용하여 삽입 후 커서를 현재 행으로 이동할 수 있습니다.
이 튜토리얼에서 모든 프로그램은 Java로 작성됩니다. 우리는 Java 8 버전과 Oracle DB를 사용했습니다.
>> Oracle 소프트웨어는 다음에서 다운로드 할 수 있습니다. 여기
>> Java 버전 8은 다음에서 다운로드 할 수 있습니다. 여기
단계별 Java 설치 프로세스가 있습니다.
JDBC ResultSet 예제 프로그램 :( 탐색 방법 사용)
package com.STH.JDBC; import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; public class ResultSet_Example { public static void main(String() args) throws ClassNotFoundException { // TODO Auto-generated method stub //Select query String select_query = 'select * from employee_details'; Class.forName('oracle.jdbc.driver.OracleDriver'); //Connecting to Oracle DB try(Connection conn = DriverManager.getConnection('jdbc:oracle:thin:system/pass123@localhost:1521:X E')) { //Creating DatabaseMetaData object DatabaseMetaData dbmd = conn.getMetaData(); //Checking whether the driver supports scroll sensitive type and concur updatable boolean isSupportResultSetType = dbmd.supportsResultSetConcurrency(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); if(isSupportResultSetType == true) { // Creating prepared Statement PreparedStatement pstatemnt1 = conn.prepareStatement(select_query,ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet. CONCUR_UPDATABLE); ResultSet rs = pstatemnt1.executeQuery(); //Moving the cursor to point first row rs.first(); System.out.println('FIRST ROW
EMP NUM = ' + rs.getInt('empNum') + '
LAST NAME = '+ rs.getString(2)+'
FIRST NAME = ' + rs.getString(3)); //Moving the cursor to point last row rs.last(); System.out.println('LAST ROW
EMP NUM = ' + rs.getInt('empNum') + '
LAST NAME = '+ rs.getString(2)+'
FIRST NAME = ' + rs.getString(3)); //Moving the cursor to point before first row rs.beforeFirst(); System.out.println('Cursor is pointing at before the first row. Use next() to move in forward direction'); //Moving the cursor to point first row using next() rs.next(); System.out.println('FIRST ROW
EMP NUM = ' + rs.getInt('empNum') + '
LAST NAME = '+ rs.getString(2)+'
FIRST NAME = ' + rs.getString(3)); //Moving the cursor to point after last row rs.afterLast(); System.out.println('Cursor is pointing at after the last row. Use previous() to move in backward direction'); //Moving the cursor to point last row using previous() rs.previous(); System.out.println('LAST ROW
EMP NUM = ' + rs.getInt('empNum') + '
LAST NAME = '+ rs.getString(2)+'
FIRST NAME = ' + rs.getString(3)); //Moving the cursor to point third row rs.absolute(3); System.out.println('Cursor is pointing at 3rd row'); System.out.println('THIRD ROW
EMP NUM = ' + rs.getInt('empNum') + '
LAST NAME = '+ rs.getString(2)+'
FIRST NAME = ' + rs.getString(3)); //Moving the cursor to point previous row of third row rs.relative(-1); System.out.println('Cursor is pointing to the 1 row previous to the 3rd row'); System.out.println('Second ROW
EMP NUM = ' + rs.getInt('empNum') + '
LAST NAME = '+ rs.getString(2)+'
FIRST NAME = ' + rs.getString(3)); //Moving the cursor to point 4th row after the 2nd row rs.relative(4); System.out.println('Cursor is pointing to the 4th row after the 2nd row'); System.out.println('SIXTH ROW
EMP NUM = ' + rs.getInt('empNum') + '
LAST NAME = '+ rs.getString(2)+'
FIRST NAME = ' + rs.getString(3)); //Moving the cursor to point current row System.out.println(' Current Row = ' + rs.getRow()); } } catch (SQLException e) { e.printStackTrace(); } } }
산출:
Employee_details 테이블의 데이터
설명:
위의 프로그램에서 우리는 ResultSet에 first (), last (), beforeFirst (), afterLast (), next (), previous (), absolute (), relative () 및 getRow () 메소드를 구현했습니다. 이러한 메소드를 사용하기 위해 prepareStatement 메소드에서 ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE 값을 설정합니다.
다음으로 ResultSet의 Getter 메소드에 대해 설명합니다.
# 2) Getter 메서드
ResultSet는 데이터베이스의 테이블 데이터를 저장했습니다. Getter 메소드는 ResultSet의 테이블 값을 가져 오는 데 사용됩니다. 이를 위해 열 인덱스 값 또는 열 이름을 전달해야합니다.
다음은 ResultSet의 getter 메소드입니다.
- int getInt (int ColumnIndex) : 지정된 열 Index의 값을 int 데이터 유형으로 가져 오는 데 사용됩니다.
- float getFloat (int ColumnIndex) : 지정된 열 Index의 값을 float 데이터 유형으로 가져 오는 데 사용됩니다.
- java.sql.date getDate (int ColumnIndex) : 지정된 열 Index의 값을 날짜 값으로 가져 오는 데 사용됩니다.
- int getInt (문자열 열 이름) : 지정된 열의 값을 int 데이터 유형으로 가져 오는 데 사용됩니다.
- float getFloat (문자열 열 이름) : 지정된 열의 값을 float 데이터 유형으로 가져 오는 데 사용됩니다.
- Java.sql.date getDate (String ColumnName) : 지정된 열의 값을 날짜 값으로 가져 오는 데 사용됩니다.
ResultSet 인터페이스에도 모든 기본 데이터 유형 (Boolean, long, double) 및 String에 대한 getter 메소드가 있습니다. 데이터베이스에서도 배열 및 이진 데이터 유형을 얻을 수 있습니다. 그것에 대한 방법도 있습니다.
# 3) Setter / Updater 방법
ResultSet Updater 메소드를 사용하여 데이터베이스의 값을 업데이트 할 수 있습니다. Getter 메서드와 비슷하지만 여기서는 데이터베이스에서 업데이트 할 특정 열에 대한 값 / 데이터를 전달해야합니다.
다음은 ResultSet의 업데이트 프로그램 메소드입니다.
- void updateInt (int ColumnIndex, int Value) : 지정된 열 Index의 값을 int 값으로 업데이트하는 데 사용됩니다.
- void updateFloat (int ColumnIndex, float f) : 지정된 열 Index의 값을 부동 값으로 업데이트하는 데 사용됩니다.
- void updateDate (int ColumnIndex, Date d) : 지정된 열 Index의 값을 날짜 값으로 업데이트하는 데 사용됩니다.
- void updateInt (String ColumnName, int Value) : 지정된 int 값으로 지정된 열의 값을 업데이트하는 데 사용됩니다.
- void updateFloat (String ColumnName, float f) : 주어진 float 값으로 지정된 열의 값을 업데이트하는 데 사용됩니다.
- Java.sql.date getDate (String ColumnName) : 지정된 날짜 값으로 지정된 열의 값을 업데이트하는 데 사용됩니다.
ResultSet 인터페이스에는 모든 기본 데이터 유형 (Boolean, long, double) 및 String에 대한 Updater 메소드가 있습니다.
Updater 메서드는 ResultSet 개체의 데이터 만 업데이트합니다. insertRow 또는 updateRow 메서드를 호출하면 DB에서 값이 업데이트됩니다.
행 업데이트 :
updateX () 메서드를 호출하고 열 이름이나 인덱스 및 업데이트 할 값을 전달하여 행의 데이터를 업데이트 할 수 있습니다. updateX 메서드에서 X 대신 모든 데이터 유형을 사용할 수 있습니다. 지금까지 ResultSet 객체의 데이터를 업데이트했습니다. DB의 데이터를 업데이트하려면 updateRow () 메서드를 호출해야합니다.
행 삽입 :
새 행을 삽입하기 위해 커서를 이동하려면 moveToInsertRow ()를 사용해야합니다. 탐색 방법 섹션에서 이미 다루었습니다. 다음으로, 행에 데이터를 추가하기 위해 updateX () 메서드를 호출해야합니다. 특정 열의 기본값을 사용하는 다른 모든 열에 대한 데이터를 제공해야합니다.
데이터를 업데이트 한 후 insertRow () 메서드를 호출해야합니다. 그런 다음 moveToCurrentRow () 메서드를 사용하여 커서 위치를 새 행 삽입을 시작하기 전의 행으로 되돌립니다.
ResultSet 예 :
package com.STH.JDBC; import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class ResultSet_Example1 { public static void main(String() args) throws ClassNotFoundException { // TODO Auto-generated method stub String select_query = 'select empnum,lastName,firstName from employee_details'; String insert_query = 'insert into employee_details values(?,?,?,?,?,?)'; Class.forName('oracle.jdbc.driver.OracleDriver'); //Connecting to Oracle DB try(Connection conn = DriverManager.getConnection('jdbc:oracle:thin:system/pass123@localhost:1521:XE')) { //Creating DatabaseMetaData object DatabaseMetaData dbmd = conn.getMetaData(); //Checking whether the driver supports scroll insensitive type and concur updatable boolean isSupportResultSetType = dbmd.supportsResultSetConcurrency(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE); if(isSupportResultSetType == true) { // Creating prepared Statement PreparedStatement pstatemnt1 = conn.prepareStatement(select_query,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE); ResultSet rs = pstatemnt1.executeQuery(select_query); //Moving the cursor to point last row of the table rs.last(); System.out.println('LAST ROW: Before inserting new Employee'); System.out.println('LAST ROW: EMPNUM = ' + rs.getInt(1)); System.out.println('
EMP NUM = ' + rs.getInt('empNum') + '
LAST NAME = '+ rs.getString(2)+'
FIRST NAME = ' + rs.getString(3)); // Setting the values to insert in the EMPLOYEE_DETAILS Table //Moving the cursor to point insert a row to table rs.moveToInsertRow(); //Update EMPNUM value rs.updateInt(1, 1017); //Update LAST NAME value rs.updateString(2, 'Bond'); //Update FIRST NAME value rs.updateString(3, 'James'); //Insert a new row rs.insertRow(); //Moving the cursor to point 5th row rs.absolute(5); System.out.println('Befor Updating EMPNUM of the 5th ROW'); System.out.println('
EMP NUM = ' + rs.getInt('empNum') + '
LAST NAME = '+ rs.getString(2)+'
FIRST NAME = ' + rs.getString(3)); System.out.println(' Updating EMP id of the 5th EMPLOYEE'); //Updating EMPNUM of 5th row rs.updateInt(1,3005); rs.updateRow(); System.out.println('
EMP NUM = ' + rs.getInt('empNum') + '
LAST NAME = '+ rs.getString(2)+'
FIRST NAME = ' + rs.getString(3)); //Moving the cursor to point last row rs.last(); System.out.println('LAST ROW: EMPNUM = ' + rs.getInt(1)); System.out.println('
EMP NUM = ' + rs.getInt('empNum') + '
LAST NAME = '+ rs.getString(2)+'
FIRST NAME = ' + rs.getString(3)); } } catch (SQLException e) { e.printStackTrace(); } } }
산출:
설명:
위의 프로그램에서 우리가 한 일은 먼저 SELECT 쿼리를 사용하여 ResultSet 개체에 Employee_details 테이블의 데이터를 저장했습니다. 그런 다음 ResultSet의 last () 메서드를 사용하여 employee_details 테이블의 마지막 행 데이터를 표시했습니다. moveToInsertRow () 메서드는 커서가 현재 행을 가리 키도록합니다. 이제 현재 행이 마지막 행이됩니다.
행의 값을 업데이트하는 데 사용되는 updateXXX () 메소드와 insertRow () 메소드가 새 행에 데이터를 삽입했습니다. absolute () 메서드를 사용하여 커서가 5를 가리 키도록했습니다.일열. UpdateInt () 메서드는 5의 새 ID로 EMPNUM을 업데이트하는 데 사용되었습니다.일테이블에있는 직원. 그 후 EMPNUM 업데이트 여부를 확인하는 데이터를 표시합니다.
last ()를 사용하여 테이블의 마지막 행을 가리 키도록 커서를 만들고 표시했습니다. 위의 로직을 수행하려면 prepareStatement 메소드에서 ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE 값을 설정해야합니다.
# 4) 기타 방법
- void close () : ResultSet 인스턴스를 닫고 ResultSet 인스턴스와 연관된 자원을 해제하는 데 사용됩니다.
- ResultSetMetaData getMetaData () : ResultSetMetaData 인스턴스를 리턴합니다. 쿼리 출력 열의 유형 및 속성에 대한 정보가 있습니다. 다음 섹션에서 ResultSetMetaData에 대해 자세히 알아볼 것입니다.
ResultSetMetaData
메타 데이터 란?
메타 데이터는 데이터에 대한 데이터를 의미합니다. 이 인터페이스를 사용하여 ResultSet에 대한 자세한 정보를 얻을 수 있습니다. java.sql 패키지에서 사용할 수 있습니다. 모든 ResultSet 오브젝트는 하나의 ResultSetMetaData 오브젝트와 연관됩니다.
이 개체는 열의 데이터 유형, 열 이름, 열 수, 테이블 이름, 스키마 이름 등과 같은 열의 속성에 대한 세부 정보를 갖게됩니다. ResultSet의 getMetaData () 메서드를 사용하여 ResultSetMetaData 개체를 가져올 수 있습니다.
ResultSetMetaData의 구문 :
PreparedStatement pstatemnt1 = conn.prepareStatement(insert_query); ResultSet rs1 = pstatemnt1.executeQuery(“Select * from EMPLOYEE_DETAILS”); ResultSetMetaData rsmd = rs.getMetaData();
ResultSetMetaData 인터페이스의 중요한 메소드 :
방법 이름 | 기술 |
---|---|
부울 isCaseSensitive (int Column) | 주어진 열이 대소 문자를 구분하면 true를 반환하고 그렇지 않으면 false를 반환합니다. |
문자열 getColumnName (int 열) | 특정 열의 열 이름을 반환합니다. |
문자열 getColumnTypeName (int 열) | 매개 변수로 전달한 특정 열의 데이터 유형을 반환합니다. |
문자열 getTableName (int 열) | 열의 테이블 이름을 반환합니다. |
문자열 getSchemaName (int 열) | 열 테이블의 스키마 이름을 반환합니다. |
int getColumnCount () | ResultSet의 열 수를 반환합니다. |
부울 isAutoIncrement (int Column) | 주어진 열이 자동 증가이면 true를 반환하고 그렇지 않으면 false를 반환합니다. |
ResultSetMetaData 예
package com.STH.JDBC; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.sql.Statement; public class ResultSetMetaData_Example { public static void main(String() args) throws ClassNotFoundException, SQLException { // TODO Auto-generated method stub String QUERY= ' select * from employee_details'; Class.forName('oracle.jdbc.driver.OracleDriver'); try(Connection conn = DriverManager.getConnection('jdbc:oracle:thin:system/pass123@localhost:1521:XE')) { Statement statemnt1 = conn.createStatement(); ResultSet rs1 =null; rs1 = statemnt1.executeQuery(QUERY); ResultSetMetaData rsmd = rs1.getMetaData(); System.out.println(' We are using ResultSetMetaData '); System.out.println('No: of Columns: '+ rsmd.getColumnCount()); System.out.println('ColumnName of Column 1: '+ rsmd.getColumnName(1)); System.out.println('Data Type of Column 2: ' + rsmd.getColumnTypeName(2)); System.out.println('Table Name of the Column 1: ' + rsmd.getTableName(1)); System.out.println('Schema Name of the Column 1: ' + rsmd.getSchemaName(1)); } } }
산출:
설명:
각도 js 인터뷰 질문 및 답변
위 프로그램에서는 ResultSetMetaData 인터페이스에 getColumnCount (), getColumnName (), getColumnTypeName (), getTableName () 및 getSchemaName () 메소드를 구현했습니다.
DatabaseMetaData
DatabaseMetaData 인터페이스는 DatabaseName, 데이터베이스 버전 등과 같은 데이터베이스에 대한 정보를 제공합니다.
DatabaseMetaData 인터페이스의 중요한 방법 :
방법 이름 | 기술 |
---|---|
문자열 getStringFunctions () | 연결된 데이터베이스에서 사용할 수있는 문자열 함수 목록을 반환합니다. |
문자열 getDriverName () | Java 프로그램에서 사용중인 JDBC 드라이버의 이름을 반환합니다. |
문자열 getDriverVersion () | JDBC 드라이버 버전 번호를 반환합니다. |
문자열 getUserName () | 우리가 사용하는 데이터베이스의 사용자 이름을 반환합니다. |
문자열 getDatabaseProductName () | 우리가 사용하는 데이터베이스의 이름을 반환합니다. |
문자열 getDatabaseProductVersion () | 우리가 사용하는 데이터베이스의 버전 번호를 반환합니다. |
ResultSet getSchemas () | 연결된 데이터베이스에서 사용할 수있는 스키마의 이름을 반환합니다. |
문자열 getTimeDateFunctions () | 연결된 데이터베이스에서 사용할 수있는 시간 및 날짜 함수 목록을 반환합니다. |
문자열 getURL () | 데이터베이스의 URL을 반환합니다. |
부울 isReadOnly () | 데이터베이스가 읽기 전용 모드인지 여부를 반환합니다. |
부울 supportsBatchUpdates () | 데이터베이스가 일괄 업데이트를 지원하는지 여부를 반환합니다. |
부울 supportsSavepoints () | 데이터베이스가 세이브 포인트를 지원하는지 여부를 반환합니다. |
부울 supportsStatementPooling () | 데이터베이스가 Statement Pooling을 지원하는지 여부를 반환합니다. |
부울 supportsStoredProcedures () | 데이터베이스가 저장 프로 시저를 지원하는지 여부를 반환합니다. |
부울 supportsOuterJoins () | 데이터베이스가 외부 조인을 지원하는지 여부를 반환합니다. |
여기에서는 DatabaseMetaData 인터페이스의 몇 가지 중요한 메소드를 나열했습니다. 공식 사이트를 참조 할 수 있습니다. 신탁 DatabaseMetaData 인터페이스에서 사용 가능한 모든 메소드를 볼 수 있습니다.
DatabaseMetaData 예 :
package com.STH.JDBC; import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.sql.Statement; public class DatabaseMetaData_Example { public static void main(String() args) throws ClassNotFoundException, SQLException { // TODO Auto-generated method stub Class.forName('oracle.jdbc.driver.OracleDriver'); Connection conn = DriverManager.getConnection('jdbc:oracle:thin:system/pass123@localhost:1521:XE'); DatabaseMetaData dbmd = conn.getMetaData(); System.out.println('Using DatabaseMetaData'); System.out.println('Driver Name: ' + dbmd.getDriverName()); System.out.println('Driver Version: '+ dbmd.getDriverVersion()); System.out.println('UserName of the Database: ' + dbmd.getUserName()); System.out.println('Database Product Name:' + dbmd.getDatabaseProductName()); System.out.println('Database Product Version: ' + dbmd.getDatabaseProductVersion()); System.out.println('List of String Functions in the Database: ' + dbmd.getStringFunctions()); System.out.println('List of Time & Date functions in the Database: ' + dbmd.getTimeDateFunctions()); System.out.println('URL of the Database: ' + dbmd.getURL()); System.out.println('Database is read - only? ' +dbmd.isReadOnly()); System.out.println('Support Batch Updates? ' + dbmd.supportsBatchUpdates()); System.out.println('Support savepoints? ' + dbmd.supportsSavepoints()); System.out.println('Support Statement Pooling? '+ dbmd.supportsStatementPooling()); System.out.println('Support Stored Procedures? ' + dbmd.supportsStoredProcedures()); System.out.println('Support Outer Join? '+ dbmd.supportsOuterJoins()); } }
산출:
설명:
위의 프로그램에서는 getDriverName (), getDriverVersion (), getUserName (), getDatabaseProductName (), getDatabaseProductVersion (), getStringFunctions (), getTimeDateFunctions (), getURL (), isReadOnly (), supportsBatchUpdates ()를 사용 / 구현했습니다. , supportsStatementPooling (), supportsSavepoints (), supportsStoredProcedures () 및 supportsOuterJoins () 메소드를 DatabaseMetaData 인터페이스에 포함합니다.
주목할 점 :
- JDBC ResultSet 인터페이스는 데이터베이스의 데이터를 저장하고 Java 프로그램에서 사용하는 데 사용됩니다.
- ResultSet을 사용하여 updateXXX () 메소드를 사용하여 데이터를 업데이트 할 수도 있습니다.
- ResultSet 오브젝트는 결과 데이터의 첫 번째 행 앞의 커서를 가리 킵니다. next () 메소드를 사용하여 ResultSet을 반복 할 수 있습니다.
- ResultSet 객체에서 더 이동하기위한 ResultSet의 탐색 메소드가 있습니다.
- ResultMetaData는 열 이름, 열 수, 열의 데이터 유형 등과 같은 ResultSet에 대한 자세한 정보를 가져 오는 데 사용됩니다.
- DatabaseMetData는 우리가 연결 한 데이터베이스에 대한 정보를 얻는 데 사용됩니다.
자주 묻는 질문
Q # 1) ResultSet의 용도는 무엇입니까?
대답: ResultSet은 DB에서 데이터를 저장하고 검색하는 데 사용됩니다. executeQuery () 메소드가 실행되면 ResultSet 객체를 반환합니다. 프로그램에서 해당 ResultSet 객체를 사용하여 논리를 수행 할 수 있습니다.
Q # 2) ResultSet이 비어 있는지 확인하는 방법은 무엇입니까?
대답: IsResultSet Empty를 확인하는 데 사용할 수있는 length (), size ()와 같은 미리 정의 된 메서드는 없습니다. next () 메서드를 사용하여 반복 할 수 있으며 True를 반환하면 비어 있지 않습니다. False를 반환하면 ResultSet이 비어 있음을 의미합니다.
Q # 3) ResultSet이 null 일 수 있습니까?
대답: 아니요, executeQuery () 메서드는 null이 될 수없는 ResultSet 개체를 반환합니다.
Q # 4) 업데이트 가능한 ResultSet은 무엇입니까?
대답: 업데이트 가능한 ResultSet 개체는 열의 데이터를 업데이트하고 열에 데이터를 삽입하고 행을 삭제하는 데 사용됩니다. ResultSet을 업데이트 가능한 것으로 만들려면 스크롤 유형을 민감하거나 민감하지 않게 만들고 CONCUR 유형을 업데이트 가능으로 만들어야합니다.
ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE.
Q # 5) 연결된 데이터베이스 이름은 어떻게 얻나요?
대답: DatabaseMetaData 객체의 getDatabaseProductName () 메소드를 사용할 수 있습니다.
결론
이 튜토리얼에서는 ResultSet, ResultSetMetaData 및 DatabaseMetaData 인터페이스와 JDBC 프로그램에서 일반적으로 사용되는 중요한 메소드에 대해 설명했습니다. ResultSet을 사용하여 DB의 데이터를 업데이트하는 방법도 살펴 보았습니다. ResultSetMetadata에는 열 이름, 열 수 등과 같은 ResultSet에 대한 정보가 포함됩니다.
DatabaseMetaData는 데이터베이스 정보를 포함합니다.
<| 다음 튜토리얼 >>