Wenn wir JDBC zum Herstellen einer Verbindung zur Datenbank verwenden, verwenden wir „executeQuery(String sql)“, um eine Ergebnismenge abzurufen. Wenn sich die Datenbankstruktur ändert oder wenn andere Datenbanktabellen-Ergebnismengen abgerufen werden, müssen wir die ResultSet-Ergebnismenge entsprechend unterschiedlicher Datenstrukturen erneut durchlaufen.
Wie kann ich eine JDBC-Verbindung herstellen, die unabhängig von der Datenbankstruktur ist? Wir können die Tabellenstruktur mithilfe der Methode ResultSetMetaData() ermitteln. Verwenden Sie dann das Array Object[], um die Ergebnismenge zu durchlaufen. Wenn wir die entsprechenden Ergebnisse erhalten möchten, können wir Iterator verwenden. Durchlaufen Sie einfach den Iterator, um das Ergebnis zu erhalten.
Hier ist eine Methode, die ich geschrieben habe:
1import java.math.BigDecimal;
2import java.sql.Connection;
3import java.sql.DriverManager;
4import java.sql.ResultSet;
5import java.sql.ResultSetMetaData;
6import java.sql.SQLException;
7import java.sql.Statement;
8import java.util.ArrayList;
9import java.util.Iterator;
10import java.util.List;
11
12öffentliche Klasse newJdbc {
13 private String url = "jdbc:oracle:thin:@localhost:1521:nitpro";
14
15 privater String dbUserName = "scott";
16
17 privater String dbUserPassword = "tiger";
18
19 private Verbindung conn = null;
20
21 private Anweisung stmt = null;
zweiundzwanzig
23 privates ResultSet rs = null;
vierundzwanzig
25 public newJdbc() {
26 versuchen {
27 Class.forName("oracle.jdbc.driver.OracleDriver");
28 } Catch (ClassNotFoundException e) {
29 e.printStackTrace();
30}
31}
32
33 öffentliche Verbindung getConnection() {
34 versuchen {
35 conn = DriverManager.getConnection(url, dbUserName, dbUserPassword);
36 } Catch (SQLException e) {
37 e.printStackTrace();
38 }
39 Rücklaufanschluss;
40}
41
42 public void close(ResultSet rs, Statement stmt, Connection conn) {
43 if (rs != null) {
44 versuchen {
45 rs.close();
46 } catch (SQLException e) {
47 e.printStackTrace();
48 }
49 }
50 if (stmt != null) {
51 versuchen {
52 stmt.close();
53 } Catch (SQLException e) {
54 e.printStackTrace();
55 }
56 }
57 if (conn != null) {
58 versuchen {
59 conn.close();
60 } Catch (SQLException e) {
61 e.printStackTrace();
62 }
63}
64}
65
66 öffentliche Listenabfrage (String sql) {
67 Liste list = new ArrayList();
68
69 conn = this.getConnection();
70 versuchen {
71 stmt = conn.createStatement();
72 rs = stmt.executeQuery(sql);
73 //Holen Sie sich die Struktur der Datenbanktabelle
74 ResultSetMetaData rsm = rs.getMetaData();
75 //Ermitteln Sie die Anzahl der Spalten in der Datenbank
76 int col = rsm.getColumnCount();
77 //Objektarray mit Spaltenlänge generieren
78 Object[] obj = new Object[col];
79 // Durchlaufen Sie die Ergebnismenge und speichern Sie die Ergebnisse im Objektarray
80 while (rs.next()) {
81 for (int i = 0; i < col; i++) {
82 obj[i] = rs.getObject(i + 1);
83}
84 list.add(obj);
85}
86 } Catch (SQLException e) {
87 e.printStackTrace();
88 } endlich {
89 this.close(rs, stmt, conn);
90}
91 Rückgabeliste;
92 }
93
94 public void update(String sql) {
95 versuchen {
96 conn = this.getConnection();
97 stmt = conn.createStatement();
98 stmt.executeUpdate(sql);
99 } Catch (SQLException e) {
100 e.printStackTrace();
101 }
102 }
103
104 public static void main(String args[]) {
105 newJdbc nj = new newJdbc();
106 String sql = "select * from users";
107 Liste list = nj.query(sql);
108 //Gib den Iterator der Liste zurück
109 Iterator it = list.iterator();
110 //Durchlaufe den Iterator und erhalte das Ergebnis
111 while (it.hasNext()) {
112 Object[] o = (Object[]) it.next();
113 int id = ((BigDecimal) o[0]).intValue();
114 System.out.println(id);
115 }
116
117 }
118}
http://blog.csdn.net/xcl6996/archive/2007/06/22/1662633.aspx