JDBC由浅入深解析(C3P0)(DBUtils)
1.自定义链接池
首先是最不常用的连接池,但对于新手理解JDBC很友好的
只需要在项目导入java和数据库链接的jar包即可,导入之后:
1.首先定义一个文件夹,格式为XXX.properties
在文件夹里写入连接信息,如:
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/exercise
username=root
password=***
(exercise是当前数据库名称,剩下的除了账号密码之外都是确定的值)
2.写一个java工具类,存放链接信息(这样以后直接调用这个类,省时省力)
这个类中一点要写一个链接方法,一个释放方法,用以节约资源
import java.sql.*;
import java.util.ResourceBundle;public class DBLink {private static String driver;private static String url ;private static String username;private static String password;static {ResourceBundle bundle = ResourceBundle.getBundle("db"); //Resource 类是读取那个文件的类(这里db是我.properties后缀文件的名字)driver= bundle.getString("driver");url=bundle.getString("url");username=bundle.getString("username");password=bundle.getString("password");}/*** 获得连接信息* @return*/public static Connection getConnection(){Connection conn = null;try {Class.forName(driver);conn = DriverManager.getConnection(url,username,password);} catch (Exception e) {e.printStackTrace();}return conn;}/*** 释放资源* @param conn* @param pstmt* @param rs*/public static void release(Connection conn, PreparedStatement pstmt, ResultSet rs){if(rs!=null) {try {conn.close();} catch (SQLException e) {e.printStackTrace();}}if(pstmt!=null) {try {pstmt.close();} catch (SQLException e) {e.printStackTrace();}}if(conn!=null) {try {conn.close();} catch (SQLException e) {e.printStackTrace();}}}
}
2.C3P0连接池
常用的连接池有C3P0,DBCP等连接池,由于我用C3P0所以对DBCP不做介绍
首先还是导入c3p0的jar包,导入之后:
1.需要写一个xml配置文件,模板像这样:
<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config><default-config><property name="driverClass">com.mysql.jdbc.Driver</property><property name="jdbcUrl">jdbc:mysql:///exercise</property><property name="user">root</property><property name="password">**</property><property name="initialPoolSize">5</property><property name="maxPoolSize">20</property></default-config><named-config name="MyDB"><property name="driverClass">com.mysql.jdbc.Driver</property><property name="jdbcUrl">jdbc:mysql:///exercise</property><property name="user">root</property><property name="password">**Q</property></named-config></c3p0-config>
解析:后面调用的话可以通过自拟名字(“MyDB”)来调用,如果不加参数的话则通过默认寻找
ComboPooledDataSource dataSource = new ComboPooledDataSource("MyDB");
在编写一个java类,用以连接SQL
import com.mchange.v2.c3p0.ComboPooledDataSource;import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;public class C3P0Utils {private static ComboPooledDataSource dataSource = new ComboPooledDataSource("MyDB");public static DataSource getDataSource(){return dataSource;}public static Connection getConnection(){try {return dataSource.getConnection();} catch (SQLException e) {throw new RuntimeException();}}
}
然后进行测试:
public class MyTest {@Testpublic void Text(){Connection conn = null;PreparedStatement pstmt = null;try{conn = C3P0Utils.getConnection();String sql = "insert into employee values(?,?,?,?,?);";pstmt = conn.prepareStatement(sql);pstmt.setInt(1,1006);pstmt.setString(2,"Zhuge");pstmt.setString(3,"m");pstmt.setString(4,"Social");pstmt.setInt(5,4564);int rows = pstmt.executeUpdate();if(rows>0)System.out.println("succeed");elseSystem.out.println("defeat");}catch (Exception e){e.printStackTrace();}finally {DBLink.release(conn,pstmt,null);}
得到结果,返回成功:
3.DBUtils
DBUtils是自己练习是最方便的工具,其好用之处在于不用因为一点点修改而反复重写一个方法。
在使用时首先还是要导包,之后:
1.编写一个数据表类,要把这个类放在domain包下,这是约定。
2.数据表类的具体实现方法是:编写各个字段的信息,设为private来保护;设置一个无参构造方法;每个字段信息添加set和get方法;
3.编写test类:
//QueryRunner是DBUtils的核心
public void testQueryAllByMap(){try {QueryRunner qr = new QueryRunner((C3P0Utils.getDataSource()));//通过c3p0获取连接String sql = "select * from employee";List<Map<String,Object>> employees = qr.query(sql,new MapListHandler());//核心执行方法for (Map<String,Object> map:employees){System.out.println(map);}} catch (SQLException e) {e.printStackTrace();}}
qr.query()方法有多个重载,第一个参数是sql语句没差,但第二个表示用什么来接受返回值(注意有holder),(现在不是很懂,但要我来想的话有点类似于.net的ref参数)
此例中是用List(Map<>)来接受,这样就可以在程序中使用了
以下是常用的Handler:
JDBC由浅入深解析(C3P0)(DBUtils)相关推荐
- JDBC连接池和DBUtils
本节内容: JDBC连接池 DBUtils 一.JDBC连接池 实际开发中"获得连接"或"释放资源"是非常消耗系统资源的两个过程,为了解决此类性能问题,通常情况 ...
- JDBC秒变C3P0连接池——再加连接解耦
从JDBC连接到C3P0数据库连接池 在Java开发中,使用JDBC操作数据库的四个步骤如下: ①加载数据库驱动程序(Class.forName("数据库驱动类");) ...
- maven依赖c3p0_java – Maven无法解析C3P0依赖
我正在尝试使用以下POM文件构建,并且Maven无法解析C3P0依赖项 的pom.xml xmlns:xsi="http://www.w3.org/2001/XMLSchema-instan ...
- 【oracle】oracle jdbc驱动与c3p0的一个兼容问题
环境 oracle 12c 12.1.0.1 oracle jdbc7 12.1.0.1 c3p0 0.9.1.1 tomcat 7.0.55 jdk 1.7 问题 java.lang.Runtime ...
- JDBC连接池C3P0,druid
数据库连接池 什么是数据库连接池: 将多个连接对象放在一个类似于list的集合中,做到需要用到连接的时候就去池子中获取Connection连接对象,不用就放回池子中,不用频繁的获取连接池,关闭连接池. ...
- 小汤学编程之JDBC(二)——dbutils框架和DataSource连接池
一.dbutils框架 1.介绍 2.新增/删除/修改 3.各种查询 4.扩展:Bean中属性名与数据表列名的映射 二.DataSource连接池 1.获取DataSource ...
- JDBC连接池c3p0连接异常和日志处理
1.c3p0连接数据库由于时区没限制报出的错误 代码: package C3P0;import com.mchange.v2.c3p0.ComboPooledDataSource; import co ...
- 【JDBC】使用c3p0数据库连接池的各种报错警告
使用c3p0数据库连接池的各种报错警告 使用c3p0数据库连接池的时候,先导入了三个jar包在lib 文件夹中, c3p0-0.9.5.2.jar mchange-commons-java-0.2.3 ...
- 从JDBC到手撸极简版Mybaties(3)JDBC自动解析配置文件
简介 开门见山的说,java中有一个类叫Properties.该类主要用于读取Java的配置文件,不同的编程语言有自己所支持的配置文件,配置文件中很多变量是经常改变的,为了方便用户的配置,能让用户够脱 ...
最新文章
- 深copy 和 浅copy 解析
- linux 错误日志 __ratelimit: XXX callbacks suppressed 原因
- 相对网站根目录寻址 vs 相对当前目录寻址
- Linux常用C函数-接口处理篇(网络通信函数)
- 4键电子手表说明书_数字S1系统7寸门口主机操作说明书
- python是什么专业学的-自学Python有什么好方法吗?老男孩专业Python培训
- 递归与二叉树_leetcode235
- 【转】64位win7环境eclipse集成svn后出现Failed to load JavaHL Library的解决办法
- cad快捷栏怎么调出来_如何显示CAD的工具栏?CAD如何调出工具栏
- 树莓派默认登录账号密码
- uart通信协议详解
- 如何用cmd打开管理员模式
- python-pcl简易文档(不包含自建函数与pcl_grabber包)
- 2000亿元贴息贷款,医疗系统上云,解锁医护协同新玩法
- 【linux】ubuntu系统硬盘操作:创建删除磁盘分区,更改磁盘分区类型,删除磁盘签名
- 概念模型,逻辑模型,物理模型
- 程序员一直在寻找的日程安排工具
- pytorch并行处理详解(多GPU,环境变量)
- android横向瀑布流布局,GitHub - wikison/android_waterfall: Android版的瀑布流布局
- PC电脑安装苹果操作系统MAC OS X【图文教程】