Druid连接技术
1.导入jar包
druid-1.0.9.jar
导入数据库驱动jar包
2.定义配置文件
properties形式
可以叫任意名称,可以放置在任意目录下。(意味着不能自动加载,需要手动导入)
3.加载配置文件 properties
4.获取数据库连接池对象:通过工厂类来获取
5.获取连接:getConnection
配置文件
jar包
文档
源码
基本使用
package cn.itcust.datasource.druid; import com.alibaba.druid.pool.DruidDataSourceFactory; import javax.sql.DataSource;
import java.io.InputStream;
import java.sql.Connection;
import java.util.Properties; /**
* Druid演示
*/
public class DruidDemo1 {
public static void main(String[] args) throws Exception {
//1.导如jar包
//2.定义配置文件 //3.加载配置文件
// 创建配置文件的对象
Properties pro = new Properties(); //用getClassLoader().getResourceAsStream直接返回字节输入流
InputStream is = DruidDemo1.class.getClassLoader().getResourceAsStream("druid.properties"); //用load加载文件,并且还会把属性值装载到集合
pro.load(is); //4.获取连接池对象
DataSource ds = DruidDataSourceFactory.createDataSource(pro); //5.获取数据库连接
Connection conn = ds.getConnection(); System.out.println(conn);
}
}
package cn.itcust.datasource.druid; import cn.itcust.datasource.utils.JDBCUtils; import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException; public class DruidDemo2 {
public static void main(String[] args) {
/**
* 完成添加操作
* */
Connection conn = null;
PreparedStatement pstmt = null;
try {
//1.获取连接对象
conn = JDBCUtils.getConnection();
//2.定义SQL
String sql = "insert into user values(null,?,?)";
//3.获取pstmt对象
pstmt = conn.prepareStatement(sql);
//给问号赋值
pstmt.setString(1, "dawang");
pstmt.setString(2, "789");
//4.执行SQL
int count = pstmt.executeUpdate();
System.out.println(count);
} catch (SQLException e) {
e.printStackTrace();
}finally {
//释放资源
JDBCUtils.close(pstmt,conn);
}
}
}
定义工具类,简化操作
原因:连接池只有需要一个
不定义就会非常麻烦
1.定义一个工具类 JDBCUtils
2.提供静态代码块,加载配置文件,初始化连接池对象
3.提供方法
1.获取连接方法:通过数据库连接池来获取连接对象
2.释放资源
3.获取连接池的方法(有的工具类、小框架里,只需要连接池不需要连接对象,会自己调用连接池的方法)
package cn.itcust.datasource.utils; import com.alibaba.druid.pool.DruidDataSourceFactory; import javax.sql.DataSource;
import java.io.IOException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties; /**
* Druid连接池的工具类
*/
public class JDBCUtils {
//定义一个成员变量 Datasoutce
private static DataSource ds; //初始化,赋值
static {
try {
//1.加载配置文件,先创建配置文件对象
Properties pro = new Properties();
//2.通过load方法加载
pro.load(JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties"));
//3.获取连接池
ds = DruidDataSourceFactory.createDataSource(pro);
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
} /**
* 获取连接的方法
* 异常抛出去为了能让用户看到,出了问题无法连接
* */
public static Connection getConnection() throws SQLException {
return ds.getConnection();
} /**
* 释放资源,处理掉,视为了方法更加简单
* */
public static void close(Statement stmt, Connection conn){
if (stmt != null){
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (conn != null){
try {
conn.close();//归还数据库连接
} catch (SQLException e) {
e.printStackTrace();
}
}
/**
* 还有一种简化的操作
* 两个参数也调用三个参数的方法,第一个不给值就行了
* */
// public static void close(null,stmt,conn);
} /**
* 重载
* */
public static void close(ResultSet rs, Statement stmt, Connection conn){
if (rs != null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (stmt != null){
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (conn != null){
try {
conn.close();//归还数据库连接
} catch (SQLException e) {
e.printStackTrace();
}
}
}
/**
*获取连接池的方法
* */
public static DataSource getDataSource(){
return ds;
}
}
配置文件
#注册驱动
driverClassName=com.mysql.jdbc.Driver #数据库连接地址
url=jdbc:mysql:///db4 #用户名
username=root #密码
password=ROOT #初始化连接数量
initialSize=5 #最大连接
maxActive=10 #最大等待时间
maxWait=3000
Druid连接技术的更多相关文章
- 【Java】java数据库连接中C3P、DBCP、Druid连接池的使用
使用JDBC的步骤:1.加载数据库驱动2.通过DriverManager获得数据库连接3.通过Connection获得Statement对象4.使用Statement执行SQL语句.5.操作结果集合6 ...
- Java开发笔记(一百五十一)Druid连接池的用法
C3P0连接池自诞生以来在Java Web领域反响甚好,业已成为hibenate框架推荐的连接池.谁知人红是非多,C3P0在大型应用场合中暴露了越来越多的局限性,包括但不限于下列几点:1.C3P0管理 ...
- Druid连接池(无框架)
关于连接池有不少技术可以用,例如c3p0,druid等等,因为druid有监控平台,性能在同类产品中算top0的.所以我采用的事druid连接池. 首先熟悉一个技术,我们要搞明白,为什么要用他, 他能 ...
- Spring整合JDBC和Druid连接池
我的博客名为黑客之谜,喜欢我的,或者喜欢未来的大神,点一波关注吧!顺便说一下,双十二快到了,祝大家双十二快乐,尽情的买买买~ 如果转载我的文章请标明出处和著名,谢谢配合. 我的博客地址为: https ...
- druid连接池获取不到连接的一种情况
数据源一开始配置: jdbc.initialSize=1jdbc.minIdle=1jdbc.maxActive=5 程序运行一段时间后,执行查询抛如下异常: exception=org.mybati ...
- 使用druid连接池的超时回收机制排查连接泄露问题
在工程中使用了druid连接池,运行一段时间后系统出现异常: Caused by: org.springframework.jdbc.CannotGetJdbcConnectionException: ...
- comet基于HTTP长连接技术(java即时通信,推送技术详解)
服务器推送技术的基础思想是将浏览器主动查询信息改为服务器主动发送信息,服务器发送一批数据,浏览器显示消息,同时保证与服务器的连接,当服务器需要再一次的发送数据,浏览器显示数据并保持连接. comet基 ...
- Druid连接池
Druid 连接池简介 Druid首先是一个数据库连接池.Druid是目前最好的数据库连接池,在功能.性能.扩展性方面,都超过其他数据库连接池,包括DBCP.C3P0.BoneCP.Proxool.J ...
- 使用MyBatis集成阿里巴巴druid连接池(不使用spring)
在工作中发现mybatis默认的连接池POOLED,运行时间长了会报莫名其妙的连接失败错误.因此采用阿里巴巴的Druid数据源(码云链接 ,中文文档链接). mybatis更多数据源参考博客链接 . ...
随机推荐
- Lua实现的八皇后问题
来自<Lua程序与设计>第二节- 八皇后问题 输出所有解的解法 书中提供的源代码,加注了自己的注释. N = 8 --[[ N为棋盘规模 a为一维数组,保存第i个皇后所在的列数 ]] -- ...
- Q函数和值函数
Q函数:奖励和 总奖励是在状态st采取行为at的奖励的期望和 值函数:奖励和 总奖励是在状态st下获得的奖励的期望和 下面是值函数另外的定义,在at行为下采取策略的Q函数的期望 是RL的目标函数,我理 ...
- C语言用两个栈实现队列(完整版)
队列是一种 先进先出(first in - first out, FIFO)的数据结构,队列中的元素都从后端(rear)入队(push),从前端(front)出队(pop).实现队列最直观的方法是用链 ...
- Spring cloud微服务安全实战 最新完整教程
课程资料获取链接:点击这里 采用流行的微服务架构开发,应用程序访问安全将会面临更多更复杂的挑战,尤其是开发者最关心的三大问题:认证授权.可用性.可视化.本课程从简单的API安全入手,过渡到复杂的微服务 ...
- 虚拟机安装_1_wincc_matriton
1,安装虚拟机: 选择:win7专业版64位ISO. 2,安装office2016 3,激活系统和OFFICE 4,安装winccV7.4 4.1 安装WINDOWS组件 MSMQ 4.1.1 安装I ...
- node post 大数据无响应超时
使用 express 框架,post 较大数据量(富文本,里面包含了图片base64数据,大约300k)时,node 无响应,把数据内容减少后能顺利提交. 是因为数据量大过body post 的限制导 ...
- egg 提交数据 防csrf 攻击 配置
await ctx.render('from',{csrf:this.ctx.csrf}); 或者 使用中间件 ctx.state.csrf = ctx.csrf;
- python 访问sql server数据库
访问数据库 cnxn = pyodbc.connect("Driver={SQL Server};Server=localhost;Database=用户名;uid=sa;pwd=密码&qu ...
- day36_tomcat丶servlet入门
web相关概念回顾 软件架构 常见的软件结构有下面2种 Client/Server 客户端/服务器端 简称C/S 特点:在用户本地有一个客户端程序,在远程有一个服务器端程序 如:QQ,迅雷...等等 ...
- es6简单小复习
Ecmascript 6 ECMAScript 6.0(以下简称ES6)是JavaScript语言的下一代标准,已经在2015年6月正式发布了. Ecmascript 是 JavaScript 语言的 ...