java jdbc 遍历,JDBC連接數據庫第二步:Java利用反射機制將ResultSet結果集遍歷到List中...

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.測試結果

e247185b7d0ce48120157c7d11367d02.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值