你的位置:首页 > Java教程

[Java教程]在dbutils中处理事务与不确定条件的查询


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