如何透过JDBC到MySQL资料库取得PreparedStatement的ResultSet的结果集,并且将每一笔结果集记录逐一的转存为List型态的资料集合,我们提供一个DBHelper类别的getDataModel的方法,它主要的作用就是要把ResultSet转换为TreeMap,最后再把它一一的存到List集合里面。
获取Data Model的方法 (DBHelper.getDataModel)
将从资料库获取来的PreparedStatement物件导引至getDataModel函式,然后经由函式内部的逻辑处理之后,返回放置TreeMap型态的List集合物件
package jcode.test.db;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.TreeMap;public class DBHelper {
public DBHelper(){ }public static List<TreeMap> getDataModel(PreparedStatement ps)
throws SQLException {
List rst = new ArrayList();
try {
ResultSet rs = ps.executeQuery();
while(rs.next()){
ResultSetMetaData rsmd = rs.getMetaData();
TreeMap map = processResultSet(rsmd, rs);
rst.add(map);
}} catch (SQLException se) {
rst = null;
throw se;
}
return rst;
}private static TreeMap processResultSet(ResultSetMetaData rsmd,
ResultSet rs) throws SQLException {
TreeMap tmp = new TreeMap();
try {
for (int i = 1; i <= rsmd.getColumnCount(); i++) {
String columnName = rsmd.getColumnName(i).toUpperCase();
if (rsmd.getColumnType(i) == 1 ||
rsmd.getColumnType(i) == 12) {
if (rs.getString(i) == null) {
tmp.put(columnName, "");
} else {
tmp.put(columnName, rs.getString(i));
}
} else if (rsmd.getColumnType(i) == 93
|| rsmd.getColumnType(i) == java.sql.Types.DATE) {
tmp.put(columnName, rs.getTimestamp(i));
} else if (rsmd.getColumnType(i) == java.sql.Types.CLOB) {
if (rs.getClob(i) != null) {
tmp.put(columnName,rs.getClob(i).getSubString(1,
(int) rs.getClob(i).length()));
} else {
tmp.put(columnName, "");
}
} else {
tmp.put(columnName, rs.getBigDecimal(i));
}
}} catch (SQLException sex) {
tmp = null;
throw sex;
}
return tmp;
}}
DBTest测试代码
以JDBC连结到MySQL的test schema
输入查询SQL "select * from test.user_info",返回 PreparedStatement型态的ps物件
把ps物件引入到DBHelper.getDataModel方法中,回传List
最后产出"总记录数: XXX"的信息到画面上
package jcode.test.db;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.List;
import java.util.TreeMap;public class DBTest {
/**
* @param args
*/
public static void main(String[] args) {
Connection con = null;
try{
Class.forName("com.mysql.jdbc.Driver");
con = DriverManager.getConnection("jdbc:mysql://localhost/test?useUnicode=true&characterEncoding=Big5");
String sql = "select * from test.user_info;";
PreparedStatement ps = con.prepareStatement(sql);
List<TreeMap> list = DBHelper.getDataModel(ps);
if(list != null){
System.out.println("總筆數: "+list.size());
}
}catch(ClassNotFoundException cfe){
cfe.printStackTrace();
}catch(SQLException se){
se.printStackTrace();
}finally{
try{
if(con != null) con.close();
}catch(SQLException ignore){ }
}
}}
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
