欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

JDBC之代码重复使用

程序员文章站 2022-06-22 13:47:14
在使用jdbc连接的时,我们会采用executequery(string sql)获得一个结果集。当数据库结构变化或者获得其他数据库表结果集的时候我们需要将resultset结果集...

在使用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.oracle(大型网站数据库平台)driver");
 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         &nbs