zoukankan      html  css  js  c++  java
  • java—在dbutils中处理事务与不确定条件的查询(46)

    在dbutils中处理事务       

    事务是指用户的一次操作。这一次操作有可能是一个表,也有可能是多个表,也有可能是对一个表的多次操作。

    只要是:

           1:对数据数据库进行多次操作。

           2:多个表,还是一个表的多次update,detelete,inset都应该开始一个事务。

    如果仅做一次与数据库的操作。即只执行一个sql语句,则可以不用开事务。

    如果仅做select 则没有必要开事务。

           事务是指用户的一次操作,这一次操作,只能有一个结果,要不然就全部成功,要不然就全部不成功。

    如果需要在dbutils中管理事务。则用户必须自己传递并控制connection。

        @Test

        public void tx1() throws Exception{

           QueryRunner run = new QueryRunner(DataSourceUtils.getDatasSource());

           Connection con =DataSourceUtils.getConn();

           try{

               String sql = "insert into users values('U008','AA','AA')";

               //设置事务的开始标记

               con.setAutoCommit(false);

               run.update(con, sql);

               String sql2 = "insert into users values('U009,'AA','AA')";

               run.update(con,sql2);

               //提交

               con.commit();

           }catch(Exception e){

               System.err.println("出错了");

               con.rollback();

           }finally{

               con.close();

           }

        }


    不确定条件的查询

    以下是通过串字符串的方式实现查询:

        @Test

        public void query1() throws Exception{

            QueryRunner run = new QueryRunner(DataSourceUtils.getDatasSource());

           Contact c = new Contact();

           //c.setId("C001");

           c.setName("王");

           //c.setSex("1");

           //c.setTel("123");

           //c.setAddr("中国");

           //c.setAge(88);

           String sql = "select * from contacts where 1=1";

           if(c.getId()!=null){

               sql+=" and id='"+c.getId()+"'";

           }

           if(c.getSex()!=null){

               sql = sql+" and sex='"+c.getSex()+"'";

           }

           if(c.getName()!=null){

               sql+=" and name like '%"+c.getName()+"%'";

           }

           if(c.getAddr()!=null){

               sql+=" and addr like '%"+c.getAddr()+"%'";

           }

           if(c.getTel()!=null){

               sql+=" and tel like '%"+c.getTel()+"%'";

           }

           System.err.println(">>>>>>:"+sql);

          

           List<Contact> cs = run.query(sql,new BeanListHandler<Contact>(Contact.class));

           for(Contact cc:cs){

               System.err.println(cc);

           }

          

          

        }

        //不确定条件的查询

        @Test

        public void query1() throws Exception{

           QueryRunner run = new QueryRunner(DataSourceUtils.getDatasSource());

           Contact c = new Contact();

           //c.setId("C001");

           c.setName("王'");

           c.setSex("1");

           c.setTel("123");

           c.setAddr("中国");

           c.setAge(55);

           String sql = "select * from contacts where 1=1 ";

           List<Object> params = new ArrayList<Object>();

           if(c.getId()!=null){

               sql+=" and id=?";

               params.add(c.getId());

           }

           if(c.getSex()!=null){

               sql = sql+" and sex=?";

               params.add(c.getSex());

           }

           if(c.getName()!=null){

               sql+=" and name like ?";

               params.add("%"+c.getName()+"%");

           }

           if(c.getAddr()!=null){

               sql+=" and addr like ?";

               params.add("%"+c.getAddr()+"%");

           }

           if(c.getTel()!=null){

               sql+=" and tel like ?";

               params.add("%"+c.getTel()+"%");

           }

           if(c.getAge()!=null){

               sql+=" and age=?";

               params.add(c.getAge());

           }

           System.err.println(">>>>>>:"+sql);

           System.err.println(params);

           List<Contact> cs = run.query(sql,

                        new BeanListHandler<Contact>(Contact.class),

                        params.toArray());

           for(Contact cc:cs){

               System.err.println(cc);

           }

          

          

        }


    匹配后面的所有and.

  • 相关阅读:
    2014复习提纲
    string库与char[]
    扩展欧几里得算法及其应用
    1002 [FJOI2007]轮状病毒
    node源码详解(三)—— js代码在node中的位置,process、require、module、exports的由来
    node源码详解(二 )—— 运行机制 、整体流程
    node源码详解 (一)
    html 第一天随记(个人不常用的标签)
    Siebel电信业务流程
    Siebel层次架构
  • 原文地址:https://www.cnblogs.com/zhenghongxin/p/4447139.html
Copyright © 2011-2022 走看看