JDBC を使用してデータベースに接続する場合、executeQuery(String sql) を使用して結果セットを取得します。データベース構造が変更された場合、または他のデータベース テーブルの結果セットが取得された場合、異なるデータ構造に従って ResultSet 結果セットを再トラバースする必要があります。
データベース構造に依存しない JDBC 接続を確立するにはどうすればよいですか?テーブル構造は、ResultSetMetaData() メソッドを使用して取得できます。次に、Object[] 配列を使用して結果セットを反復処理します。対応する結果を取得したい場合は、Iterator を使用できます。イテレータをトラバースするだけで結果が得られます。
私が書いたメソッドは次のとおりです。
1java.math.BigDecimalをインポートします。
2java.sql.Connectionをインポートします。
3java.sql.DriverManagerをインポートします。
4java.sql.ResultSetをインポートします。
5java.sql.ResultSetMetaDataをインポートします。
6インポートjava.sql.SQLException;
7インポートjava.sql.Statement;
8インポートjava.util.ArrayList;
9インポートjava.util.Iterator;
10java.util.Listをインポートします。
11
12パブリック クラス newJdbc {
13 private String url = "jdbc:oracle:thin:@localhost:1521:nitpro";
14
15 プライベート文字列 dbUserName = "スコット";
16
17 プライベート文字列 dbUserPassword = "タイガー";
18
19 プライベート接続 conn = null;
20
21 private ステートメント stmt = null;
22
23 プライベート ResultSet rs = null;
24
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 } キャッチ (SQLException e) {
37 e.printStackTrace();
38 }
39 リターンコン。
40}
41
42 public void close(ResultSet rs, Statement stmt, Connection conn) {
43 if (rs != null) {
44 試してください {
45 rs.close();
46 } キャッチ (SQLException e) {
47 e.printStackTrace();
48 }
49 }
50 if (stmt != null) {
51 試してください {
52 stmt.close();
53 } キャッチ (SQLException e) {
54 e.printStackTrace();
55 }
56 }
57 if (conn != null) {
58 試してください {
59 conn.close();
60 } キャッチ (SQLException e) {
61 e.printStackTrace();
62 }
63}
64}
65
66 パブリックリストクエリ(文字列SQL) {
67 リスト list = new ArrayList();
68
69 conn = this.getConnection();
70 試してください {
71 stmt = conn.createStatement();
72 rs = stmt.executeQuery(sql);
73 //データベーステーブル構造を取得する
74 結果セットメタデータ rsm = rs.getMetaData();
75 //データベース内の列数を取得する
76 intcol = rsm.getColumnCount();
77 //列長のオブジェクト配列を生成
78 オブジェクト[] obj = 新しいオブジェクト[col];
79 //結果セットを走査し、結果を Object 配列に格納します
80 while (rs.next()) {
81 for (int i = 0; i <col; i++) {
82 obj[i] = rs.getObject(i + 1);
83}
84 リスト.add(obj);
85}
86 } キャッチ (SQLException e) {
87 e.printStackTrace();
88 } 最後に {
89 this.close(rs, stmt, conn);
90}
91 リターンリスト。
92 }
93
94 パブリック void update(String sql) {
95 試してください {
96 conn = this.getConnection();
97 stmt = conn.createStatement();
98 stmt.executeUpdate(sql);
99 } キャッチ (SQLException e) {
100 e.printStackTrace();
101 }
102 }
103
104 public static void main(String args[]) {
105 newJdbc nj = 新しいnewJdbc();
106 文字列 sql = "ユーザーから * を選択";
107 リスト list = nj.query(sql);
108 //リストのイテレータを返す
109 イテレータ it = list.iterator();
110 //イテレータをトラバースして結果を取得する
111 while (it.hasNext()) {
112 オブジェクト[] o = (オブジェクト[]) 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