JDBC之代码重复使用

  • 来源: 互联网 作者: rocket   2008-03-17/11:55
  • 在使用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


    评论 {{userinfo.comments}}

    {{money}}

    {{question.question}}

    A {{question.A}}
    B {{question.B}}
    C {{question.C}}
    D {{question.D}}
    提交

    驱动号 更多