posts - 57, comments - 4, trackbacks - 0, articles - 10
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

ResultSetMetaData方法获得表结构

Posted on 2009-06-17 11:20 hanwei 阅读(748) 评论(0)  编辑  收藏 所属分类: Oracle
  在使用JDBC连接数据库的时,我们会采用executeQuery(String sql)获得一个结果集。当数据库结构变化或者获得其他数据库表结果集的时候我们需要将ResultSet结果集根据不同的数据结构重新遍历。
如何才能建立一个与数据库结构无关的JDBC连接呢?我们可以通过使用ResultSetMetaData()方法获得表结构。然后使用Object[]数组遍历结果集。当我们要取得相应的结果时,我们可以使用Iterator迭代器。只要遍历迭代器就可以取出结果。
下面是我写的一个方法:
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
publicclass newJdbc {
13private String url ="jdbc:oracle:thin:@localhost: 310-301 :nitpro"
;
14

15private String dbUserName ="scott";
16

17private String dbUserPassword ="tiger";
18

19private Connection conn =null;
20

21private Statement stmt =null;
22

23private ResultSet rs =null;
24

25public newJdbc() {
26try
{
27 Class.forName("oracle.jdbc.driver.OracleDriver"
);
28 } catch
(ClassNotFoundException e) {
29
e.printStackTrace();
30
}
31
}
32

33public Connection getConnection() {
34try
{
35 conn =
DriverManager.getConnection(url, dbUserName, dbUserPassword);
36 } catch
(SQLException e) {
37
e.printStackTrace();
38
}
39return
conn;
40
}
41

42publicvoid close(ResultSet rs, Statement stmt, Connection conn) {
43if (rs !=null
) {
44try
{
45
rs.close();
46 } catch
(SQLException e) {
47
e.printStackTrace();
48
}
49
}
50if (stmt !=null
) {
51try
{
52
stmt.close();
53 } catch
(SQLException e) {
54
e.printStackTrace();
55
}
56
}
57if (conn !=null
) {
58try
{
59
conn.close();
60 } catch
(SQLException e) {
61
e.printStackTrace();
62
}
63
}
64
}
65

66public List query(String sql) {
67 List list =new
ArrayList();
68

69 conn =this.getConnection();
70try
{
71 stmt =
conn.createStatement();
72 rs =
stmt.executeQuery(sql);
73//获取数据库表结构

74 ResultSetMetaData rsm = rs.getMetaData();
75//取得数据库的列数

76int col = rsm.getColumnCount();
77//生成col长度的Object数组

78 Object[] obj =new Object[col];
79//遍历结果集,将结果存入Object数组

80while (rs.next()) {
81for (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 } finally
{
89this
.close(rs, stmt, conn);
90
}
91return
list;
92
}
93

94publicvoid update(String sql) {
95try
{
96 conn =this
.getConnection();
97 stmt =
conn.createStatement();
98
stmt.executeUpdate(sql);
99 } catch
(SQLException e) {
100
e.printStackTrace();
101
}
102
}
103

104publicstaticvoid main(String args[]) {
105 newJdbc nj =new
newJdbc();
106 String sql ="select * from users"
;
107 List list =
nj.query(sql);
108//返回list的迭代器

109 Iterator it = list.iterator();
110//遍历迭代器,取出结果 1z0-147

111while (it.hasNext()) {
112 Object[] o =
(Object[]) it.next();
113int id = ((BigDecimal) o[0
]).intValue();
114 System.out
.println(id);
115
}
116

117 }
118}


只有注册用户登录后才能发表评论。


网站导航:
博客园   IT新闻   Chat2DB   C++博客   博问