Druid不只是一个数据库链接池,还包含一个ProxyDriver、一系列内置的JDBC组件库、一个SQL Parser。支持全部JDBC兼容的数据库,包括Oracle、MySql、Derby、Postgresql、SQL Server、H2等。html
必定要导入jar架包。要配置好文件,若是不配置文件,记得在程序中自行添加。java
driverClassName=com.mysql.jdbc.Driver url=jdbc:mysql://MySQL地址/数据库名 username=用户名 password=密码 initialSize=初始化链接数 maxActive=最大链接数 maxWait=最大等待时间(毫秒为单位)
举例以下:mysql
package my.view.datasource.druid; import com.alibaba.druid.pool.DruidDataSourceFactory; import javax.sql.DataSource; import java.io.InputStream; import java.sql.Connection; import java.util.Properties; public class DruidDemo { public static void main(String[] args) throws Exception { // 获取加载配置文件的对象 Properties properties = new Properties(); // 获取类的类加载器 ClassLoader classLoader = DruidDemo.class.getClassLoader(); // 获取druid-1.0.9.properties配置文件资源输入流 InputStream resourceAsStream = classLoader.getResourceAsStream("druid-1.0.9.properties"); // 加载配置文件 properties.load(resourceAsStream); // 获取链接池对象 DataSource dataSource = DruidDataSourceFactory.createDataSource(properties); // 获取数据库链接对象 Connection connection = dataSource.getConnection(); // 打印获取到的数据库链接对象地址值 System.out.println(connection); } }
在使用数据库链接池的时候,咱们不可能说每次都如上例中的状况本身写一遍吧。咱们能够自定义一个工具类,用来建立数据库链接池对象,这个时候,咱们乳沟想要建立数据库链接池对象,直接调用该工具类便可。sql
定义获取数据库链接池对象的方法数据库
/** * 数据库链接对象 */ private static DataSource dataSource; /* 获取数据库链接池对象 */ static { try { // 获取加载配置文件的对象 Properties properties = new Properties(); // 获取类的类加载器 ClassLoader classLoader = JdbcUtils.class.getClassLoader(); // 获取druid-1.0.9.properties配置文件资源输入流 InputStream resourceAsStream = classLoader.getResourceAsStream("druid-1.0.9.properties"); // 加载配置文件 properties.load(resourceAsStream); // 获取链接池对象 dataSource = DruidDataSourceFactory.createDataSource(properties); } catch (Exception e) { e.printStackTrace(); } } /** * 获取链接池对象 */ public static DataSource getDataSource() { return dataSource; }
定义获取数据库链接对象的方法工具
/** * 获取数据库链接对象 */ public static Connection getConnection() throws Exception { return dataSource.getConnection(); }
定义释放资源的方法测试
/** * 归还链接 * @param t 要被归还到熟便可链接池对象的数据库链接对象 * @param <T> 数据库链接对象的类型 */ public static <T> void releaseResources (T t){ if(t != null){ try { // 利用反射,获取class对象 Class<?> aClass = t.getClass(); // 获取class对象中的方法对象 Method close = aClass.getMethod("close"); // 执行方法 close.invoke(t); } catch (Exception e) { e.printStackTrace(); } } }
该工具类总的代码:ui
package my.view.utils; import com.alibaba.druid.pool.DruidDataSourceFactory; import javax.sql.DataSource; import java.io.InputStream; import java.lang.reflect.Method; import java.sql.Connection; import java.util.Properties; public class JdbcUtils { /** * 数据库链接对象 */ private static DataSource dataSource; /* 获取数据库链接池对象 */ static { try { // 获取加载配置文件的对象 Properties properties = new Properties(); // 获取类的类加载器 ClassLoader classLoader = JdbcUtils.class.getClassLoader(); // 获取druid-1.0.9.properties配置文件资源输入流 InputStream resourceAsStream = classLoader.getResourceAsStream("druid-1.0.9.properties"); // 加载配置文件 properties.load(resourceAsStream); // 获取链接池对象 dataSource = DruidDataSourceFactory.createDataSource(properties); } catch (Exception e) { e.printStackTrace(); } } /** * 获取链接池对象 */ public static DataSource getDataSource() { return dataSource; } /** * 获取数据库链接对象 */ public static Connection getConnection() throws Exception { return dataSource.getConnection(); } /** * 归还链接 * @param t 要被归还到熟便可链接池对象的数据库链接对象 * @param <T> 数据库链接对象的类型 */ public static <T> void releaseResources (T t){ if(t != null){ try { // 利用反射,获取class对象 Class<?> aClass = t.getClass(); // 获取class对象中的方法对象 Method close = aClass.getMethod("close"); // 执行方法 close.invoke(t); } catch (Exception e) { e.printStackTrace(); } } } }
有以下一个数据表格url
CREATE TABLE account ( id INT PRIMARY KEY AUTO_INCREMENT, -- id NAME VARCHAR(10), -- 名字 balance DOUBLE -- 余额 ); INSERT INTO account (NAME, balance) VALUES ('LeeHua', 1000), ('Tom', 1000);
向该表格中插入一条数据,实现以下:spa
package my.view.datasource.druid; import my.view.utils.JdbcUtils; import javax.sql.DataSource; import java.sql.Connection; import java.sql.PreparedStatement; public class JdbcUtilsDemo { public static void main(String[] args) throws Exception{ // 获取数据库链接池对象 DataSource dataSource = JdbcUtils.getDataSource(); // 从数据库链接池对象中获取数据库链接对象 Connection connection = dataSource.getConnection(); // 预约义定义SQL语句 String sql = "INSERT INTO account (NAME, balance) VALUES (?, ?);"; // 获取执行预约义SQL语句对象 PreparedStatement preparedStatement = connection.prepareStatement(sql); // 给?赋值 preparedStatement.setString(1, "WanWu"); preparedStatement.setInt(2, 2000); // 执行预编译好的SQL语句 preparedStatement.executeUpdate(); // 释放资源:PreparedStatement JdbcUtils.releaseResources(preparedStatement); // 归还链接 JdbcUtils.releaseResources(connection); // 释放资源:数据库链接池 JdbcUtils.releaseResources(dataSource); } }
运行程序,而后查询一下表记录:
能够看到插入了一条数据,说明测试成功。