Cuando usemos JDBC para conectarnos a la base de datos, usaremos ejecutarQuery(String sql) para obtener un conjunto de resultados. Cuando cambia la estructura de la base de datos o cuando se obtienen otros conjuntos de resultados de la tabla de la base de datos, debemos volver a recorrer el conjunto de resultados del ResultSet de acuerdo con diferentes estructuras de datos.
¿Cómo puedo establecer una conexión JDBC que sea independiente de la estructura de la base de datos? Podemos obtener la estructura de la tabla usando el método ResultSetMetaData(). Luego use la matriz Object[] para iterar sobre el conjunto de resultados. Cuando queramos obtener los resultados correspondientes, podemos usar Iterator. Simplemente recorra el iterador para obtener el resultado.
Aquí hay un método que escribí:
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
12 clase pública nuevoJdbc {
13 URL de cadena privada = "jdbc:oracle:thin:@localhost:1521:nitpro";
14
15 cadena privada dbUserName = "scott";
16
17 cadena privada dbUserPassword = "tigre";
18
19 Conexión privada conn = nulo;
20
21 Declaración privada stmt = null;
Veintidós
23 conjunto de resultados privado rs = nulo;
veinticuatro
25 público nuevoJdbc() {
26 intentar {
27 Class.forName("oracle.jdbc.driver.OracleDriver");
28 } captura (ClassNotFoundException e) {
29 e.printStackTrace();
30}
31}
32
33 Conexión pública getConnection() {
34 prueba {
35 conexión = DriverManager.getConnection(url, dbUserName, dbUserPassword);
36 } captura (SQLException e) {
37 e.printStackTrace();
38 }
39 conexiones de retorno;
40}
41
42 cierre público vacío (ResultSet rs, declaración stmt, conexión de conexión) {
43 si (rs! = nulo) {
44 prueba {
45 rs.cerrar();
46 } captura (SQLException e) {
47 e.printStackTrace();
48 }
49 }
50 si (stmt! = nulo) {
51 prueba {
52 stmt.cerrar();
53 } captura (SQLException e) {
54 e.printStackTrace();
55 }
56 }
57 si (conexión! = nulo) {
58 prueba {
59 conexión.cerrar();
60 } captura (SQLException e) {
61 e.printStackTrace();
62 }
63}
64}
65
66 consulta de lista pública (cadena sql) {
67 Lista lista = nueva ArrayList();
68
69 conexión = this.getConnection();
70 intento {
71 stmt = conexión.createStatement();
72 rs = stmt.executeQuery(sql);
73 //Obtener la estructura de la tabla de la base de datos
74 ResultSetMetaData rsm = rs.getMetaData();
75 //Obtener el número de columnas de la base de datos
76 int col = rsm.getColumnCount();
77 //Generar matriz de objetos de longitud de columna
78 Objeto[] obj = nuevo Objeto[col];
79 //Recorre el conjunto de resultados y almacena los resultados en la matriz de objetos
80 mientras (rs.siguiente()) {
81 para (int i = 0; i < col; i++) {
82 obj[i] = rs.getObject(i + 1);
83}
84 lista.add(obj);
85}
86 } captura (SQLException e) {
87 e.printStackTrace();
88 } finalmente {
89 this.close(rs, stmt, conn);
90}
91 lista de devolución;
92 }
93
94 actualización pública nula (String sql) {
95 prueba {
96 conexión = this.getConnection();
97 stmt = conn.createStatement();
98 stmt.executeUpdate(sql);
99 } captura (SQLException e) {
100 e.printStackTrace();
101 }
102 }
103
104 público estático vacío principal (String args []) {
105 nuevoJdbc nj = nuevo nuevoJdbc();
106 String sql = "seleccionar * de los usuarios";
107 Lista lista = nj.query(sql);
108 //Devuelve el iterador de la lista
109 Iterador it = lista.iterador();
110 //Atraviesa el iterador y obtiene el resultado.
111 mientras (it.haSiguiente()) {
112 Objeto[] o = (Objeto[]) it.next();
113 int id = ((BigDecimal) o[0]).intValue();
114 Sistema.out.println(id);
115 }
116
117 }
118}
http://blog.csdn.net/xcl6996/archive/2007/06/22/1662633.aspx