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事务.容器事务:
随机推荐
- Javascript 日期 加减
//create the date var myDate = new Date(); //add a day to the date myDate.setDate(myDate.getDate() + ...
- JVM 理解
https://blog.csdn.net/hjxgood/article/details/53896229 一.什么是JVM JVM是Java Virtual Machine(Java虚拟机)的缩写 ...
- (1)activiti认识以及数据库和插件配置
工作流介绍 工作流(Workflow),就是通过计算机对业务流程自动化执行管理.它主要解决的是“使在多个参与者之间按照某种预定义的规则自动进行传递文档.信息或任务的过程, 从而实现某个预期的业务目标, ...
- 迷你MVVM框架 avalonjs 0.84发布
本版本只要做了如下改进 重构ui绑定 fix scanTag bug ms-include 的值必须不为空值,否则不做任何操作.
- 机器学习算法中GBDT和XGBOOST的区别有哪些
首先xgboost是Gradient Boosting的一种高效系统实现,并不是一种单一算法.xgboost里面的基学习器除了用tree(gbtree),也可用线性分类器(gblinear).而GBD ...
- SAP middb主键加索引
alter table DEPTBIGCPDL_DBC drop constraint DEPTBIGCPDL_DBC_PK CREATE UNIQUE INDEX TABLEAU_USER.DEPT ...
- go_封装
go语言中首字母大写表示public go语言中首字母小写表示private 结构定义的方法必须放在同一个包内 一个目录只能放一个包 如何扩充系统的类型或别人的类型: 1.定义别名 2.使用组合 使用 ...
- 47. Permutations II (Back-Track, Sort)
Given a collection of numbers that might contain duplicates, return all possible unique permutations ...
- 最多有k个不同字符的最长子字符串 · Longest Substring with at Most k Distinct Characters(没提交)
[抄题]: 给定一个字符串,找到最多有k个不同字符的最长子字符串.eg:eceba, k = 3, return eceb [暴力解法]: 时间分析: 空间分析: [思维问题]: 怎么想到两根指针的: ...
- Golang之struct
1.用来定义复杂数据结构 2.struct里面可以包含多个字段(属性) 3.struct类型可以定义方法,注意和函数的区分. 4.struct类型是值类型 5.struct类型可以嵌套 6.Go语言没 ...