2008. 7. 26. 17:32

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        }