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事务.容器事务:
随机推荐
- leetcode112
/** * Definition for a binary tree node. * public class TreeNode { * public int val; * public TreeNo ...
- 【326】PIL 截图及图片识别
参考:另一种用python识别图片文字的方法 参考:Python人工智能之图片识别,Python3一行代码实现图片文字识别 参考:Python3+Selenium3环境构建填坑之旅 参考:基于pyth ...
- 什么是Emit,什么是反射,二者区别到底是什么?(转)
Emit的准确定义,我们看看微软给出的答案 System.Reflection.Emit 命名空间包含{ 允许编译器或工具发出元数据和发出 Microsoft 中间语言 (MSIL) ,并可选择在磁盘 ...
- 解决MongoDB分页查询之count查询慢的问题
一.概述 问题描述:在项目中优化动态查询分页接口时,发现count查询很慢(数据量大概30万),那如何解决这个问题呢? 解决方法:添加索引,多个查询条件可以添加复合索引 二.测试对比 1. 未加索引时 ...
- cas增加验证码
参考地址:https://blog.csdn.net/attackmind/article/details/52052502 参考地址:https://blog.csdn.net/jadyer/art ...
- java基础二(阅读Head First Java记录)
写在前面的话 本部分是在语法基础上的一些内容,比如内部java函数库,继承多态等 “与”和“或”运算符 1.短运算符(&&,||) &&与,必须表达式两边都为 ...
- Visual Studio2017 设置了vcpkg之后,编译其他程序出问题
博客参考:https://github.com/nodejs/node/issues/23909 错误如下 LNK2005 _SSL_CTX_check_private_key already def ...
- COGS 2189 帕秋莉的超级多项式
放模板啦! 以后打比赛的时候直接复制过来. 说句实话vector的效率真的不怎么样,但是似乎也还行,最主要是……写得比较爽. #include <cstdio> #include < ...
- Laravel/Homestead storage:link -> symlink(): Protocol error
I'm trying to run the following artisan command: php artisan storage:link I get this error: [ErrorEx ...
- 441. Arranging Coins
static int wing=[]() { std::ios::sync_with_stdio(false); cin.tie(NULL); ; }(); class Solution { publ ...