说明
在 JAVA jdbc封装 DbUtil 类 1.0 中,query 查询方法返回 List<Object[]> ,只有值,没有列名,使用起来不方便
创建 Record 类,封装 列名、值,并提供方法便于取数据
Record
封装一行数据
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* 封装一行数据
* @author mym
*
*/
public class Record {
public List<String> columns;
public Map<String,Object> datas;
public Record(){
columns=new ArrayList<>();
datas=new HashMap<>();
}
public Record(int initNum){
columns=new ArrayList<>(initNum);
datas=new HashMap<>(initNum);
}
/**
* 放数据
* @param column
* @param value
*/
public void put(String column,Object value){
columns.add(column);
datas.put(column, value);
}
/**
* 根据索引取出列名
* @param index
* @return
*/
public String getColumn(int index){
return columns.get(index);
}
/**
* 根据索引取出值
* @param index
* @return
*/
public Object getValue(int index){
String column=columns.get(index);
return datas.get(column);
}
/**
* 根据列名取出值
* @param column
* @return
*/
public Object getValue(String column){
return datas.get(column);
}
/**
* 返回所有列名
* @return
*/
public String[] getColumns() {
String[] array=new String[columns.size()];
return columns.toArray(array);
}
/**
* 返回Map,key是column,value是值
* @return
*/
public Map<String, Object> toMap() {
return datas;
}
/**
* 返回所有的 数据
* @return
*/
public Object[] getValues(){
int size=columns.size();
Object[] array=new Object[size];
for(int i=0;i<size;i++){
String column=columns.get(i);
array[i]=datas.get(column);
}
return array;
}
/**
* 返回数据的数量
* @return
*/
public int getSize(){
return columns.size();
}
}
修改 query 方法
修改 JAVA jdbc封装 DbUtil 类 1.0 中的 query 查询方法
/**
* 查询
* @param sql
* @param objects
* @throws SQLException
*/
public List<Record> query(String sql, Object ... objects ) throws SQLException{
PreparedStatement ps=conn.prepareStatement(sql);
if(objects!=null && objects.length>0){
for(int i=0;i<objects.length;i++){
ps.setObject(i+1, objects[i]);
}
}
ResultSet rs=ps.executeQuery();
ResultSetMetaData metaData = rs.getMetaData();
int columnNum=metaData.getColumnCount();
List list=new ArrayList();
while(rs.next()){
Record record=new Record();
for(int i=0 ; i<columnNum ; i++ ){
record.put(metaData.getColumnLabel(i+1), rs.getObject(i+1));
}
list.add(record);
}
rs.close();
ps.close();
return list;
}
完整代码
DbUtils1_1类完整代码如下:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
public class DbUtils1_1 {
protected Connection conn;
/**
* 查询
* @param sql
* @param objects
* @throws SQLException
*/
public List<Record> query(String sql, Object ... objects ) throws SQLException{
PreparedStatement ps=conn.prepareStatement(sql);
if(objects!=null && objects.length>0){
for(int i=0;i<objects.length;i++){
ps.setObject(i+1, objects[i]);
}
}
ResultSet rs=ps.executeQuery();
ResultSetMetaData metaData = rs.getMetaData();
int columnNum=metaData.getColumnCount();
List list=new ArrayList();
while(rs.next()){
Record record=new Record();
for(int i=0 ; i<columnNum ; i++ ){
record.put(metaData.getColumnLabel(i+1), rs.getObject(i+1));
}
list.add(record);
}
rs.close();
ps.close();
return list;
}
/**
* 增删改
* @param sql
* @param objects
* @return
* @throws SQLException
*/
public int update(String sql,Object ... objects) throws SQLException{
PreparedStatement ps=conn.prepareStatement(sql);
if(objects!=null && objects.length>0){
for(int i=0;i<objects.length;i++){
ps.setObject(i+1, objects[i]);
}
}
int i=ps.executeUpdate();
ps.close();
return i;
}
public void close() throws SQLException{
if(conn!=null){
conn.close();
}
}
public void setConnection(Connection connection) {
this.conn = connection;
}
}
}