При использовании JDBC для подключения к базе данных мы будем использовать выполнениеQuery(String sql) для получения набора результатов. Когда структура базы данных изменяется или когда получены другие наборы результатов таблицы базы данных, нам необходимо повторно просмотреть набор результатов ResultSet в соответствии с различными структурами данных.
Как установить соединение JDBC, независимое от структуры базы данных? Мы можем получить структуру таблицы, используя метод ResultSetMetaData(). Затем используйте массив Object[] для перебора набора результатов. Когда мы хотим получить соответствующие результаты, мы можем использовать Iterator. Просто пройдите по итератору, чтобы получить результат.
Вот метод, который я написал:
1 импортировать java.math.BigDecimal;
2импортировать java.sql.Соединение;
3импортировать java.sql.DriverManager;
4импортировать java.sql.ResultSet;
5импортировать java.sql.ResultSetMetaData;
6импортировать java.sql.SQLException;
7импортировать java.sql.Statement;
8импортировать java.util.ArrayList;
9импортировать java.util.Iterator;
10импортировать java.util.List;
11
12публичный класс newJdbc {
13 Private String url = "jdbc:oracle:thin:@localhost:1521:nitpro";
14
15 частная строка dbUserName = «Скотт»;
16
17 частная строка dbUserPassword = "тигр";
18
19 частное соединение conn = ноль;
20
21 частное заявление stmt = null;
двадцать два
23 частный набор результатов rs = null;
двадцать четыре
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 } catch (SQLException e) {
37 e.printStackTrace();
38 }
39 обратный разъем;
40}
41
42 public void close(ResultSet rs, Statement stmt, Connection conn) {
43, если (rs != ноль) {
44 попытка {
45 рс.закрыть();
46 } улавливать (SQLException e) {
47 e.printStackTrace();
48 }
49 }
50, если (stmt != ноль) {
51 попытка {
52 стмт.закрыть();
53 } catch (SQLException e) {
54 e.printStackTrace();
55 }
56 }
57, если (conn != ноль) {
58 попробовать {
59 конн.закрыть();
60 } catch (SQLException e) {
61 e.printStackTrace();
62 }
63}
64}
65
66 запрос общедоступного списка (String sql) {
67 Список списков = новый ArrayList();
68
69 conn = this.getConnection();
70 попыток {
71 stmt = conn.createStatement();
72 rs = stmt.executeQuery(sql);
73 //Получаем структуру таблицы базы данных
74 ResultSetMetaData rsm = rs.getMetaData();
75 //Получаем количество столбцов в базе данных
76 int col = rsm.getColumnCount();
77 //Сгенерируем массив объектов длиной столбец
78 Объект[] obj = новый Объект[столбец];
79 //Обходим набор результатов и сохраняем результаты в массиве объектов
80 в то время как (rs.next()) {
81 for (int i = 0; i < col; i++) {
82 obj[i] = rs.getObject(i + 1);
83}
84 список.добавить(объект);
85}
86 } catch (SQLException e) {
87 e.printStackTrace();
88 } наконец {
89 this.close(rs, stmt, conn);
90}
91 список возврата;
92 }
93
94 публичное недействительное обновление (String sql) {
95 попытка {
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 = новый newJdbc();
106 String sql = "выбрать * из пользователей";
107 Список списка = nj.query(sql);
108 //Вернем итератор списка
109 Итератор it = list.iterator();
110 //Обходим итератор и получаем результат
111 в то время как (it.hasNext()) {
112 Объект[] o = (Объект[]) 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