一、问题引入
在java程序中,需要访问数据库,做增删改查等相关操作。如何访问数据库,做数据库的相关操作呢?
二、Java连接数据库方法概述
java.sql提供了一些接口和类,用于支持数据库增删改查等相关的操作。该jar包定义了java访问各种不同数据库(mysql,oracle,sqlserver。。。。。)的统一接口和标准。同时,各个数据库厂商都提供了该jar包中定义的各个接口的实现类,用于具体实现本厂数据库的增删改查操作,即称之为“数据库驱动jdbc driver”。例如mysql的数据库驱动为:com.mysql.jdbc.driver;oracle的数据库驱动为:oracle.jdbc.driver.oracledriver。
在java程序中访问数据库,做数据库连接时,可以采用两种方式:
1、使用java.sql API
2、使用数据库连接池
目前存在多个开源的java数据库连接池,这些连接池都是在java.sql基础上编写而成。
Ø 该连接池的解决的问题是:
当使用java.sql中提供的api创建数据库连接时候,需要耗费很大的资源,要进行用户名密码数据库连接验证等,即耗费资源也耗费时间。如果在程序中,每次需要访问数据库时候,都进行数据库连接,那么势必会造成性能低下;同时,如果用户失误忘记释放数据库连接,会导致资源的浪费等。而数据库连接池就是解决该问题,通过管理连接池中的多个连接对象(connection),实现connection重复利用。从而,大大提高了数据库连接方面的性能。
Ø 该连接池的功能是:
负责创建,管理,释放,分配数据库连接即(connection)。首先,负责创建相应数目的数据库连接对象(connection)对象,并存放到数据库连接池(connect pool)中。当用户请求数据库连接时,该连接池负责分配某个处于空闲状态的数据库连接对象;当用户发出释放该数据库连接时,该连接池负责将该连接对象重新设置为空闲状态,以便被别的请求重复利用。同时;数据库连接池负责检查(空闲时间>最大空闲时间)的数据库连接,并释放。
Ø 连接池主要参数介绍
最小连接数:初始化时,系统将负责创建该数目的connection放入连接池中。
最大连接数:系统允许创建connection的最大数值。当系统请求连接时候,且连接池中不存在空闲的连接:如果connection总数未超过最大连接数,那么连接池负责创建新的connection对象,并返回该对象;如果connection总数已经到达该最大连接数,那么连接池将用户请求转入等待队列。
三、常用的数据库连接池
1、 JNDI
2、 C3p0
3、 Apache 的Jakarta DBCP
4、 BoneCP
其中,sping框架依赖的第三方使用了c3p0和dbcp两种方式;而bonecp号称是速度最快的数据库连接池。JNDI方式创建实现的datasource是真正实现了javax.sql.datasource;其他的三种方式都不是。下面的列表,列出了几种方式的区别和不同:
序号
|
连接池名称
|
依赖的jar包
|
实现的datasource类
|
备注
|
1
|
JNDI
|
该数据源是由相应的web服务器(例如:tomcat,weblogic,websphere)负责初始化,创建,管理。程序中不需要引入特别的jar包。
|
Javax.sql.datasource
|
|
2
|
C3P0
|
c3p0-0.9.xxx.jar
|
com.mchange.v2.c3p0.ComboPooledDataSource
|
|
3
|
DBCP
|
commons-dbcp.jar,commons-pool.jar
|
org.apache.commons.dbcp.BasicDataSource
|
|
4
|
BoneCP
|
bonecp-0.6.5.jar
· google-collections-1.0.jar
· slf4j-api-1.5.11.jar
· slf4j-log4j12-1.5.11.jar
·log4j-1.2.15.jar
|
BoneCPDataSource
|
|
备注:以上几种方式的数据库连接池的配置参数大同小异,略有差别;其参数的配置,既可以通过配置文件的方式配置,也可以通过硬编码的方式配置。
四、分别列出几种连接池的编码例子
(所有的例子均可以参考D:\work\qsyworkspace2\jdbctest项目)
1、 使用java.sql API直接访问数据库
详细请参考javasql.java文件。
Class.forName("com.mysql.jdbc.Driver");
String url="jdbc:mysql://localhost:3306/editortest";
String user="root";
String password="123456";
Connection cn=DriverManager.getConnection(url, user, password);
Statement st=cn.createStatement();
String sql="select * from artical where id=1";
ResultSet rs=st.executeQuery(sql);
while(rs.next()){
System.out.println("1:"+rs.getString(1));
System.out.println("2:"+rs.getString(2));
System.out.println("3:"+rs.getString(3));
System.out.println("4:"+rs.getString(4));
}
2、 使用JNDI方式
这种方式,是由web服务器,实现了java.sql.datasource。由web服务器负责初始化数据源,创建connection,分配,管理connection。由于本身是由web服务器实现的功能,因此不需要在项目project中引入特别的jar包,但是需要在服务器的某些配置文件中增加相关的配置。下面,以tomcat服务器为例,讲述这种方式的使用。
(1)、修改tomcat的conf下的context.xml文件,增加Resource的配置的支持。
(2)、由于数据源是由tomcat负责创建,所以需要的jdbc驱动应该放到tomcat的lib路径下。
(3)、编写使用java代码,并放在tomcat环境下使用,如下:
public void jnditest(){
// TODO Auto-generated method stub
try {
Context initcontext=new InitialContext();
Context context=(Context) initcontext.lookup("java:comp/env");
DataSource datasource=(DataSource)context.lookup("jdbc/editortest");
Connection cn=datasource.getConnection();
Statement st=cn.createStatement();
String sql="select * from artical where id=1";
ResultSet rs=st.executeQuery(sql);
while(rs.next()){
System.out.println("1:"+rs.getString(1));
System.out.println("2:"+rs.getString(2));
System.out.println("3:"+rs.getString(3));
System.out.println("4:"+rs.getString(4));
}
} catch (NamingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
(4)、详情参考jndisql。Java文件,以及index.jsp。
注意:该测试不能在main方法中测试;可以写一个jsp在tomcat环境中测试。因为:java单元的环境是jdk;而jsp的环境却是tomcat;数据连接池是在tomcat中配置的,所以能正常运行的,但java测试的环境只有jdk,所以在引用数据连接池时就时出现找不到环境的错误。
使用环境:当使用weblogic或者websphere等高级的web服务器的时候,可以考虑使用这种方式提高性能。
3、 使用C3p0方式
C3P0是开源的数据库连接组件,支持创建数据库连接池,管理connection等功能。使用该种方式做数据库连接时候,需要导入c3p0-0.9.1.2.jar。
同时,关于数据库连接的具体参数,例如:url,username,password,最小连接数,最大连接数。。。。。等信息既可以在xml配置文件中配置,也可以通过程序编码方式创建。Spring支持c3p0的数据库连接池方式,因此在spring环境中使用时,支持在applicationcontext.xml文件中配置。另外,由于数据库连接池在整个project中针对某个数据库而言是单例的,所以,即使通过编码的方式创建,那么要保证其单实例特性。如果存在多个,那么必然会导致性能低下。
下面,列出通过程序编码方式使用c3p0数据库连接池的方式。
ComboPooledDataSource ds = new ComboPooledDataSource();
try {
ds.setDriverClass("com.mysql.jdbc.Driver");
ds.setJdbcUrl("jdbc:mysql://localhost:3306/editortest");
ds.setUser("root");
ds.setPassword("123456");
ds.setMaxPoolSize(20);
ds.setInitialPoolSize(10);
ds.setMaxIdleTime(2000);
Connection cn=ds.getConnection();
Statement st=cn.createStatement();
String sql="select * from artical where id=1";
ResultSet rs=st.executeQuery(sql);
while(rs.next()){
System.out.println("1:"+rs.getString(1));
System.out.println("2:"+rs.getString(2));
System.out.println("3:"+rs.getString(3));
System.out.println("4:"+rs.getString(4));
}
} catch (PropertyVetoException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
备注:通常使用方式,都是通过配置文件配置,几乎不会用到这种硬编码方式。在此,只是简单介绍C3P0的使用方式。详情,可以参考c3p0test.java。
4、 使用dbcp方式
DBCP方式,是apache提供的数据源连接池方式,支持数据库连接池创建,管理connection等功能。使用环境,需要导入commons-dbcp.jar 和 commons-pool.jar两个jar包。上面提到的JNDI方式,其实质实用的就是dbcp数据源;只是他是通过在web服务器上做配置,由web服务器负责创建该数据源。
同样的,dbcp数据源也支持xml配置文件和硬编码两种方式。通常使用方式,都是通过配置文件配置,几乎不会使用硬编
- 大小: 4 KB
分享到:
相关推荐
基于weblogic,应对数据库连接泄漏的解决方法; 包含临时解决方法和数据连接池泄露监控,并可追踪到某个类某行代码。
Java数据库连接Java数据库连接Java数据库连接Java数据库连接Java数据库连接Java数据库连接Java数据库连接Java数据库连接Java数据库连接Java数据库连接Java数据库连接Java数据库连接Java数据库连接Java数据库连接Java...
java连接各种数据库的步骤介绍,一看就会
java连接各种数据库!java数据库驱动连接! java与SQL server 2000的实例连接!
本地API驱动 这种类型的驱动通过客户端加载数据库厂商提供的本地代码库(C/C++等)来访问数据库,而在驱动程序中则包含了Java代码。 类型3 网络协议驱动 这种类型的驱动给客户端提供了一个网络API,客户端上的...
本人学习java过程中,对多种数据库连接方法进行了小结,都有程序例程,例程非常简单易懂,同时附带了mySQL和SQLServer2000数据库驱动,希望对刚刚接触java数据库的朋友有帮助。 导入数据库驱动时要注意: mySQL的...
java数据库连接方法包括连接池 java数据库连接方法包括连接池
JAVA数据库连接池 能够减少对内存的消耗 提高了性能
java数据库连接方法,帮助迅速掌握java数据库的连接,方便代码开发应用。
Java 与数据库连接,数据库的应用实例 Java 数据库连接 vb数据库 数据库爱好 数据 Java 数据库连接 vb数据库 数据库爱好 数据Java 数据库连接 vb数据库 数据库爱好 数据
Java数据库连接大全
java数据库连接池代码,实例代码、注释
java数据库连接java数据库连接java数据库连接java数据库连接java数据库连接
全面讲解数据库连接的知识.详细,包含大量例子
Java数据库连接Java数据库连接
很不错的资料 是关于java连接数据库的一段比较标准的代码,用到的是JDBC技术
神通数据库驱动jar,Java 连接神通数据库驱动包(亲测有效)神通数据库驱动jar,Java 连接神通数据库驱动包(亲测有效)神通数据库驱动jar,Java 连接神通数据库驱动包(亲测有效)神通数据库驱动jar,Java 连接神通...
JAVA 使用数据库连接池连接Oracle数据库,全代码,附加详细说明