JDBC连接池以及动态SQL处理
复习一下:
1.先创建一个properties配置文件
ClasssName=oracle.jdbc.driver.OracleDriver
url=jdbc:oracle:thin:@服务器IP:端口号:名称
user=设置的用户名
password=设置的密码
maxActive=最大连接数量
maxWait=最大等待时间
2.加载读取配置文件
package day02;
import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.sql.Connection; import java.sql.DriverManager; import java.util.Properties;
import org.apache.commons.dbcp.BasicDataSource;
/** * 该类用于管理数据库连接 * @author adminitartor * */ public class DBUtil { //数据库连接池 private static BasicDataSource ds;
static{
Properties prop = new Properties();
try {
prop.load(new FileInputStream("config.properties"));
String className = prop.getProperty("classname");
String url = prop.getProperty("url");
String username = prop.getProperty("username");
String password = prop.getProperty("password");
int maxActive = Integer.parseInt(prop.getProperty("maxactive"));
int maxWait = Integer.parseInt(prop.getProperty("maxwait"));
//初始化连接池
ds = new BasicDataSource();
//将JDBC建立连接所需要的信息设置到连接池中
//Class.forName(...)
ds.setDriverClassName(className);
//DriverManager.getConnection(...)
ds.setUrl(url);
ds.setUsername(username);
ds.setPassword(password);
//设置连接池最大连接数
ds.setMaxActive(maxActive);
//设置最大等待时间
ds.setMaxWait(maxWait);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 获取数据库连接
* @return
*/
public static Connection getConnection()
throws Exception{
return ds.getConnection();
}
/**
* 关闭给定的连接
* @param conn
*/
public static void closeConnection(Connection conn){
try {
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
3.处理动态的SQL
java.sql.PreparedStatement 该接口是Statement的子接口。设计目的是为了执行动态SQL语句。这样的SQL称为预编译SQL,这种SQL语句会将动态信息以"?"代替,先进行占位。然后将该SQL发送给数据库生成执行计划。然后当需要执行该SQL时,只需要将?需要的实际数据再次传递给数据库即可。
* 1:由于先将SQL语句发送给数据库,并生成了执行计划(语义已经确定),就不存在拼接SQL导致改变SQL语义(SQL注入攻击)的问题了。
* 2:由于执行计划已经生成,当大批量执行SQL时每次只需要将?表示的实际值传入,那么数据库会重用执行计划,这就减少了服务器的压力。
Connection conn = null;
try {
conn = DBUtil.getConnection();
//使用PreparedStatement
String sql = "INSERT INTO userinfo "
+ "(id,username,password,email,nickname,account) "
+ "VALUES "
+ "(seq_userinfo_id.NEXTVAL,?,?,?,?,?)";
PreparedStatement ps
= conn.prepareStatement(sql);
ps.setString(1, "liucan");
ps.setString(2, "123456");
ps.setString(3, "liu@qq.com");
ps.setString(4, "hello");
ps.setDouble(5, 5000.0);
int d = ps.executeUpdate();
if(d>0){
System.out.println("插入成功!");
}
} catch (Exception e) {
e.printStackTrace();
} finally{
if(conn != null){
DBUtil.closeConnection(conn);
}
}
}`
JDBC连接池以及动态SQL处理的更多相关文章
- JDBC连接池。。。转载
1. 引言 近年来,随着Internet/Intranet建网技术的飞速发展和在世界范围内的迅速普及,计算机 应用程序已从传统的桌面应用转到Web应用.基于B/S(Browser/Server)架 ...
- Spring+SpringMVC+MyBatis+easyUI整合优化篇(九)数据层优化-jdbc连接池简述、druid简介
日常啰嗦 终于回到既定轨道上了,这一篇讲讲数据库连接池的相关知识,线程池以后有机会再结合项目单独写篇文章(自己给自己挖坑,不知道什么时候能填上),从这一篇文章开始到本阶段结束的文章都会围绕数据库和da ...
- Tomcat 的 JDBC 连接池
JDBC 连接池 org.apache.tomcat.jdbc.pool 是 Apache Commons DBCP 连接池的一种替换或备选方案. 那究竟为何需要一个新的连接池? 原因如下: Comm ...
- JDBC连接池和DBUtils
本节内容: JDBC连接池 DBUtils 一.JDBC连接池 实际开发中“获得连接”或“释放资源”是非常消耗系统资源的两个过程,为了解决此类性能问题,通常情况我们采取连接池技术,来共享连接Conne ...
- JDBC连接池&DBUtils使用
使用连接池改造JDBC的工具类: 1.1.1 需求: 传统JDBC的操作,对连接的对象销毁不是特别好.每次创建和销毁连接都是需要花费时间.可以使用连接池优化的程序. * 在程序开始的 ...
- 数据层优化-jdbc连接池简述、druid简介
终于回到既定轨道上了,这一篇讲讲数据库连接池的相关知识,线程池以后有机会再结合项目单独写篇文章(自己给自己挖坑,不知道什么时候能填上),从这一篇文章开始到本阶段结束的文章都会围绕数据库和dao层的优化 ...
- JDBC连接池-C池3P0连接
JDBC连接池-C3P0连接 c3p0连接池的学习英语好的看英文原版 c3p0 - JDBC3 Connection and Statement Pooling 使用c3p0连接池 三种方 ...
- JDBC连接池(三)DBCP连接池
JDBC连接池(三)DBCP连接池 在前面的随笔中提到 了 1.JDBC自定义连接池 2. C3P0连接池 今天将介绍DBCP连接池 第一步要导入jar包 (注意:mysql和mysql 驱动 ...
- JDBC连接池-自定义连接池
JDBC连接池 java JDBC连接中用到Connection 在每次对数据进行增删查改 都要 开启 .关闭 ,在实例开发项目中 ,浪费了很大的资源 ,以下是之前连接JDBC的案例 pack ...
随机推荐
- iw命令
iwconfig这个老工具已不推荐使用,iw支持大多新的设备并已被加入内核 iw help 查看帮助 iw dev wlan0 scan ...
- 《A First Course in Probability》-chape4-离散型随机变量-几种典型分布列
超几何分布: 超几何分布基于这样一个模型,一个坛子中有N个球,其中m个白球,N-m个黑球,从中随机取n(不放回),令X表示取出来的白球数,那么: 我们称随机变量X满足参数为(n,m,M)的超几何分布. ...
- Centos6.4 xen编译部署
ruiy亲测成功,现将步骤总结如下,一步步往下将可 原文链接 http://blog.csdn.net/liyakun1992421/article/details/9071061 xen 与 kvm ...
- iOS开发之状态栏UIStatusBar图标操作
NSArray *subIcons = [[[[UIApplication sharedApplication] valueForKeyPath:@"statusBar"] val ...
- ASP.NET- web.config配置用户出错页
很简单,刚好用到,收藏 RemoteOnly是自定义用户错误,改成On,将所有错误都不让用户看见 每当用户访问错误页面时,会出现不友好的404错误,所以为了防止这种不友好,我们在web.config中 ...
- PAT 1017. Queueing at Bank
Suppose a bank has K windows open for service. There is a yellow line in front of the windows which ...
- 20169210《Linux内核原理与分析》第七周作业
第一部分:实验 首先还是网易云课堂的实验内容,扒开系统调用的三层皮(下),分为两部分: 1.给MenuOS增加time和time-asm命令 2.系统调用在内核代码中的处理过程 给MenuOS增加ti ...
- 安装MYSQL 出现Error 1045 access denied 的解决方法
操作系统:WINDOWS10 系统 数据库版本:mysql 5.x 提示:access denied for user 'root'@'localhost' using password yes/no ...
- 清理300多台MySQL数据库的过期binlog日志
早晨睡梦中,被 on-call了,说磁盘报警,赶紧起来打开email,收到上百封email报警,数据库磁盘不够了,查询了原因 [xxx@xxxx cacti]$ ssh xxxx "df - ...
- 插入ts以及判断列是否存在(支持多数据库)
1:增加ts.dr字段,先判断ts.dr字段是否存在,其中ts字段插入的是日期,默认值为当前插入的时间,dr字段是数值型,默认值为0 * 增加ts/dr字段 * * @param tableList ...