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

java—在dbutils中处理事务与不确定条件的查询(46)的更多相关文章

  1. SQL中以count及sum为条件的查询

    在开发时,我们经常会遇到以“累计(count)”或是“累加(sum)”为条件的查询.比如user_num表: id user num 1 a 3 2 a 4 3 b 5 4 b 7   例1:查询出现 ...

  2. SQL中以count或sum为条件的查询方式

    在开发时,我们经常会遇到以“累计(count)”或是“累加(sum)”为条件的查询.比如user_num表: id user num 1 a 3 2 a 4 3 b 5 4 b 7   例1:查询出现 ...

  3. C#和JAVA中编写事务代码

    C#  DAL层代码,运行多条增删改,使用事务操作: /// <summary> /// 运行 多条增删改 (非查询语句) /// </summary> /// <par ...

  4. 第77节:Java中的事务和数据库连接池和DBUtiles

    第77节:Java中的事务和数据库连接池和DBUtiles 前言 看哭你,字数:8803,承蒙关照,谢谢朋友点赞! 事务 Transaction事务,什么是事务,事务是包含一组操作,这组操作里面包含许 ...

  5. [转]Java中的事务

    这篇Java事务的说明不错,所以把它转过来收藏了. 原博文地址:http://blog.csdn.net/gyf4817/article/details/5362444 通常的观念认为,事务仅与数据库 ...

  6. Java中的事务——JDBC事务和JTA事务

    Java中的事务——JDBC事务和JTA事务 转载:http://www.hollischuang.com/archives/1658 之前的事务介绍基本都是数据库层面的事务,本文来介绍一下J2EE中 ...

  7. 在java中,事务是什么?

    一.什么是Java事务通常的观念认为,事务仅与数据库相关.事务必须服从ISO/IEC所制定的ACID原则.ACID是原子性(atomicity).一致性(consistency).隔离性(isolat ...

  8. Java中的事务——全局事务与本地事务

    转载,原文来源 http://www.hollischuang.com Java事务的类型有三种:JDBC事务.JTA(Java Transaction API)事务.容器事务.这是从事务的实现角度区 ...

  9. Java中的事务

    Java中的事务 学习了:https://www.cnblogs.com/chengpeng15/p/5802930.html 膜拜一下 org 分为三类:jdbc事务.jta事务.容器事务:

随机推荐

  1. JSF + Primefaces: Problem with “rendered” components with ajax

    Cant seem to get rendered to work correctly with update attributes. Here is my codes <ui:define n ...

  2. 【转】volatile关键字。编译器不优化,多线程会改。防止随时变动的

    来自:http://www.cnblogs.com/yc_sunniwell/archive/2010/07/14/1777432.html 1. 为什么用volatile? C/C++ 中的 vol ...

  3. XP系统下 VS2010 选中行崩溃

  4. S——table

    SELECT A.LOGIN,EMAIL_ADDR,LAST_NAMEfrom S_USER AJOIN S_CONTACT B on A.ROW_ID=B.ROW_IDwhere  A.ROW_ID ...

  5. MacOS下打包Python应用

    在MacOS下开发的Python应用,不是Web Application,开发好以后,如何给用户使用呢?用户的操作系统也是MacOS 使用py2app打包        一.软件环境          ...

  6. lua简单包装

    #ifndef _LUA_WRAPPER_ #define _LUA_WRAPPER_ extern "C" { #include "lua.h" #inclu ...

  7. TabHost tab项单击事件

    TabHost 选项发生变化时会触发OnTabChangedListener事件,但是如果当前已经选中第一项,再次单击该项时,OnTabChangedListener不会触发该事件,所以再次单击选中t ...

  8. mysql查询今天、昨天、近7天、近30天、本月、上一月的SQL语句

    mysql查询今天.昨天.近7天.近30天.本月.上一月的SQL语句 这篇文章主要介绍了mysql查询今天.昨天.近7天.近30天.本月.上一月的SQL语句,一般在一些统计报表中比较常用这个时间段,需 ...

  9. mongo学习- 聚合project操作

    mongodb中聚合project操作,必须和其他的聚合一起使用,它的作用有以下几个: 1.返回我们想要显示的的字段 {"$project":{"name":1 ...

  10. 网络中的A、B、C类地址

    1.A类ip地址(1.0.0.0到126.255.255.255) A类地址只有第一个8位表示网络地址,最高位一定为0,所以A类地址的网络号范围可以为:64+32+16+8+4+2+1=127,也就是 ...