这是经过我的项目实验后的可用方法:是用来实现添加、删除、修改操作的共用方法。分为两个方法,一个是设置PreparedStatement ps;对象参数的方法。一个是执行泛型PreparedStatement ps;对象的下面来看一下吧:
/*
* Author:spring
* Date :09-03-06 20:28
*给PreparedStatement对象设置参数的方法
*/
privatePreparedStatement setPreparedStatement(PreparedStatement ps,
List pars)throwsSQLException {
try{
// 1.获取数组的长度这样能提高一点性能
intx = pars.size();
// 2.循环设置ps中需要的参数
for(inti = 0; i < x; i++) {
ps.setObject(i + 1, pars.get(i));
System.out.println(pars.get(i));
}
// 3.添加到缓冲区中
ps.addBatch();
// 4.设置完参数的ps返回
returnps;
}finally{
}
}
/*
*执行PreparedStatement泛型列表的方法
*/
privatebooleanexceurePreparedStatement(List pss)
throwsSQLException {
intx = 0;
try{
// 1.为手动提交
this.conn.setAutoCommit(false);
// 2.执行所有的PreparedStatement对象
x = pss.size();
for(inti = 0; i < x; i++) {
pss.get(i).executeBatch();
}
// 3.没有错误的话的就提交事务
this.conn.commit();
System.out.println("执行executeBatch()");
// 4.如果提交成功那就返回成功true
returntrue;
}catch(Exception e) {
//出现异常回滚事务
e.printStackTrace();
System.out.println("执行批量时error");
this.conn.rollback();
//个性化异常
thrownewMyException("page.error.1000","1000数据执行的批量出错.");
//throw new SQLException();
}finally{
//最后把手动提交改为自动提交
this.conn.setAutoCommit(true);
//关闭不用的资源
for(inti = 0; i < x; i++) {
DBUtils.close(pss.get(i));
}
}
}
//下面来介绍一下它们的用法
要实现一个用户添加的功能,在添加的同时还要往log日志表中添加是谁操作的
这就要用到事务处理了
/*
*添加用户
*/
publicBoolean add_Users()throwsSQLException {
try{
// 1.要执行的sql语句
sql1=newStringBuilder()
.append("insert into spring_users(U_ID,u_Name,u_Password,u_Email,u_State)")
.append(" values(SEQ_USERS.NEXTVAL,?,?,?,?)");
//添加日志
sql2=newStringBuilder()
.append("insert into SPRING_LOG(L_ID,L_NAME,U_ID,L_MESSAGE,L_DATE)")
.append(" values(SEQ_LOG.nextval,?,?,?,?)");
// 2.要设置的参数列表
pars1=newArrayList();
pars1.add(dto.get("u_Name"));//用户名
pars1.add(dto.get("u_Password"));//用户密码
pars1.add(dto.get("u_Email"));//用户E-email
pars1.add(dto.get("u_Rating"));//权限与用户状态
//获取当前操作员的u_id
String u_Id = (String)dto.get("u_Id");
pars2=newArrayList();
pars2.add("SPRING_USERS");//设置1操作的表名
pars2.add(u_Id);//设置2操作人id
pars2.add("这是用户添加操作:用户名:"+this.dto.get("u_Name"));//设置3
//描述看看是不是添加操作
pars2.add(Tools.getSqlTimestamp());//设置4操作时间
// 3.编译sql语句并设置参数
pss=newArrayList();
ps1=this.conn.prepareStatement(sql1.toString());
ps2=this.conn.prepareStatement(sql2.toString());
//设置参数
pss.add(this.setPreparedStatement(ps1,pars1));
pss.add(this.setPreparedStatement(ps2,pars2));
// 4.调用执行sql语句的方法
returnthis.exceurePreparedStatement(pss);
}finally{
// 5.释放使用资源
DBUtils.close(ps1);
DBUtils.close(ps2);
}
}
这里的一些方法是我封装的像获取当前用户的u_id , String u_Id = (String)dto.get("u_Id");这是我用的构造传过来的dto所以我们不用管它;
分析一下用法:
1.设置sql语句
2.编译sql语句(用PreparedStatement)
3.定义一个泛型PreparedStatement
4.设置PreparedStatement的参数返回来添加到泛型里
5.调用执行泛型中的PreparedStatement对象
6.关闭不需要的资源
7.这上面是我开发时的源码大家可以直接拿去用