| 论坛注册| 加入收藏 | 设为首页| RSS
Google
您当前的位置:首页 > Linux频道 > Linux开发区 > WEB开发

JDBC之代码重复使用

时间:2007-07-10 23:16:30  来源:Linux联盟收集整理  作者:

在使用JDBC连接数据库的时,我们会采用executeQuery(String sql)获得一个结果集。当数据库结构变化或者获得其他数据库表结果集的时候我们需要将ResultSet结果集根据不同的数据结构重新遍历。gZRLinux联盟
如何才能建立一个与数据库结构无关的JDBC连接呢?我们可以通过使用ResultSetMetaData()方法获得表结构。然后使用Object[]数组遍历结果集。当我们要取得相应的结果时,我们可以使用Iterator迭代器。只要遍历迭代器就可以取出结果。gZRLinux联盟
下面是我写的一个方法:gZRLinux联盟
gZRLinux联盟

  1import java.math.BigDecimal;gZRLinux联盟
  2import java.sql.Connection;gZRLinux联盟
  3import java.sql.DriverManager;gZRLinux联盟
  4import java.sql.ResultSet;gZRLinux联盟
  5import java.sql.ResultSetMetaData;gZRLinux联盟
  6import java.sql.SQLException;gZRLinux联盟
  7import java.sql.Statement;gZRLinux联盟
  8import java.util.ArrayList;gZRLinux联盟
  9import java.util.Iterator;gZRLinux联盟
 10import java.util.List;gZRLinux联盟
 11gZRLinux联盟
 12public class newJdbc {gZRLinux联盟
 13    private String url = "jdbc:oracle:thin:@localhost:1521:nitpro";gZRLinux联盟
 14gZRLinux联盟
 15    private String dbUserName = "scott";gZRLinux联盟
 16gZRLinux联盟
 17    private String dbUserPassword = "tiger";gZRLinux联盟
 18gZRLinux联盟
 19    private Connection conn = null;gZRLinux联盟
 20gZRLinux联盟
 21    private Statement stmt = null;gZRLinux联盟
 22gZRLinux联盟
 23    private ResultSet rs = null;gZRLinux联盟
 24gZRLinux联盟
 25    public newJdbc() {gZRLinux联盟
 26        try {gZRLinux联盟
 27            Class.forName("oracle.jdbc.driver.OracleDriver");gZRLinux联盟
 28        }
 catch (ClassNotFoundException e) {gZRLinux联盟
 29            e.printStackTrace();gZRLinux联盟
 30        }
gZRLinux联盟
 31    }
gZRLinux联盟
 32gZRLinux联盟
 33    public Connection getConnection() {gZRLinux联盟
 34        try {gZRLinux联盟
 35            conn = DriverManager.getConnection(url, dbUserName, dbUserPassword);gZRLinux联盟
 36        }
 catch (SQLException e) {gZRLinux联盟
 37            e.printStackTrace();gZRLinux联盟
 38        }
gZRLinux联盟
 39        return conn;gZRLinux联盟
 40    }
gZRLinux联盟
 41gZRLinux联盟
 42    public void close(ResultSet rs, Statement stmt, Connection conn) {gZRLinux联盟
 43        if (rs != null{gZRLinux联盟
 44            try {gZRLinux联盟
 45                rs.close();gZRLinux联盟
 46            }
 catch (SQLException e) {gZRLinux联盟
 47                e.printStackTrace();gZRLinux联盟
 48            }
gZRLinux联盟
 49        }
gZRLinux联盟
 50        if (stmt != null{gZRLinux联盟
 51            try {gZRLinux联盟
 52                stmt.close();gZRLinux联盟
 53            }
 catch (SQLException e) {gZRLinux联盟
 54                e.printStackTrace();gZRLinux联盟
 55            }
gZRLinux联盟
 56        }
gZRLinux联盟
 57        if (conn != null{gZRLinux联盟
 58            try {gZRLinux联盟
 59                conn.close();gZRLinux联盟
 60            }
 catch (SQLException e) {gZRLinux联盟
 61                e.printStackTrace();gZRLinux联盟
 62            }
gZRLinux联盟
 63        }
gZRLinux联盟
 64    }
gZRLinux联盟
 65gZRLinux联盟
 66    public List query(String sql) {gZRLinux联盟
 67        List list = new ArrayList();gZRLinux联盟
 68gZRLinux联盟
 69        conn = this.getConnection();gZRLinux联盟
 70        try {gZRLinux联盟
 71            stmt = conn.createStatement();gZRLinux联盟
 72            rs = stmt.executeQuery(sql);gZRLinux联盟
 73            //获取数据库表结构gZRLinux联盟
 74            ResultSetMetaData rsm = rs.getMetaData();gZRLinux联盟
 75            //取得数据库的列数gZRLinux联盟
 76            int col = rsm.getColumnCount();gZRLinux联盟
 77            //生成col长度的Object数组gZRLinux联盟
 78            Object[] obj = new Object[col];gZRLinux联盟
 79            //遍历结果集,将结果存入Object数组gZRLinux联盟
 80            while (rs.next()) {gZRLinux联盟
 81                for (int i = 0; i < col; i++{gZRLinux联盟
 82                    obj[i] = rs.getObject(i + 1);gZRLinux联盟
 83                }
gZRLinux联盟
 84                list.add(obj);gZRLinux联盟
 85            }
gZRLinux联盟
 86        }
 catch (SQLException e) {gZRLinux联盟
 87            e.printStackTrace();gZRLinux联盟
 88        }
 finally {gZRLinux联盟
 89            this.close(rs, stmt, conn);gZRLinux联盟
 90        }
gZRLinux联盟
 91        return list;gZRLinux联盟
 92    }
gZRLinux联盟
 93gZRLinux联盟
 94    public void update(String sql) {gZRLinux联盟
 95        try {gZRLinux联盟
 96            conn = this.getConnection();gZRLinux联盟
 97            stmt = conn.createStatement();gZRLinux联盟
 98            stmt.executeUpdate(sql);gZRLinux联盟
 99        }
 catch (SQLException e) {gZRLinux联盟
100            e.printStackTrace();gZRLinux联盟
101        }
gZRLinux联盟
102    }
gZRLinux联盟
103gZRLinux联盟
104    public static void main(String args[]) {gZRLinux联盟
105        newJdbc nj = new newJdbc();gZRLinux联盟
106        String sql = "select * from users";gZRLinux联盟
107        List list = nj.query(sql);gZRLinux联盟
108        //返回list的迭代器gZRLinux联盟
109        Iterator it = list.iterator();gZRLinux联盟
110        //遍历迭代器,取出结果gZRLinux联盟
111        while (it.hasNext()) {gZRLinux联盟
112            Object[] o = (Object[]) it.next();gZRLinux联盟
113            int id = ((BigDecimal) o[0]).intValue();gZRLinux联盟
114            System.out.println(id);gZRLinux联盟
115        }
gZRLinux联盟
116gZRLinux联盟
117    }
gZRLinux联盟
118}
gZRLinux联盟
来顶一下
近回首页
返回首页
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表
相关文章
栏目更新
栏目热门