快速业务通道

JDBC的代码重用 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-18

JDBC的代码重用

时间:2011-02-27

在使用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: 310-301 :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    //遍历迭代器,取出结果 1z0-147 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://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号