jdbc增删改查的工具类

来源:互联网 发布:mac设置隐藏文件夹 编辑:程序博客网 时间:2024/06/05 10:07
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.HashMap;
import java.util.Map;


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;

}
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);
}
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();
}
}


}