Java JDBC | 四种连接数据库的方法
2016-04-27 19:55
633 查看
四种连接数据库的方法(DriverManager、DataSource子类、DBCP、c3p0)
〇、连接步骤
//第一步,注册驱动程序
//com.MySQL.jdbc.Driver
Class.forName("数据库驱动的完整类名");
//第二步,获取一个数据库的连接
Connection conn = DriverManager.getConnection("连接URL","用户名","密码");
//第三步,创建一个会话
Statement stmt=conn.createStatement();
//第四步,执行SQL语句,增加,删除,修改记录
stmt.executeUpdate("增加,删除,修改记录的SQL语句");
//或者查询记录
ResultSet rs = stmt.executeQuery("查询记录的SQL语句");
//第五步,对查询的结果进行处理
while(rs.next()){
//对记录的操作
}
//第六步,关闭连接
rs.close();
stmt.close();
conn.close();
一、环境
1、数据库驱动jar文件
2、DBCP方法
Commons-dbcp.jar:连接池的实现 Commons-pool.jar:连接池实现的依赖库 资源文件
3、c3p0方法: c3p0-0.9.1.2.jar
配置文件:c3p0-config.xml
二、连接操作
1、DriverManager方法
2、使用DataSource子类方法;
资源文件 DBConnection.properties
DataSource有两种实现方式
1.直连数据库方式
当调用DataSource.getConnection()时,其实它调用的是DriverManager.getConnection(url, user, password)来获取一个Connection,Connection使用完后被close,断开与数据库的连接,我们称这总方式是直连数据库,因为每次都需要重新建立与数据库之间的连接,而并没有把之前的Connection保留供下次使用.
2.池化连接方式
可以说这种方式就是使用了连接池技术.DataSource内部封装了一个连接池,当你获取DataSource的时候,它已经敲敲的与数据库建立了多个Connection,并将这些Connection放入了连接池,此时调用DataSource.getConnection()它从连接池里取一个Connection返回,Connection使用完后被close,但这个close并不是真正的与数据库断开连接,而是告诉连接池"我"已经被使用完,"你"可以把我分配给其它"人"使用了.就这样连接池里的Connection被循环利用,避免了每次获取Connection时重新去连接数据库.
对DataSource的两种实现方式已经介绍完毕,现在知道DataSource与连接池之间的是关系而不是区别了吧,因为DataSource与连接池根本就不是同一类型的东西,只有同一类型的东西才存在区别,例如:oracle与db2都是数据库,它们才存在区别.我们这里仅仅实现了数据库的链接,并没有池化链接
3、使用C3P0
4、使用DBCP
配置文件:
〇、连接步骤
//第一步,注册驱动程序
//com.MySQL.jdbc.Driver
Class.forName("数据库驱动的完整类名");
//第二步,获取一个数据库的连接
Connection conn = DriverManager.getConnection("连接URL","用户名","密码");
//第三步,创建一个会话
Statement stmt=conn.createStatement();
//第四步,执行SQL语句,增加,删除,修改记录
stmt.executeUpdate("增加,删除,修改记录的SQL语句");
//或者查询记录
ResultSet rs = stmt.executeQuery("查询记录的SQL语句");
//第五步,对查询的结果进行处理
while(rs.next()){
//对记录的操作
}
//第六步,关闭连接
rs.close();
stmt.close();
conn.close();
一、环境
1、数据库驱动jar文件
2、DBCP方法
Commons-dbcp.jar:连接池的实现 Commons-pool.jar:连接池实现的依赖库 资源文件
3、c3p0方法: c3p0-0.9.1.2.jar
配置文件:c3p0-config.xml
二、连接操作
1、DriverManager方法
package demo.jdbcpool.test1; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class DBConnection { private static String driverClass = "com.mysql.jdbc.Driver"; private static String url = "jdbc:mysql://localhost:3306/test"; private static String username = "root"; private static String password = "123456"; private static Connection conn = null; static { try { // 注册驱动 // 不要把conn = DriverManager.getConnection(url, username, password); // 放在这里。防止所有用户都用一个Connection Class.forName(driverClass); } catch (Exception e) { throw new RuntimeException(e); } } public static Connection getConnection() throws SQLException { conn = DriverManager.getConnection(url, username, password); return conn; } }
2、使用DataSource子类方法;
资源文件 DBConnection.properties
driverClass = com.mysql.jdbc.Driver url = jdbc:mysql://localhost:3306/test username = root password = 123456模拟数据连接池
DataSourcePool.java package cn.langzi.jdbc.DataSource; import java.io.InputStream; import java.io.PrintWriter; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.util.LinkedList; import java.util.Properties; import javax.sql.DataSource; import javax.sql.DataSource; public class DataSourcePool implements DataSource { private static String url = null; private static String username = null; private static String password = null; private static int size = 10; private static LinkedList<Connection> list = new LinkedList<Connection>(); static{ try { InputStream in = DataSourcePool.class.getClassLoader() .getResourceAsStream ("cn/langzi/jdbc/DataSource/DBConnection.properties"); Properties prop = new Properties(); prop.load(in); Class.forName(prop.getProperty("driverClass")); url = prop.getProperty("url"); username = prop.getProperty("username"); password = prop.getProperty("password"); } catch (Exception e) { throw new ExceptionInInitializerError(e); } } private static DataSourcePool pool = new DataSourcePool(); //创建对象就初始化size个数据库连接 private DataSourcePool(){ for(int i=0;i<size;i++){ try { Connection conn = DriverManager.getConnection(url, username, password); System.out.println(conn); list.add(conn); } catch (SQLException e) { e.printStackTrace(); } }
DataSource有两种实现方式
1.直连数据库方式
当调用DataSource.getConnection()时,其实它调用的是DriverManager.getConnection(url, user, password)来获取一个Connection,Connection使用完后被close,断开与数据库的连接,我们称这总方式是直连数据库,因为每次都需要重新建立与数据库之间的连接,而并没有把之前的Connection保留供下次使用.
2.池化连接方式
可以说这种方式就是使用了连接池技术.DataSource内部封装了一个连接池,当你获取DataSource的时候,它已经敲敲的与数据库建立了多个Connection,并将这些Connection放入了连接池,此时调用DataSource.getConnection()它从连接池里取一个Connection返回,Connection使用完后被close,但这个close并不是真正的与数据库断开连接,而是告诉连接池"我"已经被使用完,"你"可以把我分配给其它"人"使用了.就这样连接池里的Connection被循环利用,避免了每次获取Connection时重新去连接数据库.
对DataSource的两种实现方式已经介绍完毕,现在知道DataSource与连接池之间的是关系而不是区别了吧,因为DataSource与连接池根本就不是同一类型的东西,只有同一类型的东西才存在区别,例如:oracle与db2都是数据库,它们才存在区别.我们这里仅仅实现了数据库的链接,并没有池化链接
3、使用C3P0
ComboPooledDataSource cpds = new ComboPooledDataSource(); // 加载数据库驱动 try { adfc cpds.setDriverClass("com.ibm.db2.jcc.DB2Driver"); } catch (PropertyVetoException e1) { e1.printStackTrace(); } // 设置访问数据库的地址、用户名和密码 cpds.setJdbcUrl("jdbc:db2://10.10.38.138:50000/malltest"); cpds.setUser("db2inst1"); cpds.setPassword("db2inst1"); // 设置C3P0的一些配置,不设置则使用默认值 cpds.setMinPoolSize(5); cpds.setAcquireIncrement(5); cpds.setMaxPoolSize(20); cpds.setMaxStatements(180); Connection conn = null; Statement stmt = null; ResultSet rs = null; try { // 创建数据库连接 conn = cpds.getConnection(); // 获取数据库操作对象 stmt = conn.createStatement(); // 操作数据库获取结果集 rs = stmt.executeQuery("select * from ly.t_merinf where merid='M0000178'"); // 处理结果集 while (rs.next()) { System.out.println(rs.getString("mername")); } } catch (SQLException e) { e.printStackTrace(); } finally { // 关闭结果集 if(rs != null) { try { rs.close(); } catch (SQLException e) { } } // 关闭数据库操作对象 if(stmt != null) { try { stmt.close(); } catch (SQLException e) { } } // 关闭数据库连接 if(conn != null) { try { conn.close(); } catch (SQLException e) { } } try { DataSources.destroy(cpds); } catch (SQLException e) { e.printStackTrace(); } }
4、使用DBCP
配置文件:
driverClassName=com.ibm.db2.jcc.DB2Driver url=jdbc:db2://10.10.38.138:50000/malltest username=db2inst1 password=db2inst1 initialSize=3 maxActive=5 maxIdle=3 minIdle=1 maxWait=30000代码:
// 1.创建连接池 DataSource ds = null; try { Properties prop = new Properties(); // 通过类路径来加载属性文件 prop.load(DbcpTest.class.getClassLoader().getResourceAsStream("database/dbcp/dbcp.properties")); // 获取数据源 ds = BasicDataSourceFactory.createDataSource(prop); } catch (IOException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } Connection conn = null; Statement stmt = null; ResultSet rs = null; try { // 2.获取数据库连接 conn = ds.getConnection(); // 3.创建数据库操作对象 stmt = conn.createStatement(); // 4.操作数据库获取结果集 rs = stmt.executeQuery("select * from ly.t_merinf where merid='M0000178'"); // 5.处理结果集 while (rs.next()) { System.out.println(rs.getString("mername")); } } catch (SQLException e) { e.printStackTrace(); } finally { // 关闭结果集 if(rs != null) { try { rs.close(); } catch (SQLException e) { } } // 关闭数据库操作对象 if(stmt != null) { try { stmt.close(); } catch (SQLException e) { } } // 关闭数据库连接 if(conn != null) { try { conn.close(); } catch (SQLException e) { } } }
相关文章推荐
- jdbc中的Statement和PreparedStatement接口对象
- Android之获取手机上的图片和视频缩略图thumbnails
- 数据库链接字符串查询网站
- DB2实例管理
- DB2实例管理
- 保障MySQL数据安全的14个最佳方法
- mysql问答汇集
- 第三章 数据库备份和还原
- 创建一个空的IBM DB2 ECO数据库的方法
- Access 2000 数据库 80 万记录通用快速分页类
- 开通一个数据库失败的原因的和解决办法
- 一个简单的asp数据库操作类
- CentOS下DB2数据库安装过程详解
- EasyASP v1.5发布(包含数据库操作类,原clsDbCtrl.asp)第1/2页
- sql2008 还原数据库解决方案
- Oracle 数据库自动存储管理-安装配置
- Oracle数据库执行脚本常用命令小结
- Oracle 数据库 临时数据的处理方法
- 数据库分页查询语句数据库查询