在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. gridview发布后,编辑改为edit 原因是未安装 dotNetFx40LP_Full_x86_x64zh-Hans中文语言包

    https://www.microsoft.com/zh-cn/download/details.aspx?id=3324

  2. 1.ehcache实现页面整体缓存和页面局部缓存

    转自:https://www.cnblogs.com/jianjianyang/p/4933016.html 好长时间没写博客了,真的是没时间啊.ps:其实就是懒!!接下来几篇要写下缓存,这里主要写下 ...

  3. 迷你MVVM框架 avalonjs 1.3.2发布

    时隔一个月,avalon的新版本终于出来了,本次更新带来强大的模块间通信机制,其他就往常一样FIX BUG. 在文本绑定里,IE会对流离于DOM树外的文本节点的data属性赋值报错,需要添加一层判定 ...

  4. 如何快速选中某单元格所在的整行或整列 Excel教程

    我们可以使用快捷键的操作来快速选中B3单元格所在的整行或整列,操作方法如下,请大家参阅! 一.正规的快捷键操作 ①快速选中整行 按下键盘上的 Shift Space 即同时按下键盘上的Shift 空格 ...

  5. MyBatis 注解式开发

  6. LevelDB 写入与删除记录

    [LevelDB 写入与删除记录] levelDb的记录更新操作,即插入一条KV记录或者删除一条KV记录.levelDb的更新操作速度是非常快的,源于其内部机制决定了这种更新操作的简单性. 图6.1是 ...

  7. WSAEvent

    [WSAEvent] 1.WSACreateEvent.创建WSA事件. 2.WSAEventSelect. lNetworkEvents [in] A bitmask that specifies ...

  8. lombok 介绍及基本使用方法

    Lomboz是一个基于LGPL的开源J2EE综合开发环境的Eclipse插件,对编码,发布,测试,以及debug等各个软件开发的生命周期提供支持,支持JSP,EJB等.Lomboz是Eclipse的一 ...

  9. Redhat安装python环境(readline模块)

    多次尝试,发现linux下安装软件: yum install readline-devel readline patch yum update python -y # 这步很重要,修复了报错 pip3 ...

  10. 第六章 Windows应用程序对键盘与鼠标的响应