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

public
class
newJdbc
{
private String url = "jdbc:oracle:thin:@localhost:1521:nitpro";

private String dbUserName = "scott";

private String dbUserPassword = "tiger";

private Connection conn = null;

private Statement stmt = null;

private ResultSet rs = null;

public newJdbc() {
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}

public Connection getConnection() {
try {
conn = DriverManager.getConnection(url, dbUserName, dbUserPassword);
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}

public void close(ResultSet rs, Statement stmt, Connection conn) {
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (stmt != null) {
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}

public List query(String sql) {
List list = new ArrayList();

conn = this.getConnection();
try {
stmt = conn.createStatement();
rs = stmt.executeQuery(sql);
//获取数据库表结构
ResultSetMetaData rsm = rs.getMetaData();
//取得数据库的列数
int col = rsm.getColumnCount();
//生成col长度的Object数组
Object[] obj = new Object[col];
//遍历结果集,将结果存入Object数组
while (rs.next()) {
for (int i = 0; i < col; i++) {
obj[i] = rs.getObject(i + 1);
}
list.add(obj);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
this.close(rs, stmt, conn);
}
return list;
}

public void update(String sql) {
try {
conn = this.getConnection();
stmt = conn.createStatement();
stmt.executeUpdate(sql);
} catch (SQLException e) {
e.printStackTrace();
}
}

public static void main(String args[]) {
newJdbc nj = new newJdbc();
String sql = "select * from users";
List list = nj.query(sql);
//返回list的迭代器
Iterator it = list.iterator();
//遍历迭代器,取出结果
while (it.hasNext()) {
Object[] o = (Object[]) it.next();
int id = ((BigDecimal) o[0]).intValue();
System.out.println(id);
}

}
}
如何才能建立一个与数据库结构无关的JDBC连接呢?我们可以通过使用ResultSetMetaData()方法获得表结构。然后使用Object[]数组遍历结果集。当我们要取得相应的结果时,我们可以使用Iterator迭代器。只要遍历迭代器就可以取出结果。
下面是我写的一个方法:






















































































































