jdbc之代码重复使用_jsp技巧



在使用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
12public class newJdbc {
13    private String url = “jdbc:oracle:thin:@localhost:1521:nitpro”;
14
15    private String dbUserName = “scott”;
16
17    private String dbUserPassword = “tiger”;
18
19    private Connection conn = null;
20
21    private Statement stmt = null;
22
23    private ResultSet rs = null;
24
25    public newJdbc() {
26        try {
27            Class.forName(“oracle.jdbc.driver.OracleDriver”);
28        } catch (ClassNotFoundException e) {
29            e.printStackTrace();
30        }
31    }
32
33    public Connection getConnection() {
34        try {
35            conn = DriverManager.getConnection(url, dbUserName, dbUserPassword);
36        } catch (SQLException e) {
37            e.printStackTrace();
38        }
39        return conn;
40    }
41
42    public void close(ResultSet rs, Statement stmt, Connection conn) {
43        if (rs != null) {
44            try {
45                rs.close();
46            } catch (SQLException e) {
47                e.printStackTrace();
48            }
49        }
50        if (stmt != null) {
51            try {
52                stmt.close();
53            } catch (SQLException e) {
54                e.printStackTrace();
55            }
56        }
57        if (conn != null) {
58            try {
59                conn.close();
60            } catch (SQLException e) {
61                e.printStackTrace();
62            }
63        }
64    }
65
66    public List query(String sql) {
67        List list = new ArrayList();
68
69        conn = this.getConnection();
70        try {
71            stmt = conn.createStatement();
72            rs = stmt.executeQuery(sql);
73            //获取数据库表结构
74            ResultSetMetaData rsm = rs.getMetaData();
75            //取得数据库的列数
76            int col = rsm.getColumnCount();
77            //生成col长度的Object数组
78            Object[] obj = new Object[col];
79            //遍历结果集,将结果存入Object数组
80            while (rs.next()) {
81                for (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 {
89            this.close(rs, stmt, conn);
90        }
91        return list;
92    }
93
94    public void update(String sql) {
95        try {
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 = new newJdbc();
106        String sql = “select * from users”;
107        List list = nj.query(sql);
108        //返回list的迭代器
109        Iterator it = list.iterator();
110        //遍历迭代器,取出结果
111        while (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