JDBC ResultSetMetaData 인터페이스 실습
ResultSetMetaData 인터페이스 실습
l 특정 테이블을 명령행 매개변수로 입력받아 조회하면서 입력된 테이블 이름과 테이블에 포함된 컬럼수에 따라서 각 컬럼의 데이터 타입, 컬럼의 최대 길이, 컬럼의 null 여부등을 제공받아서 동적으로 테이블에 따른 컬럼의 정보를 출력하는 예제
ColumnInformation.java
01 import java.sql.*; 02 03 public class ColumnInformation { 04 05 Connection con = null; 06 PreparedStatement ptmt = null; 07 ResultSet rs = null; 08 09 public static void main (String args []) { 10 if(args.length < 1){ 11 System.out.println 12 ("컬럼 정보를 조회할 테이블이름을\n" 13 + " 명령행 매개변수로 입력하세요."); 14 return; 15 } 16 ColumnInformation infor = new ColumnInformation(); 17 infor.connect(); 18 infor.getColumnInformation(args[0]); 19 infor.close(); 20 } 21 22 void connect(){ 23 try{ 24 Class.forName("oracle.jdbc.driver.OracleDriver"); 25 con = DriverManager.getConnection 26 ("jdbc:oracle:thin:@127.0.0.1:1521:ora9", 27 "jdbc00","jdbc00"); 28 System.out.println("데이터베이스 연결되었습니다."); 29 }catch(ClassNotFoundException e){ 30 System.out.println("JDBC Driver load fail!!!"); 31 }catch(SQLException e){ 32 System.out.println("Connection fail!!!"); 33 e.printStackTrace(); 34 } 35 } 36 37 void close(){ 38 try{ 39 con.close(); 40 System.out.println("데이터베이스 연결 해제되었습니다."); 41 }catch(SQLException e){ 42 System.out.println("Connection close fail"); 43 e.printStackTrace(); 44 }finally{ 45 try{ 46 if(rs != null) rs.close(); 47 if(ptmt != null) ptmt.close(); 48 if(con != null) con.close(); 49 }catch(SQLException e){} 50 } 51 } 52 53 void getColumnInformation(String tableName){ 54 try{ 55 String query = 56 "select * from " + tableName ; 57 ptmt = con.prepareStatement (query); 58 rs = ptmt.executeQuery(); 59 ResultSetMetaData meta = rs.getMetaData(); 60 System.out.println 61 (" 테이블의 컬럼 정보 조회 결과는 " 62 + "다음과 같습니다.\n"); 63 int count = meta.getColumnCount(); 64 String s ; 65 for (int i = 1; i <= count; i++) { 66 s = meta.getColumnName(i)+ "\t" 67 + meta.getColumnTypeName(i)+"\t" 68 + meta.getColumnDisplaySize(i)+"\t"; 69 switch(meta.isNullable(i)){ 70 case 0 : 71 s = s + "\t not null" ; 72 break; 73 case 1 : 74 s = s + "\t null " ; 75 break; 76 case 2 : 77 s = s + "\t 알수없음" ; 78 break; 79 } 80 System.out.println(s); 81 s = null; 82 } 83 ptmt.close(); 84 }catch(Exception e){ 85 e.printStackTrace(); 86 } 87 } 88 } |
l 특정 테이블의 컬럼 개수와 컬럼의 데이터 타입 정보를 미리 알아보고 특정 테이블에 포함된 모든 데이터를 조회하는 예제를 작성
l 테이블 이름이 달라지더라도 달라진 테이블에 따라 해당 테이블이 가진 컬럼의 개수와 컬럼의 데이터 타입에 따라 데이터를 읽어오도록 한다.
DynamicTableSelect.java
01 import java.sql.*; 02 03 public class DynamicTableSelect { 04 05 Connection con = null; 06 PreparedStatement ptmt = null; 07 ResultSet rs = null; 08 09 public static void main (String args []) { 10 if(args.length < 1){ 11 System.out.println 12 ("데이터를 조회할 테이블이름을\n" 13 + " 명령행 매개변수로 입력하세요."); 14 return; 15 } 16 DynamicTableSelect dts = new DynamicTableSelect(); 17 dts.connect(); 18 dts.getTable(args[0]); 19 dts.close(); 20 } 21 22 void connect(){ 23 try{ 24 Class.forName("oracle.jdbc.driver.OracleDriver"); 25 con = DriverManager.getConnection 26 ("jdbc:oracle:thin:@127.0.0.1:1521:ora9", 27 "jdbc00","jdbc00"); 28 System.out.println("데이터베이스 연결되었습니다."); 29 }catch(ClassNotFoundException e){ 30 System.out.println("JDBC Driver load fail!!!"); 31 }catch(SQLException e){ 32 System.out.println("Connection fail!!!"); 33 e.printStackTrace(); 34 } 35 } 36 37 void close(){ 38 try{ 39 con.close(); 40 System.out.println("데이터베이스 연결 해제되었습니다."); 41 }catch(SQLException e){ 42 System.out.println("Connection close fail"); 43 e.printStackTrace(); 44 }finally{ 45 try{ 46 if(rs != null) rs.close(); 47 if(ptmt != null) ptmt.close(); 48 if(con != null) con.close(); 49 }catch(SQLException e){} 50 } 51 } 52 53 void getTable(String tableName){ 54 try{ 55 String query = 56 "select * from " + tableName ; 57 ptmt = con.prepareStatement (query); 58 rs = ptmt.executeQuery(); 59 ResultSetMetaData meta = rs.getMetaData(); 60 System.out.println (tableName 61 + " 테이블 조회 결과는 다음과 같습니다.\n"); 62 int count = meta.getColumnCount(); 63 while(rs.next()){ 64 for (int i = 1; i <= count; i++) { 65 switch(meta.getColumnType(i)){ 66 case Types.NUMERIC : 67 System.out.print 68 (rs.getLong(i) + "\t"); 69 break; 70 case Types.CHAR : 71 case Types.VARCHAR : 72 System.out.print 73 (rs.getString(i) + "\t"); 74 break; 75 case Types.DATE : 76 case Types.TIMESTAMP : 77 System.out.print 78 (rs.getDate(i) + "\t"); 79 break; 80 } 81 } 82 System.out.println(); 83 } 84 ptmt.close(); 85 }catch(Exception e){ 86 e.printStackTrace(); 87 } 88 } 89 } |