1.基礎篇
查詢出來的結果集Statement的數據結構,可以看成數據庫中一張表的結構,有 N 行 M 列,其中一行就是一條數據。
resultSet.next():將光標從當前位置向前移動一行,即遍歷是否還有下一行。
resultSetMetaData = resultSet.getMetaData():檢索此 ResultSet對象的列的數量,類型和屬性(即每一列的列名和類型)。
int num = resultSetMetaData.getColumnCount(); 獲取一行數據的列的數量
2.利用statement執行executeQuery()方法
public static List statementExecuteQuery(Class clazz, final String sql){
T entity = null;
Statement statement = null;
ResultSet resultSet = null;
List queryResult = new ArrayList<>();
Connection connection= getConnection();
if (null == connection){
//log.error("Connection is null.");
return null;
}
try {
statement = connection.createStatement();
resultSet = statement.executeQuery(sql);
final List> data = converResultSetToList(resultSet);
for (Map map : data){
entity = clazz.newInstance();
for (Map.Entry entry : map.entrySet()){
String columnName = entry.getKey();
Object columnValue = entry.getValue();
BeanUtils.setProperty(entity,columnName,columnValue);
}
queryResult.add(entity);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
closeResource(connection,null,null,resultSet);
}
return queryResult;
}
public static T statementQuery(Class clazz, final String sql){
List queryResult = statementExecuteQuery(clazz,sql);
if (null != queryResult && queryResult.size() > 0){
return queryResult.get(0);
}
return null;
}
將resultset轉換為list
private static List> converResultSetToList(ResultSet resultSet) throws SQLException {
if (null == resultSet){
return null;
}
List> data = new ArrayList<>();
ResultSetMetaData rsmd = resultSet.getMetaData();
while (resultSet.next()){
Map rowData = new HashMap();
for(int i = 0,columnCount = rsmd.getColumnCount();i < columnCount; i++){
rowData.put(rsmd.getColumnName(i + 1),resultSet.getObject(i + 1));
}
data.add(rowData);
}
return data;
}
3.利用preparedStatement執行executeQuery()方法
public static List preparedStatementExecuteQuery(Class clazz,final String sql, Object... args){
T entity = null;
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
List queryResult = new ArrayList<>();
Connection connection = getConnection();
if(null == connection){
return null;
}
try {
preparedStatement = connection.prepareStatement(sql);
for (int i = 0, length = args.length; i < length; i++){
preparedStatement.setObject(i + 1, args[i]);
}
resultSet = preparedStatement.executeQuery();
final List> data = converResultSetToList(resultSet);
for (Map map: data){
entity = clazz.newInstance();
for(Map.Entry entry: map.entrySet()){
String columnName = entry.getKey();
Object columnValue = entry.getValue();
BeanUtils.setProperty(entity,columnName,columnValue);
}
queryResult.add(entity);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
closeResource(connection,null,preparedStatement,resultSet);
}
return queryResult;
}
public static T preparedStatementQuery(Class clazz, final String sql, Object... args){
List queryResult = preparedStatementExecuteQuery(clazz,sql,args);
if (null != queryResult && queryResult.size() > 0){
return queryResult.get(0);
}
return null;
}
4.測試結果