• 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.

  • 相关阅读:
    Jquery实现form表单提交后局部刷新页面的多种方法
    HTML5:'data-'属性的作用是什么
    ASP.NET MVC传递Model到视图的多种方式总结(二)__关于ViewBag、ViewData和TempData的实现机制与区别
    Var与Dynamic的区别
    ASP.NET MVC传递Model到视图的多种方式总结(一)__通用方式的使用
    动态规划(最大公共子序列)
    后缀名为properties,config和xml的文件内容读取
    初学者易犯的的错误
    jdk1.6与Myeclipse的冲突造成的
    微信红包算法思想
  • 原文地址:https://www.cnblogs.com/zhenghongxin/p/4447139.html
Copyright © 2020-2023  润新知