dbcp连接池的一些方法
创建连接
// 简写版: Connection conn =null;
Statement st =null;
conn = DBCP.getConnection();
st=conn.createStatement();
1.批处理 addBatch()
可以将多个操作数据库的字符串集中处理
String sql1="select ..... ";
String sql2="select ..... ";
..............
st.addBatch(sql1);
st.addBatch(sql2);
..............
st.executeBatch(); //集中处理
st.clearBatch();// 最好及时清理,否则字符串仍留在addBatch里面
2.事物管理 setAutoCommit(boolean);
某些逻辑必须在一个是事务完成:通过事务管理可以让多个逻辑在一个事务完成。
事物特性: ACID
Atomicty 原子性:事务必须是原子工作单元,数据的修改要么完全执行,要么全都不执行。
Consistency 一致性: 事务完成时,必须所有数据都保持一致的状态。
Isolation 隔离性 :由并发事务所作修改必须与其他并发事务所作修改隔离。
Durability 持久性: 事务完成后,它对系统的影响是永久性的。
conn.setAutoCommit( false ); //关闭自动提交,默认是true
st.executeUpdate(sql1);
st.executeUpdate(sql2);
conn.commit(); //手动提交,作用是操作sql1和sql2都执行,或者都不执行
3.preparedStatement :预编译的,可以有效防止注入式攻击
String sql="select * from emp_xx where ename = upper(?) and sal > ?";
Connection conn=DBCP.getConnection();
PreparedStatement p=conn.prepareStatement(sql);
p.setString(1, "scott");
p.setDouble(2, 1000.0);
ResultSet rs=p.executeQuery();
4.结果集
@Test
public void test8(){
String sql ="select * from emp_xx";
Connection conn=null;
ResultSet rs=null;
try {
conn=DBCP.getConnection();
PreparedStatement ps = conn.prepareStatement(sql);
rs=ps.executeQuery();
ResultSetMetaData meta =rs.getMetaData(); //获取元数据集
int number= meta.getColumnCount();//获取结果集里的列的数量
System.out.println(meta.getColumnTypeName(1));//获取某一列的类型 列的序号从1开始数
for (int i = 1; i <=number; i++) {
String columName=meta.getColumnName(i);//遍历获取结果集里的所有列名
System.out.println(columName);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
5.可滚动结果集
@Test
public void test9(){
String sql ="select ename,sal from emp_xx order by sal";
Connection conn=null;
ResultSet rs=null;
try {
conn=DBCP.getConnection();
//如果要创建可滚动结果集,statement 或者prepareStatement 创建有所不同:
// Statement stmt = conn.createStatement(type,concurrney);
// PreparedStatement ps = conn.prepareStatement(sql,type,concurrney);
/**
* 其中 type 取值:
* TYPE_FORWARD_ONLY: 默认,只能向下读取
* TYPE_SCROLL_INSENSTIVE : 可滚动,不感知数据变化
* TYPE_SCROLL_SENSTIVE :可滚动,感知数据变化
* 其中 concurrency:
* CONCUR_READ_ONLY: 只读,不能更新
* CONCUR_UPDATABLE: 可以更新的结果集
*/
Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_UPDATABLE);
rs=stmt.executeQuery(sql);
/**
* 移动指针的常用方法 :
* first :指针移动到第一条
* last :指针移动到最后一条
* beforeFirst:
* afterLast:
* isFirst: 判断是否指向第一条
* isLast:是否是最后一条
* isbeforeFirst:
* isafterLast:
* relative :移动到当前指针的相对位置
* next :移动到下一条
* previous:移动到前一条
* absolute:移动到绝对位置
*/
//更新结果集数据:
rs.absolute(3);// 指针移到第3条记录
rs.updateDouble(2, 2000);//更新第二列数据 变成1555
// rs.updateRow();//更新数据源数据
rs.first();
while(rs.next()){
System.out.print(rs.getString("ename")+" ");
System.out.println(rs.getString("sal"));
}
} catch (SQLException e) {
e.printStackTrace();
}finally {
if(conn!=null){
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
dbcp连接池的一些方法的更多相关文章
- 采用DBCP连接池技术管理连接
DBCP的使用步骤步骤一:导包,使用第三方的道具,必须导入相应的jar包. 一般需要导入两个jar包: -commons-dbcp-1.x.jar包 -commons-pool-1.x.x.jar包 ...
- DBCP连接池介绍
DBCP连接池介绍 ----------------------------- 目前 DBCP 有两个版本分别是 1.3 和 1.4. DBCP 1.3 版本需要运行于 JDK 1.4-1.5 ,支持 ...
- DBCP连接池原理分析及配置用法
DBCP连接池介绍 ----------------------------- 目前 DBCP 有两个版本分别是 1.3 和 1.4. DBCP 1.3 版本需要运行于 JDK 1.4-1.5 ,支持 ...
- JNDI和在tomcat中配置DBCP连接池 元数据的使用 DBUtils框架的使用 多表操作
1 JNDI和在tomcat中配置DBCP连接池 JNDI(Java Naming and Directory Interface),Java命名和目录接口,它对应于J2SE中的javax.namin ...
- 【转】DBCP连接池原理分析
---------------------------- 目前 DBCP 有两个版本分别是 1.3 和 1.4. DBCP 1.3 版本需要运行于 JDK 1.4-1.5 ,支持 JDBC 3. DB ...
- DBCP连接池的使用
1.新建工程 2.导入commons-dbcp commons-logging commons-pool这三个包 3.创建dbcpconfig.properties的文件 实例如下 #连接设置 dri ...
- 使用c3p0与DBCP连接池,造成的MySql 8小时问题解决方案
转自:http://blog.csdn.net/wangfayinn/article/details/24623575 c3p0数据库连接池mysql8小时 目录(?)[-] 基本问题解决 项目环境 ...
- DBCP 连接池
DBCP数据源 DBCP 是 Apache 软件基金组织下的开源连接池实现 导入maven包: <!-- dbcp连接池 --> <dependency> <groupI ...
- Java学习笔记50(DBCP连接池)
实际开发中,连接数据库是十分消耗资源的操作,但是,我们又需要频繁地连接数据库 这时候,为了提高效率,这里就会采用连接池技术: 连接池地通俗理解: 一个池里面放入很多的连接,需要哪一个取出来用即可,用完 ...
随机推荐
- EventLoop
文章资料来自 Node.js 事件循环机制 JS灵魂之问(下) EventLoop的中国名字叫事件循环,这个玩意真的是高深莫测,一般开发都用不到,代码只管写就行,虽然不用懂,但是面试就是要问,这对我这 ...
- ORACLE SQL DEVELOPER配置
1.首先,sql developer是用java开发的 所以闲进行java配置. 如果首次打开提醒需要配置java环境 那就选择对应的目录即可. 如果不提示 那就忽略以上内容. 首次打开 会提示 是否 ...
- 在 linux 中遇到 OSError: inotify watch limit reached 错误
检查系统当前限制,默认应该是 8192: cat /proc/sys/fs/inotify/max_user_watches 可根据需要调整系统限制,但是目前还不知道如何查看每个进程对 watch 的 ...
- Robot set variable if
${strid} Set Variable If '${row}' =='2' LFFD_TANK_RAMP ... '${row}' =='3' LFFD_TANK_LANDING
- Linux添加虚拟内存 && 修改Linux系统语言
Linux添加虚拟内存 首先执行free -h查看内存状况: total used free shared buff/cache available Mem: 1.8G 570M 76M 8.4M 1 ...
- 51nod 1439:互质对 容斥原理
1439 互质对 题目来源: CodeForces 基准时间限制:2 秒 空间限制:131072 KB 分值: 160 难度:6级算法题 收藏 取消关注 有n个数字,a[1],a[2],-,a[n ...
- Linux 下 zip 文件解压乱码如何解决
作者:Latm Ake链接:https://www.zhihu.com/question/20523036/answer/35225920来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业 ...
- SQL中行转列(PIVOT)与列转行(UNPIVOT)
一.行转列 1.测试数据准备 CREATE TABLE [StudentScores] ( ), --学生姓名 ), --科目 [Score] FLOAT, --成绩 ) 执行结果: 2.行转列sql ...
- FFT各种模板
丑陋敬请谅解: 求两列数的卷积: 递归版: #include <stdio.h> #include <algorithm> #include <math.h> us ...
- codeforces 594
D 给你一个长度为n的括号序列,然后你可以选择交换两个位置,你需要使得能够变成 合法括号序列的起点最多. 题解 人尽皆知的东西:合法的括号序列是,令'('为1,')'为-1,那么前缀和需要>=0 ...