在使用JDBC连接数据库的时,我们会采用executeQuery(String sql)获得一个结果集。当数据库结构变化或者获得其他数据库表结果集的时候我们需要将ResultSet结果集根据不同的数据结构重新遍历。gZRLinux联盟 如何才能建立一个与数据库结构无关的JDBC连接呢?我们可以通过使用ResultSetMetaData()方法获得表结构。然后使用Object[]数组遍历结果集。当我们要取得相应的结果时,我们可以使用Iterator迭代器。只要遍历迭代器就可以取出结果。gZRLinux联盟 下面是我写的一个方法:gZRLinux联盟 gZRLinux联盟 1 import java.math.BigDecimal;gZRLinux联盟 2 import java.sql.Connection;gZRLinux联盟 3 import java.sql.DriverManager;gZRLinux联盟 4 import java.sql.ResultSet;gZRLinux联盟 5 import java.sql.ResultSetMetaData;gZRLinux联盟 6 import java.sql.SQLException;gZRLinux联盟 7 import java.sql.Statement;gZRLinux联盟 8 import java.util.ArrayList;gZRLinux联盟 9 import java.util.Iterator;gZRLinux联盟 10 import java.util.List;gZRLinux联盟 11 gZRLinux联盟 12 public class newJdbc  {gZRLinux联盟 13 private String url = "jdbc:oracle:thin:@localhost:1521:nitpro";gZRLinux联盟 14 gZRLinux联盟 15 private String dbUserName = "scott";gZRLinux联盟 16 gZRLinux联盟 17 private String dbUserPassword = "tiger";gZRLinux联盟 18 gZRLinux联盟 19 private Connection conn = null;gZRLinux联盟 20 gZRLinux联盟 21 private Statement stmt = null;gZRLinux联盟 22 gZRLinux联盟 23 private ResultSet rs = null;gZRLinux联盟 24 gZRLinux联盟 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联盟 32 gZRLinux联盟 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联盟 41 gZRLinux联盟 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联盟 65 gZRLinux联盟 66 public List query(String sql)  {gZRLinux联盟 67 List list = new ArrayList();gZRLinux联盟 68 gZRLinux联盟 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联盟 93 gZRLinux联盟 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联盟 103 gZRLinux联盟 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联盟 116 gZRLinux联盟 117 }gZRLinux联盟 118 }gZRLinux联盟
|