jdbc查询的工具类

package com.yanshu.util;


import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.*;


import org.springframework.beans.BeanUtils;


import com.yanshu.pojo.Emp;






public class JdbcService {
/**
* 执行增删改的方法
* @param ps
* @param par
*/
public static void setUpdate(PreparedStatement ps,Object [] par)
{
if(par==null) return;
try {
for(int i=0;i<par.length;i++)
{
ps.setObject(i+1, par[i]);

}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}
/**
* insert update delete 的操作方法
用法:
public static void addNew(Emp emp)
{
String sql="insert into emp(name,hobas) values(?,?)";
update(sql,emp.getName(),emp.getHobas());

//Emp emp=new Emp();
//emp.setName("2");
//emp.setHobas("2");
//JdbcUtil.addNew(emp);
 
}
---添加方法
String sql="insert into emp(name) values(?) ";
//new Date(new java.util.Date().getTime())
exeupdate(sql, "23");
* @param sql 
* @param objects
*/
public static void exeupdate(String sql,Object...objects)
{
Connection conn=null;
PreparedStatement ps=null;

try {
conn=JdbcUtil.getConn();
ps=conn.prepareStatement(sql);
for(int i=0;i<objects.length;i++)
{
ps.setObject(i+1, objects[i]);
}
ps.executeUpdate();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
JdbcUtil.closeConn(null, null, null, ps, conn);
}


}
/**
* 查询一条记录返回对应的对象
* @1.获取connection
* @2.获取PreparedStatement
* @3.填充占位符
* @4.进行查询,得到ResultSet
* @5.若ResultSet中有记录,准备一个Map<String,Object>:键:存放列的别名,值:存放列的值
* @6.得到ResultSetMetaData对象
* @7.处理ResultSet,把指针向下移动一个单位
* @8.由ResultSetMetaData对象得到结果集中有多少列
* @9.由ResultSetMetaData得到每一个的列名,由ResultSet得到具体每一列的值
* @10.填充Map对象
* @11.用反射创建class对应的对象
* @12.遍历Map对象,用反射填充对象的属性值,属性名为map中的key,值
* @param clazz
* @param sql
* @param objects
* @return
* String sql="select name,id from emp where id=?  ";
Emp emp=get(Emp.class, sql,38);
*/
public static <T>T get(Class<T> clazz,String sql,Object ...objects)
{
T entity=null;
Connection conn=null;
PreparedStatement ps=null;
ResultSet rs=null;

try {

//1.获取connection
conn=JdbcUtil.getConn();
//* @2.获取PreparedStatement
ps=conn.prepareStatement(sql);
//* @3.填充占位符
for(int i=0;i<objects.length;i++)
{
ps.setObject(i+1, objects[i]);
}
//* @4.进行查询,得到ResultSet
rs=ps.executeQuery();
// * @5.若ResultSet中有记录,准备一个Map<String,Object>:键:存放列的别名,值:存放列的值
if(rs.next())
{
Map<String,Object> map=new HashMap<String,Object>();
//* @6.得到ResultSetMetaData对象
ResultSetMetaData rsmd=rs.getMetaData();
// * @7.处理ResultSet,把指针向下移动一个单位
// * @8.由ResultSetMetaData对象得到结果集中有多少列
int columnCount=rsmd.getColumnCount();
// * @9.由ResultSetMetaData得到每一个的列名,由ResultSet得到具体每一列的值
for(int i=0;i<columnCount;i++)
{
String columnLabel=rsmd.getColumnLabel(i+1);
/* System.out.println("columnLabel"+columnLabel);*/
Object columnValue=rs.getObject(i+1);
// * @10.填充Map对象
map.put(columnLabel, columnValue);
System.out.println(columnLabel+"put"+columnValue);
}

// * @11.用反射创建class对应的对象
entity=clazz.newInstance();
// * @12.遍历Map对象,用反射填充对象的属性值,属性名为map中的key,值
for(Map.Entry<String, Object> en:map.entrySet())
{
String propertyName=en.getKey();
Object value=en.getValue();
ReflectionUtils.setFieldValue(entity, propertyName, value);
}

}
System.out.println(entity+"entity");



} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}


return entity;

}
/**
* 查询多条记录,返回对应的对象集合
* @param clazz
* @param sql
* @param objects
* @return
*/
public static <T> List<T> getForList(Class<T> clazz,String sql,Object ...objects)
{
List<T> list=new ArrayList<>();
Connection conn=null;
PreparedStatement ps=null;
ResultSet rs=null;
try {
conn=JdbcUtil.getConn();
ps=conn.prepareStatement(sql);
for(int i=0;i<objects.length;i++)
{
ps.setObject(i+1, objects[i]);
}
rs=ps.executeQuery();
//5.准备一个List<Map<String,Object>>;
//键:存放列的别名,值,存放列的值,其中一个Map对象对应一条记录
List<Map<String,Object>> valueslist=new ArrayList<>();
ResultSetMetaData rsmd=rs.getMetaData();
Map<String,Object> map=null;
// * @7.处理ResultSet,使用while
while(rs.next())
{
map=new HashMap<>();
for(int i=0;i<rsmd.getColumnCount();i++)
{
String columnLabel=rsmd.getColumnLabel(i+1);
Object value=rs.getObject(i+1);
map.put(columnLabel, value);
}
valueslist.add(map);

}
//12判断List是否为空,若不为空,
//则遍历List,得到一个一个的Map对象,在把一个Map对象 转为Class
//参数对应的Object对象
T bean=null;
if(valueslist.size()>0)
{
for(Map<String,Object> m:valueslist)
{
bean=clazz.newInstance();
for(Map.Entry<String,Object> entry:m.entrySet())
{
String peopertyName=entry.getKey();
Object value=entry.getValue();


ReflectionUtils.setFieldValue(bean,peopertyName,value);

}
//13.把Object对象放到list中
list.add(bean);
}
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}



return list;

}
//进行优化
/**
* 获取结果集的ColumnLabels对应的list
* @param rs
* @return
* @throws SQLException
*/
private List<String> getColumnLabels(ResultSet rs) throws SQLException
{
List<String> labes=new ArrayList<>();
ResultSetMetaData rsmd=rs.getMetaData();
for(int i=0;i<rsmd.getColumnCount();i++)
{
labes.add(rsmd.getColumnLabel(i+1));
}
return labes;

}


public static void main(String[] args) {
/*String sql="insert into emp(name) values(?) ";
//new Date(new java.util.Date().getTime())
exeupdate(sql, "23");
System.out.println("9999");*/
/*String sql="select name,id from emp where id=?  ";
Emp emp=get(Emp.class, sql,38);*/
String sql="select name,id from emp  ";
List<Emp> emp=getForList(Emp.class, sql);
System.out.println(emp);
}
public void getAll()
{


try {

//1.获取connection

//* @2.获取PreparedStatement

//* @3.填充占位符
//* @4.进行查询,得到ResultSet
// * @5.若ResultSet中有记录,准备一个Map<String,Object>:键:存放列的别名,值:存放列的值
//* @6.得到ResultSetMetaData对象
// * @7.处理ResultSet,把指针向下移动一个单位
// * @8.由ResultSetMetaData对象得到结果集中有多少列
// * @9.由ResultSetMetaData得到每一个的列名,由ResultSet得到具体每一列的值
// * @10.填充Map对象
// * @11.用反射创建class对应的对象
// * @12.遍历Map对象,用反射填充对象的属性值,属性名为map中的key,值



} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}


}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值