JDBC DatabaseMetaData 사용 예제
1. DatabaseMetaData 인터페이스 실습
l Batch 작업 지원 여부에 따라 세 개의 데이터 일괄처리하여 삽입하는 예제
l 삽입할 데이터
Id |
Name |
Bonus |
In_date |
Dept_name |
00010 |
이몽룡 |
85000.00 |
1998/7/1 |
영업부 |
00011 |
성춘향 |
75000.00 |
2000/7/1 |
영업부 |
00012 |
변학도 |
70000.00 |
2001/7/1 |
영업부 |
l DatabaseMetaData를 이용하여 JDBC 드라이버가 일괄처리를 지원하는지의 여부를 알아보고 지원한느 경우에 세 개의 데이터를 삽입하는 예제
BatchTest_MetaData.java
01 import java.sql.*; 02 03 public class BatchTest_MetaData{ 04 Connection con = null; 05 DatabaseMetaData dbmd = null; 06 Statement stmt = null; 07 08 public static void main (String args []) { 09 BatchTest_MetaData bt = new BatchTest_MetaData(); 10 bt.connect(); 11 bt.insertBatch(); 12 bt.close(); 13 } 14 15 public void connect(){ 16 try{ 17 Class.forName("oracle.jdbc.driver.OracleDriver"); 18 con = DriverManager.getConnection 19 ("jdbc:oracle:thin:@127.0.0.1:1521:ora9", 20 "jdbc00","jdbc00"); 21 System.out.println("데이터베이스 연결되었습니다."); 22 }catch(ClassNotFoundException e){ 23 System.out.println("JDBC Driver load fail!!!"); 24 }catch(SQLException e){ 25 System.out.println("Connection fail!!!"); 26 e.printStackTrace(); 27 } 28 } 29 30 public void close(){ 31 try{ 32 con.close(); 33 System.out.println("데이터베이스 연결 해제되었습니다."); 34 }catch(SQLException e){ 35 System.out.println("Connection fail!!!"); 36 e.printStackTrace(); 37 }finally{ 38 try{ 39 if(con != null) con.close(); 40 }catch(SQLException e){} 41 } 42 } 43 44 public void insertBatch(){ 45 try{ 46 dbmd = con.getMetaData(); 47 stmt = con.createStatement (); 48 String query1 ="insert into emp values("; 49 query1 += "00010,'이몽룡',85000.00,"; 50 query1 += "TO_DATE('1998/07/01','YYYY/MM/DD'),"; 51 query1 += "'영업부')"; 52 String query2 = "insert into emp values("; 53 query2 += "00011,'성춘향', 75000.00,"; 54 query2 += "TO_DATE('2000/07/01', 'YYYY/MM/DD'),"; 55 query2 += "'영업부')"; 56 String query3 = "insert into emp values("; 57 query3 += "00012,'변학도', 70000.00,"; 58 query3 += "TO_DATE('2001/07/01', 'YYYY/MM/DD'),"; 59 query3 += "'영업부')"; 60 int total = 0; 61 if(dbmd.supportsBatchUpdates()){ 62 stmt.addBatch(query1); 63 stmt.addBatch(query2); 64 stmt.addBatch(query3); 65 int [] rowcount = stmt.executeBatch(); 66 for(int i = 0; i < rowcount.length; i++){ 67 total += rowcount[i]; 68 } System.out.print 69 ("배치작업에 의해 " + total); 70 System.out.println 71 (" 개의 데이터가 삽입되었습니다."); 72 }else { 73 System.out.print 74 ("배치작업이 지원되지 않습니다."); 75 int count = stmt.executeUpdate(query1); 76 total += count; 77 if(count >= 1) { 78 count = stmt.executeUpdate(query2); 79 total += count; 80 if(count >= 1) { 81 count = stmt.executeUpdate(query3); 82 total += count; 83 } 84 } 85 System.out.println 86 (total + " 개의 데이터가 삽입되었습니다."); 87 } 88 stmt.close(); 89 }catch(SQLException e){ 90 e.printStackTrace(); 91 }finally { 92 try{ 93 if(stmt != null) stmt.close(); 94 }catch(SQLException e){} 95 } 96 } 97 } |
2. DatabaseMetaData 인터페이스 실습
l 연결한 데이터베이스의 종류와 버전에 따라서 서로 다른 종류의 JDBC 드라이버를 사용해야 한다.
l 특정 기능을 수행하는 메서드를 올바르게 사용하여, JDBC를 수행하였을 때의 결과가 예상했던 바와 다르다면, 연결한 데이터베이스와 JDBC 드라이버의 종류와 버전이 맞지 않을 가능성도 있을 수 있다.
l 이번 예제에서는 연결한 데이터베이스와 JDBC 드라이버의 종류와 버전이 맞는지를 확인해보는 예제
JDBCVersionTest.java
01 import java.sql.*; 02 03 class JDBCVersionTest{ 04 public static void main (String args []) 05 throws SQLException{ 06 DriverManager.registerDriver 07 (new oracle.jdbc.driver.OracleDriver()); 08 Connection conn = DriverManager.getConnection 09 ("jdbc:oracle:thin:@127.0.0.1:1521:ora9", 10 "jdbc00","jdbc00"); 11 DatabaseMetaData meta = conn.getMetaData (); 12 System.out.println("Database Product Name : " + 13 meta.getDatabaseProductName()); 14 System.out.println 15 ("\nDatabase Product Version : \n" + 16 meta.getDatabaseProductVersion()); 17 System.out.println 18 ("\nJDBC Driver Name : " + 19 meta.getDriverName()); 20 System.out.println 21 ("\nJDBC Driver Version : " + 22 meta.getDriverVersion()); 23 System.out.println 24 ("\nJDBC Driver Major Version : " + 25 meta.getDriverMajorVersion()); 26 System.out.println 27 ("\nJDBC Driver Minor Version : " + 28 meta.getDriverMinorVersion()); 29 } 30 } |