JDBC之代码重复使用
在使用JDBC连接数据库的时,我们会采用executeQuery(Stringsql)获得一个结果集。当数据库结构变化或者获得其他数据库表结果集的时候我们需要将ResultSet结果集根据不同的数据结构重新遍历。
如何才能建立一个与数据库结构无关的JDBC连接呢?我们可以通过使用ResultSetMetaData()方法获得表结构。然后使用Object[]数组遍历结果集。当我们要取得相应的结果时,我们可以使用Iterator迭代器。只要遍历迭代器就可以取出结果。
下面是我写的一个方法:
1importjava.math.BigDecimal;
2importjava.sql.Connection;
3importjava.sql.DriverManager;
4importjava.sql.ResultSet;
5importjava.sql.ResultSetMetaData;
6importjava.sql.SQLException;
7importjava.sql.Statement;
8importjava.util.ArrayList;
9importjava.util.Iterator;
10importjava.util.List;
11
12publicclassnewJdbc{
13privateStringurl="jdbc:oracle:thin:@localhost:1521:nitpro";
14
15privateStringdbUserName="scott";
16
17privateStringdbUserPassword="tiger";
18
19privateConnectionconn=null;
20
21privateStatementstmt=null;
22
23privateResultSetrs=null;
24
25publicnewJdbc(){
26try{
27Class.forName("oracle.jdbc.driver.OracleDriver");
28}catch(ClassNotFoundExceptione){
29e.printStackTrace();
30}
31}
32
33publicConnectiongetConnection(){
34try{
35conn=DriverManager.getConnection(url,dbUserName,dbUserPassword);
36}catch(SQLExceptione){
37e.printStackTrace();
38}
39returnconn;
40}
41
42publicvoidclose(ResultSetrs,Statementstmt,Connectionconn){
43if(rs!=null){
44try{
45rs.close();
46}catch(SQLExceptione){
47e.printStackTrace();
48}
49}
50if(stmt!=null){
51try{
52stmt.close();
53}catch(SQLExceptione){
54e.printStackTrace();
55}
56}
57if(conn!=null){
58try{
59conn.close();
60}catch(SQLExceptione){
61e.printStackTrace();
62}
63}
64}
65
66publicListquery(Stringsql){
67Listlist=newArrayList();
68
69conn=this.getConnection();
70try{
71stmt=conn.createStatement();
72rs=stmt.executeQuery(sql);
73//获取数据库表结构
74ResultSetMetaDatarsm=rs.getMetaData();
75//取得数据库的列数
76intcol=rsm.getColumnCount();
77//生成col长度的Object数组
78Object[]obj=newObject[col];
79//遍历结果集,将结果存入Object数组
80while(rs.next()){
81for(inti=0;i<col;i++){
82obj[i]=rs.getObject(i+1);
83}
84list.add(obj);
85}
86}catch(SQLExceptione){
87e.printStackTrace();
88}finally{
89this.close(rs,stmt,conn);
90}
91returnlist;
92}
93
94publicvoidupdate(Stringsql){
95try{
96conn=this.getConnection();
97stmt=conn.createStatement();
98stmt.executeUpdate(sql);
99}catch(SQLExceptione){
100e.printStackTrace();
101}
102}
103
104publicstaticvoidmain(Stringargs[]){
105newJdbcnj=newnewJdbc();
106Stringsql="select*fromusers";
107Listlist=nj.query(sql);
108//返回list的迭代器
109Iteratorit=list.iterator();
110//遍历迭代器,取出结果
111while(it.hasNext()){
112Object[]o=(Object[])it.next();
113intid=((BigDecimal)o[0]).intValue();
114System.out.println(id);
115}
116
117}
118}