Ao usar JDBC para conectar-se ao banco de dados, usaremos executeQuery(String sql) para obter um conjunto de resultados. Quando a estrutura do banco de dados muda ou quando outros conjuntos de resultados da tabela do banco de dados são obtidos, precisamos percorrer novamente o conjunto de resultados ResultSet de acordo com diferentes estruturas de dados.
Como posso estabelecer uma conexão JDBC independente da estrutura do banco de dados? Podemos obter a estrutura da tabela usando o método ResultSetMetaData(). Em seguida, use o array Object[] para iterar no conjunto de resultados. Quando quisermos obter os resultados correspondentes, podemos usar o Iterator. Basta percorrer o iterador para obter o resultado.
Aqui está um método que escrevi:
1importar java.math.BigDecimal;
2importar java.sql.Connection;
3importar java.sql.DriverManager;
4importar java.sql.ResultSet;
5importar java.sql.ResultSetMetaData;
6importar java.sql.SQLException;
7importar java.sql.Statement;
8importar java.util.ArrayList;
9importar java.util.Iterator;
10importar java.util.List;
11
12classe pública novoJdbc {
13 string privada url = "jdbc:oracle:thin:@localhost:1521:nitpro";
14
15 string privada dbUserName = "scott";
16
17 string privada dbUserPassword = "tigre";
18
19 conexão privada conn = null;
20
21 instrução privada stmt = null;
vinte e dois
23 conjunto de resultados privado rs = nulo;
vinte e quatro
25 público novoJdbc() {
26 tente {
27 Class.forName("oracle.jdbc.driver.OracleDriver");
28} capturar (ClassNotFoundException e) {
29 e.printStackTrace();
30}
31}
32
33 Conexão pública getConnection() {
34 tente {
35 conexão = DriverManager.getConnection(url, dbUserName, dbUserPassword);
36 } catch (SQLException e) {
37 e.printStackTrace();
38}
39 conexão de retorno;
40}
41
42 public void close(ResultSet rs, Statement stmt, Connection conn) {
43 se (rs! = nulo) {
44 tente {
45 rs.close();
46 } catch (SQLException e) {
47 e.printStackTrace();
48}
49}
50 if (stmt! = nulo) {
51 tente {
52 stmt.close();
53 } catch (SQLException e) {
54 e.printStackTrace();
55}
56}
57 if (conn! = nulo) {
58 tente {
59 conexão.close();
60 } catch (SQLException e) {
61 e.printStackTrace();
62}
63}
64}
65
66 consulta de lista pública (String sql) {
67 Lista lista = new ArrayList();
68
69 conexão = this.getConnection();
70 tentativas {
71 stmt = conn.createStatement();
72rs = stmt.executeQuery(sql);
73 //Obtém a estrutura da tabela do banco de dados
74ResultSetMetaData rsm = rs.getMetaData();
75 //Obtém o número de colunas no banco de dados
76 int col = rsm.getColumnCount();
77 //Gera array de objetos com comprimento de col
78 Objeto[] obj = novo Objeto[col];
79 //Percorre o conjunto de resultados e armazena os resultados no array Object
80 enquanto (rs.next()) {
81 para (int i = 0; i < col; i++) {
82 obj[i] = rs.getObject(i + 1);
83}
84 lista.add(obj);
85}
86 } catch (SQLException e) {
87 e.printStackTrace();
88} finalmente {
89 this.close(rs, stmt, conn);
90}
91 lista de devolução;
92}
93
94 atualização pública void(String sql) {
95 tente {
96 conexão = 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 novoJdbc nj = novo novoJdbc();
106 String sql = "selecionar * dos usuários";
107 Lista lista = nj.query(sql);
108 //Retorna o iterador da lista
109 Iterador it = list.iterator();
110 //Percorre o iterador e obtém o resultado
111 enquanto (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