JDBC를 사용하여 데이터베이스에 연결할 때, 우리는 결과 집합을 얻기 위해 ExecutionQuery(String sql)를 사용합니다. 데이터베이스 구조가 변경되거나 다른 데이터베이스 테이블 결과 집합을 얻은 경우 다른 데이터 구조에 따라 ResultSet 결과 집합을 다시 탐색해야 합니다.
데이터베이스 구조와 독립적인 JDBC 연결을 어떻게 설정할 수 있습니까? ResultSetMetaData() 메서드를 사용하여 테이블 구조를 가져올 수 있습니다. 그런 다음 Object[] 배열을 사용하여 결과 집합을 반복합니다. 해당 결과를 얻으려면 Iterator를 사용할 수 있습니다. 결과를 얻으려면 반복자를 순회하면 됩니다.
내가 작성한 방법은 다음과 같습니다.
1java.math.BigDecimal 가져오기;
2java.sql.Connection 가져오기;
3가져오기 java.sql.DriverManager;
4가져오기 java.sql.ResultSet;
5java.sql.ResultSetMetaData 가져오기;
6가져오기 java.sql.SQLException;
7가져오기 java.sql.Statement;
8가져오기 java.util.ArrayList;
9가져오기 java.util.Iterator;
10가져오기 java.util.List;
11
12공개 클래스 newJdbc {
13 개인 문자열 url = "jdbc:oracle:thin:@localhost:1521:nitpro";
14
15 개인 문자열 dbUserName = "scott";
16
17 개인 문자열 dbUserPassword = "호랑이";
18
19 개인 연결 conn = null;
20
21 개인 성명 stmt = null;
스물 둘
23 개인 결과 집합 rs = null;
스물넷
25 공개 newJdbc() {
26 시도 {
27 Class.forName("oracle.jdbc.driver.OracleDriver");
28 } catch (ClassNotFoundException e) {
29 e.printStackTrace();
30}
31}
32
33 공개 연결 getConnection() {
34 시도 {
35 conn = DriverManager.getConnection(url, dbUserName, dbUserPassword);
36 } catch (SQLException e) {
37 e.printStackTrace();
38 }
39 반환 연결;
40}
41
42 public void close(ResultSet rs, 명령문 stmt, 연결 연결) {
43 if (rs != null) {
44 시도 {
45 RS.닫기();
46 } catch (SQLException e) {
47 e.printStackTrace();
48 }
49 }
50 if (stmt != null) {
51 시도 {
52 stmt.close();
53 } catch (SQLException e) {
54 e.printStackTrace();
55 }
56 }
57 if (conn != null) {
58 시도하다
59 연결.닫기();
60 } 잡기(SQLException e) {
61 e.printStackTrace();
62 }
63}
64}
65
66 공개 목록 쿼리(String sql) {
67 목록 목록 = new ArrayList();
68
69 conn = this.getConnection();
70 시도 {
71 stmt = conn.createStatement();
72 rs = stmt.executeQuery(sql);
73 //데이터베이스 테이블 구조 가져오기
74 ResultSetMetaData rsm = rs.getMetaData();
75 //데이터베이스의 열 수를 가져옵니다.
76 int col = rsm.getColumnCount();
77 //열 길이의 객체 배열 생성
78 객체[] obj = 새 객체[col];
79 //결과 세트를 탐색하고 결과를 객체 배열에 저장합니다.
80 while(rs.next()) {
81 for (int i = 0; i < col; i++) {
82 obj[i] = rs.getObject(i + 1);
83}
84 목록.추가(obj);
85}
86 } catch (SQLException e) {
87 e.printStackTrace();
88 } 마침내 {
89 this.close(rs, stmt, conn);
90}
91 반환 목록;
92 }
93
94 공개 무효 업데이트(문자열 SQL) {
95 시도 {
96화 = this.getConnection();
97 stmt = conn.createStatement();
98 stmt.executeUpdate(sql);
99 } catch (SQLException e) {
100 e.printStackTrace();
101 }
102 }
103
104 공개 정적 무효 메인(문자열 인수[]) {
105 newJdbc nj = 새로운 newJdbc();
106 문자열 sql = "사용자에서 * 선택";
107 목록 목록 = nj.query(sql);
108 //목록의 반복자를 반환합니다.
109 반복자 it = list.iterator();
110 //반복자를 순회하여 결과를 얻습니다.
111 while (it.hasNext()) {
112 Object[] o = (Object[]) it.next();
113 int id = ((BigDecimal) o[0]).intValue();
114 시스템.out.println(id);
115 }
116
117 }
118}
http://blog.csdn.net/xcl6996/archive/2007/06/22/1662633.aspx