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事务.容器事务:
随机推荐
- jeesite快速开发平台(四)----数据库各表一览
转自:https://blog.csdn.net/u011781521/article/details/55194309
- Remove “Quick Access” entry in Eclipse Juno
Here is a quick hack which doesn't require any plugin installation, instead you just need to add a f ...
- 最全最详细的用JS过滤Emoji表情的输入
在前端页面开发过程中,总会碰到不允许输入框输入emoji表情的需求,我的思路是通过编码用正则匹配表情,然后将其替换为空字符创.但是问题也是显而易见的,完整的编码集是什么呢?查阅了官方文档,发现上面并没 ...
- FD_CLOEXEC
[FD_CLOEXEC] 通过fcntl设置FD_CLOEXEC标志有什么用? close on exec, 意为如果对描述符设置了FD_CLOEXEC,使用execl执行的程序里,此描述符被关闭,不 ...
- PHP GD库
<?php $file = '12.jpg'; //打开图片 $im = imagecreatefromjpeg($file); //设置水印字体颜色 $color = imagecoloral ...
- Spring Boot 、mybatis 、swagger 和 c3p0 整合
文件路径如下 添加依赖 <?xml version="1.0" encoding="UTF-8"?> <project xmlns=" ...
- php闭包bindTo方法用法
从手册知道,Closure::bindTo — 复制当前闭包对象,绑定指定的$this对象和类作用域. 创建并返回一个 匿名函数, 它与当前对象的函数体相同.绑定了同样变量,但可以绑定不同的对象,也可 ...
- android studio打包apk
转载:http://chenfeicqq.iteye.com/blog/1889160 1)Android Studio菜单Build->Generate Signed APK (2) ...
- Golang基本结构之练习(day2)
笔记: . 任何一个代码文件隶属于一个包 . import 关键字,引用其他包: import(“fmt”) import(“os”) 通常习惯写成: import ( “fmt” “os” ) . ...
- lua简单包装
#ifndef _LUA_WRAPPER_ #define _LUA_WRAPPER_ extern "C" { #include "lua.h" #inclu ...