数据库连接池-DBUtils高级 事务+不确定条件查询+分页
来源:互联网 发布:知乎怎么更新答案 编辑:程序博客网 时间:2024/05/22 09:21
在dbutils中处理事务
事务是指用户的一次操作。这一次操作有可能是一个表,也有可能是多个表,也有可能是对一个表的多次操作。
只要是:
1:对数据数据库进行多次操作。
2:多个表,还是一个表的多次update,detelete,inset都应该开始一个事务。
如果仅做一次与数据库的操作。即只执行一个sql语句,则可以不用开事务。
如果仅做select 则没有必要开事务。
事务是指用户的一次操作,这一次操作,只能有一个结果,要不然就全部成功,要不然就全部不成功。
如果需要在dbutils中管理事务。则用户必须自己传递并控制connection。
只要是:
1:对数据数据库进行多次操作。
2:多个表,还是一个表的多次update,detelete,inset都应该开始一个事务。
如果仅做一次与数据库的操作。即只执行一个sql语句,则可以不用开事务。
如果仅做select 则没有必要开事务。
事务是指用户的一次操作,这一次操作,只能有一个结果,要不然就全部成功,要不然就全部不成功。
如果需要在dbutils中管理事务。则用户必须自己传递并控制connection。
@Testpublic 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();}}
不确定条件的查询
// 不确定条件的查询@Testpublic 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);}}
分页
有一个limit关键字可以查询指定的行数:
Limit start,limit
Start :从第几行以后开始的行号。>start
Limit :一共需要多少行。
SELECT * FROM users LIMIT 10,10;
pageSize = 10;
计算确定数据表一共分几页:
101/pageSize=100/10=10页。
rows = select count(1) from users;
方法1:pageCount = rows/pageSize + (rows%pageSize==0?0:1);
方法2:pageCount = (rows+ (pageSize-1))/(pageSize);
Limit start,limit
Start :从第几行以后开始的行号。>start
Limit :一共需要多少行。
第一步:向usre表中写入100行数据
第二步:先在sqlyog中用select做一个分页的分析
SELECT * FROM users LIMIT 10,10;
第三步:分析一共显示多少页
自己确定每一页显示几行:10行pageSize = 10;
计算确定数据表一共分几页:
101/pageSize=100/10=10页。
rows = select count(1) from users;
方法1:pageCount = rows/pageSize + (rows%pageSize==0?0:1);
方法2:pageCount = (rows+ (pageSize-1))/(pageSize);
计算确定数据表一共分几页:101/pageSize=100/10=10页。rows = select count(1) from users;方法1:pageCount = rows/pageSize + (rows%pageSize==0?0:1); 方法2:pageCount = (rows+ (pageSize-1))/(pageSize);public void doGet(HttpServletRequest req, HttpServletResponse response)throws ServletException, IOException {//第一步:定义每页显示多少行int pageSize = 10;try{//第二步:获取数据表中有多少行QueryRunner run = new QueryRunner(DataSourceUtils.getDatasSource());String sql = "select count(*) from users";Object o = run.query(sql,new ScalarHandler());int rows = Integer.parseInt(o.toString());//第三步:计算一共分多少页int pageCount= rows/pageSize+(rows%pageSize==0?0:1);//将页数放到reqreq.setAttribute("pageCount",pageCount);}catch(Exception e){e.printStackTrace();}//转发到req.getRequestDispatcher("/jsps/show.jsp").forward(req, response);}
第四步:分析limit的开始位置
用户请求的面码
start
算法:
1
Limit 0,pageSize
Start
= (currentPage-1)*pageSize
2
Limit 10,pageSize
3
Limit 20,pageSize
第五步:对分页以后页码再分页
每个页面,最多显示10个页码
pageNum=10;
startNo
endNo
当前页码
页码范围
算法
1
1~10
If(currentPage<=pageNum/2)
1~10
2
3
4
5
6
2~11
6-4=2 =
6-(pageNum/2-1)=2 = startNo
endNo = startNo+(pageNum-1)=11
7
3~12
8
4~13
9
10
11
11-4 = 7
endNo = 7+9=16
endNo = 11;
startNo = 2 = endNo-(pageNum-1);
0 0
- 数据库连接池-DBUtils高级 事务+不确定条件查询+分页
- JDBC、事务、数据库连接池、DBUtils
- 不确定条件查询
- JDBC第四篇--【数据库连接池、DbUtils框架、分页】
- dbutils通用类,dbutils分页查询
- Python数据库连接池DBUtils
- 数据库连接池-DBUtils
- 数据库连接池工具---DbUtils
- Python数据库连接池DBUtils
- JDBC MYSQL中多个不确定条件查询
- 分页&条件查询分页
- web day18 事务,数据库连接池(DBCP,C3P0,),DBUtils,装饰模式,Tomcat配置JNDI资源,ThreadLocal,BaseServlet
- Python数据库连接池 《DBUtils用户指南》
- Python的数据库连接池DBUtils
- DBUtils之PooledDB数据库连接池
- 数据库连接池,DBUtils,PreparedStatement介绍
- Python数据库连接池DBUtils.PooledDB
- Python数据库连接池DBUtils.PooledDB
- Jquery 实现 图片延迟加载
- JAVA数据源连接方式汇总
- 系统分析之五 过程建模
- 图 深度优先遍历 广度优先遍历 非递归遍历 图解算法过程
- 日志组件XLog
- 数据库连接池-DBUtils高级 事务+不确定条件查询+分页
- jni_1th
- 接管他人写一半的任务体验
- TCP连接建立系列 — 服务端接收ACK段(一)
- FSG2.0(1)------内存镜像法
- FSG2.0(2)------手动查找IAT
- Navicat备份mysql数据库的方法
- WPF DataGrid的创建,前台代码构建,后台代码构建
- cocos图片描边的方法