技术开发 频道

JDBC之代码重复使用



【IT168 技术文档】

   
在使用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}
0
相关文章