JAVA数据库连接方法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、问题引入
在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
利用该包提供的各种接口和类直接访问数据库。
Drivermanager(驱动管理类)
Connection(连接类)
Statement(静态语句)Preparedstatement(动态)
resultset
resultset
例子:
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
类
备注
1JNDI该数据源是由相应的web服务器(例
如:tomcat,weblogic,websphere)负
责初始化,创建,管理。程序中不需要
引入特别的jar包。Javax.sql.dataso urce
2C3P0c3p0-0.9.xxx.jar com.mchange.v2.c3
boPooledDa
taSource
3DBCP commons-dbcp.jar,commons-pool.jar mon
s.dbcp.BasicDataSo
urce
4BoneCP 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));