`
floger
  • 浏览: 215775 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JDBC中的添加、删除、修改操作的共用方法与大家分享一下

    博客分类:
  • j2ee
阅读更多

本文出自:http://www.blogjava.net/spring-wang/archive/2009/03/09/258693.html

 

 

这是经过我的项目实验后的可用方法:是用来实现添加、删除、修改操作的共用方法。分为两个方法,一个是设置PreparedStatement ps;对象参数的方法。一个是执行泛型PreparedStatement ps;对象的下面来看一下吧:

    /*

     * Author:spring

     * Date :09-03-06 20:28

     * PreparedStatement对象设置参数的方法

     */

    private PreparedStatement setPreparedStatement(PreparedStatement ps,

           List pars) throws SQLException {

       try {

           // 1.获取数组的长度这样能提高一点性能

           int x = pars.size();

           // 2.循环设置ps中需要的参数

           for (int i = 0; i < x; i++) {

              ps.setObject(i + 1, pars.get(i));

              System.out.println(pars.get(i));

           }

           // 3.添加到缓冲区中

           ps.addBatch();

           // 4.设置完参数的ps返回

           return ps;

       } finally {

          

       }

    }

    /*

     * 执行PreparedStatement泛型列表的方法

     */

    privateboolean exceurePreparedStatement(List<PreparedStatement> pss)

           throws SQLException {

       int x = 0;

       try {

           // 1.为手动提交

           this.conn.setAutoCommit(false);

           // 2.执行所有的PreparedStatement对象

           x = pss.size();

           for (int i = 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();

           //个性化异常

           thrownew MyException("page.error.1000","1000 数据执行的批量出错.");

           //throw new SQLException();

       } finally {

           // 最后把手动提交改为自动提交

           this.conn.setAutoCommit(true);

           // 关闭不用的资源

           for (int i = 0; i < x; i++) {

               DBUtils.close(pss.get(i));

           }

       }

    }

//下面来介绍一下它们的用法

要实现一个用户添加的功能,在添加的同时还要往log日志表中添加是谁操作的

这就要用到事务处理了

/*

     *添加用户

     */

    public Boolean add_Users() throws SQLException {

       try {

           // 1.要执行的sql语句

           sql1 = new StringBuilder()

           .append("insert into spring_users(U_ID,u_Name,u_Password,u_Email,u_State)")

           .append(" values(SEQ_USERS.NEXTVAL,?,?,?,?)");

           // 添加日志

           sql2 = new StringBuilder()

                  .append("insert into SPRING_LOG(L_ID,L_NAME,U_ID,L_MESSAGE,L_DATE)")

                  .append(" values(SEQ_LOG.nextval,?,?,?,?)");

           // 2.要设置的参数列表

           pars1 = new ArrayList();

           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 = new ArrayList();

           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 = new ArrayList<PreparedStatement>();

           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. 这上面是我开发时的源码大家可以直接拿去用

分享到:
评论

相关推荐

    两种实现JDBC添加、删除、修改操作的方法对比

    两种实现JDBC添加、删除、修改操作的方法对比可以用来实现添加、删除、修改操作的共用方法。其中,设置PreparedStatement ps对象参数的方法可以提高性能,而执行泛型PreparedStatement ps对象的方法可以执行多个...

    Java Web项目多用户在线网络通讯录.rar

    而JDBC则是Java与数据库交互的接口,负责数据的存取操作。 用户注册和登录是系统的重要功能。注册模块通常包含输入用户名、密码、邮箱等信息,后台需要验证信息的有效性,并通过加密算法(如MD5或bcrypt)对密码...

    基于JSP+SERVLET+MYSQL的在线考试系统源码,有试题管理,考试,阅卷,改卷功能.zip

    管理员模块:添加、删除和修改教师、学生、课程、班级信息,查询学生成绩,更改管理员自己的密码 教师、学生模块:修改自己的密码,教师查询所带班级的成绩,学生查询自己的成绩,教师在线出卷,学生在线考试

    JSP班级管理系统

    同时,数据库(如MySQL、Oracle等)用于存储各类信息,Servlet和JavaBean作为后端处理逻辑,JDBC(Java Database Connectivity)用于连接数据库进行数据操作。此外,可能还会利用到其他技术和框架,如Spring Boot、...

    Maven整合S2SH.docx

    3. **资源路径问题**:使用注解配置时,静态资源的路径可能需要重新配置,例如在Struts2中,可能需要在`struts-default.xml`中添加或修改`&lt;constant&gt;`来设置`struts.action.include.javascript`和`struts.action....

    jpivot学习总结.doc

    在 Cube 中, Dimension 和 Measure 的共同地方就是共用一个事实表。 Cube 中的有以下几个属性: 属性名 含义 name Cube 的名字 caption 标题 , 在表示层显示的 cache 是否对 Cube 对应的实表用 mondrian ...

Global site tag (gtag.js) - Google Analytics