MySQL批量查询能返回集合吗_JDBC——查询多条记录,返回对应的对象的集合;查询一条记录,返回对应的对象...
//查詢多條記錄,返回對應的對象的集合?public List getForList(Class clazz, String sql, Object...args){
List list = new ArrayList();
Connection connection = null;
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
try {
//1.得到結果集???connection = JDBCTools.GetConnection();
preparedStatement = connection.prepareStatement(sql);
for(int i = 0; i < args.length; i++){
preparedStatement.setObject(i + 1, args[i]);
}
resultSet = preparedStatement.executeQuery();
//2.處理結果集,得到 Map 的List,其中 一個 Map對象 就是一條記錄
//Map 的 key 為 resultSet 中 列的別名, Map的 value 為列的值???List> values = handleResultSettoMapList(resultSet);
//3.把 Map的List 轉為 clazz 對應的 List
//其中 Map 的key 即為 clazz 對應的對象的 propertyName
//而 Map 的 value 即為 clazz 對應的對象的 propertyValue。???list = transferMapListToBeanList(clazz, values);
} catch (Exception e) {
e.printStackTrace();
}finally{
JDBCTools.release(resultSet, preparedStatement, connection);
}
return list;
}
/**
* 處理結果集,得到 Map的一個List,其中 一個 Map對象對應一條記錄
*@paramresultSet
*@return
*@throwsSQLException
*/?private List> handleResultSettoMapList(
ResultSet resultSet) throws SQLException {
//5.準備一個 List>:
//鍵:存放列的別名, 值:存放列的值。其中一個Map 對象對應著一條記錄??List> values =
new ArrayList>();
ResultSetMetaData rsmd = resultSet.getMetaData();
Map map = null;
//7.處理 ResultSet, 使用 while 循環??while(resultSet.next()){
map = new HashMap();
for(int i = 0; i < rsmd.getColumnCount(); i ++){
String columLabel = rsmd.getColumnLabel(i + 1);
Object value = resultSet.getObject(i + 1);
map.put(columLabel, value);
}
//11.把一條記錄的一個 Map 對象放入 5 準備的List中???values.add(map);
}
return values;
}
private List transferMapListToBeanList(Class clazz,
List> values) throws InstantiationException,
IllegalAccessException, InvocationTargetException {
//12. 判斷 List 是否為空集合,若不為空
//則遍歷List,得到一個一個的Map對象,再把一個 Map對象轉換為一個 Class參數對應的 Object對象??List result = new ArrayList();
T bean = null;
if(values.size() > 0){
for(Map m:values){
bean = clazz.newInstance();
for(Map.Entry entry:m.entrySet()){
String propertyName = entry.getKey();
Object value = entry.getValue();
BeanUtils.setProperty(bean, propertyName, value);
}
//13. 把 Object 對象放入到 list 中????result.add(bean);
}
}
return result;
}
//查詢一條記錄,返回對應的對象?public T get(Class clazz, String sql, Object...args){
List results = getForList(clazz, sql, args);
if(results.size() > 0){
return results.get(0);
}
return null;
}
//返回某條記錄的某一個字段的值 或一個統計的值(一共有多少條記錄等)?public E getForValue(String sql, Object...args){
//1.得到結果集:該結果集應該只有一行,且只有一列??Connection connection = null;
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
try {
//1.得到結果集???connection = JDBCTools.GetConnection();
preparedStatement = connection.prepareStatement(sql);
for(int i = 0; i < args.length; i++){
preparedStatement.setObject(i + 1, args[i]);
}
resultSet = preparedStatement.executeQuery();
//2.取得結果集???if(resultSet.next()){
return (E) resultSet.getObject(1);
}
} catch(Exception e){
e.printStackTrace();
} finally{
JDBCTools.release(resultSet, preparedStatement, connection);
}
return null;
}
測試
@Test
public void testGet() {
String sql = "SELECT flow_id flowid, type, id_card idcard," +
" exam_card examcard,"
+ "student_name studentname, location, grade " + "FROM examstudent "
+ "WHERE flow_id = ?";
Student student = dao.get(Student.class, sql, 7);
System.out.println(student);
}
@Test
public void testGetForList() {
String sql = "SELECT flow_id flowid, type, id_card idcard," +
" exam_card examcard,"
+ "student_name studentname, location, grade " + "FROM examstudent";
List students = dao.getForList(Student.class, sql);
System.out.println(students);
}
@Test
public void testGetForValue() {
String sql = "SELECT id_card idcard FROM examstudent "
+ "WHERE flow_id = ?";
String idCard = dao.getForValue(sql, 7);
System.out.println(idCard);
sql = "SELECT max(grade) FROM examstudent";
int grade = dao.getForValue(sql);
System.out.println(grade);
}
總結
以上是生活随笔為你收集整理的MySQL批量查询能返回集合吗_JDBC——查询多条记录,返回对应的对象的集合;查询一条记录,返回对应的对象...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql 并行执行sql_同时执行多条
- 下一篇: C#返回mysql查询结果_c#查询My