Saat menggunakan JDBC untuk terhubung ke database, kita akan menggunakan mengeksekusiQuery(String sql) untuk mendapatkan kumpulan hasil. Ketika struktur database berubah atau ketika kumpulan hasil tabel database lain diperoleh, kita perlu menelusuri ulang kumpulan hasil ResultSet sesuai dengan struktur data yang berbeda.
Bagaimana cara membuat koneksi JDBC yang tidak bergantung pada struktur database? Kita bisa mendapatkan struktur tabel dengan menggunakan metode ResultSetMetaData(). Kemudian gunakan array Object[] untuk mengulangi kumpulan hasil. Jika kita ingin mendapatkan hasil yang sesuai, kita bisa menggunakan Iterator. Cukup lintasi iterator untuk mendapatkan hasilnya.
Berikut adalah metode yang saya tulis:
1impor java.math.BigDecimal;
2impor java.sql.Koneksi;
3impor java.sql.DriverManager;
4impor java.sql.ResultSet;
5impor java.sql.ResultSetMetaData;
6impor java.sql.SQLException;
7impor java.sql.Pernyataan;
8import java.util.ArrayList;
9import java.util.Iterator;
10impor java.util.List;
11
12kelas publik newJdbc {
13 String pribadi url = "jdbc:Oracle:thin:@localhost:1521:nitpro";
14
15 String pribadi dbUserName = "scott";
16
17 String pribadi dbUserPassword = "harimau";
18
19 sambungan Koneksi pribadi = null;
20
21 Pernyataan pribadi stmt = null;
dua puluh dua
23 ResultSet pribadi rs = null;
dua puluh empat
25 publik baruJdbc() {
26 mencoba {
27 Kelas.forName("Oracle.jdbc.driver.OracleDriver");
28 } tangkapan (ClassNotFoundException e) {
29 e.printStackTrace();
30}
31}
32
33 Koneksi publik getConnection() {
34 mencoba {
35 samb = DriverManager.getConnection(url, dbUserName, dbUserPassword);
36 } tangkapan (SQLException e) {
37 e.printStackTrace();
38 }
39 koneksi kembali;
40}
41
42 public void close(ResultSet rs, Statement stmt, Sambungan koneksi) {
43 jika (rs != nol) {
44 mencoba {
45 rs.tutup();
46 } menangkap (SQLException e) {
47 e.printStackTrace();
48 }
49 }
50 jika (stmt != null) {
51 mencoba {
52 stmt.tutup();
53 } tangkapan (SQLException e) {
54 e.printStackTrace();
55 }
56 }
57 jika (sambungan != null) {
58 coba {
59 samb.close();
60 } tangkapan (SQLException e) {
61 e.printStackTrace();
62 }
63}
64}
65
66 Kueri daftar publik (String sql) {
67 Daftar daftar = new ArrayList();
68
69 samb = ini.getConnection();
70 coba {
71 stmt = samb.createStatement();
72 rs = stmt.executeQuery(sql);
73 //Dapatkan struktur tabel database
74 ResultSetMetaData rsm = rs.getMetaData();
75 //Mendapatkan jumlah kolom dalam database
76 int kolom = rsm.getColumnCount();
77 //Hasilkan array Objek dengan panjang kolom
78 Objek[] obj = Objek baru[col];
79 //Melintasi kumpulan hasil dan menyimpan hasilnya dalam array Object
80 sementara (rs.next()) {
81 untuk (int i = 0; i < col; i++) {
82 objek[i] = rs.getObject(i + 1);
83}
84 daftar.tambahkan(obj);
85}
86 } tangkapan (SQLException e) {
87 e.printStackTrace();
88 } akhirnya {
89 this.close(rs, stmt, conn);
90}
91 daftar pengembalian;
92 }
93
94 pembaruan kekosongan publik (String sql) {
95 mencoba {
96 samb = ini.getConnection();
97 stmt = samb.createStatement();
98 stmt.executeUpdate(sql);
99 } tangkapan (SQLException e) {
100 e.printStackTrace();
101 }
102 }
103
104 public static void main(String args[]) {
105 Jdbc baru nj = Jdbc baru();
106 String sql = "pilih * dari pengguna";
107 Daftar daftar = nj.query(sql);
108 //Kembalikan iterator daftar
109 Iterator itu = daftar.iterator();
110 //Lintasi iterator dan dapatkan hasilnya
111 sementara (itu.hasNext()) {
112 Objek[] o = (Objek[]) it.next();
113 int id = ((Desimal Besar) o[0]).intValue();
114 Sistem.keluar.println(id);
115 }
116
117 }
118}
http://blog.csdn.net/xcl6996/archive/2007/06/22/1662633.aspx