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.
java—在dbutils中处理事务与不确定条件的查询(46)的更多相关文章
- SQL中以count及sum为条件的查询
在开发时,我们经常会遇到以“累计(count)”或是“累加(sum)”为条件的查询.比如user_num表: id user num 1 a 3 2 a 4 3 b 5 4 b 7 例1:查询出现 ...
- SQL中以count或sum为条件的查询方式
在开发时,我们经常会遇到以“累计(count)”或是“累加(sum)”为条件的查询.比如user_num表: id user num 1 a 3 2 a 4 3 b 5 4 b 7 例1:查询出现 ...
- C#和JAVA中编写事务代码
C# DAL层代码,运行多条增删改,使用事务操作: /// <summary> /// 运行 多条增删改 (非查询语句) /// </summary> /// <par ...
- 第77节:Java中的事务和数据库连接池和DBUtiles
第77节:Java中的事务和数据库连接池和DBUtiles 前言 看哭你,字数:8803,承蒙关照,谢谢朋友点赞! 事务 Transaction事务,什么是事务,事务是包含一组操作,这组操作里面包含许 ...
- [转]Java中的事务
这篇Java事务的说明不错,所以把它转过来收藏了. 原博文地址:http://blog.csdn.net/gyf4817/article/details/5362444 通常的观念认为,事务仅与数据库 ...
- Java中的事务——JDBC事务和JTA事务
Java中的事务——JDBC事务和JTA事务 转载:http://www.hollischuang.com/archives/1658 之前的事务介绍基本都是数据库层面的事务,本文来介绍一下J2EE中 ...
- 在java中,事务是什么?
一.什么是Java事务通常的观念认为,事务仅与数据库相关.事务必须服从ISO/IEC所制定的ACID原则.ACID是原子性(atomicity).一致性(consistency).隔离性(isolat ...
- Java中的事务——全局事务与本地事务
转载,原文来源 http://www.hollischuang.com Java事务的类型有三种:JDBC事务.JTA(Java Transaction API)事务.容器事务.这是从事务的实现角度区 ...
- Java中的事务
Java中的事务 学习了:https://www.cnblogs.com/chengpeng15/p/5802930.html 膜拜一下 org 分为三类:jdbc事务.jta事务.容器事务:
随机推荐
- 路由的分发include实现
在主程序里面的URL.py 中 from django.conf.urls import url, include urlpatterns = [ url(r'^cmdb/', include('ap ...
- JDK动态代理代码示例
JDK动态代理代码示例 业务接口 实现了业务接口的业务类 实现了InvocationHandler接口的handler代理类 1.业务接口 package com.wzq.demo01; /** * ...
- vim调整粘贴时的文本缩进
解决办法: 1. 在拷贝前输入:set paste (这样的话,vim就不会启动自动缩进,而只是纯拷贝粘贴)2. 拷贝完成之后,输入:set nopaste (关闭paste) 在 Vim 中粘贴文本 ...
- EL的基本使用
总结:EL操作的是作用域 <body> <% Users users = new Users("lisi","lisi123","l ...
- binary tree
一.中序线索化 二叉树节点定义: class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; int isle ...
- 118. Pascal's Triangle (Array)
Given numRows, generate the first numRows of Pascal's triangle. For example, given numRows = 5, Retu ...
- unity平行光太亮?物体发白?可能你使用了2个或多个平行光
unity平行光太亮?物体发白?可能你使用了2个或多个平行光 今天做项目时就遇到了这个问题,光亮得让物体发白 发现加载的场景 里面有个 平行光,删了就好了 要是感觉还是太亮,就把主平行光的Intens ...
- PHP与Imagemagick
Imagemagick:相关站点: ImageMagick中文站:http://www.imagemagick.com.cn/ ImageMagick英文站:http://www.imagemagic ...
- NoSQL数据库笔谈
NoSQL数据库笔谈 databases , appdir , node , paper颜开 , v0.2 , 2010.2 序 思想篇 CAP 最终一致性 变体 BASE 其他 I/O的五分钟法则 ...
- VGGNet
VGGNet 是牛津大学计算机视觉组(Visual Geometry Group)和 GoogleDeepMind 公司的研究员一起研发的的深度卷积神经网络. 在ImageNet大型视觉识别挑战 IL ...