封装用来获取Connection对象的工厂类
一、主要思路与实现
获取与数据库的连接时,第一步是注册驱动,第二步是获取与数据库的连接对象。我们使用时每一次都要去写重复的代码,那么为了简化操作,我们可以封装一个用来获取Connection对象的工厂类。
主要思路:不同的数据库驱动类的名字不同,用来唯一区分数据库的地址也不同,将来可能所使用的账户和密码也会改变。通过将这些信息保存到文件中然后从文件中来获取这些信息,将来如果这些信息发生改变时,就不用再去更改原来已经写好的代码,只要去更改配置这些信息的文件中的数据即可。
此部分主要通过java.util包下的Properties类来实现,其主要的作用是通过修改配置文件可以方便的修改代码中的参数,实现不用改class文件即可灵活变更参数。
二、步骤
第一种方法:通过反射来实现。
(1)导入oracle驱动类的jar包 ojdbc14.jar 。
过程:选中当前工程下,右击新建一个Folder文件夹取名jar,然后将ojdbc14.jar复制粘贴到该文件夹中,选中该jar包,右击Build Path,Add to Build Path,在Referenced Libraries下会出现该jar包,导入完成。
如:
(2)完成资源文件配置
在当前工程下选中src右击新建一个File,取名db.properties,在这个文件中配置一下需要使用的四个参数:
driver=oracle.jdbc.driver.OracleDriver
url=jdbc:oracle:thin:@127.0.0.1:1521:XE
username=tom
password=tom
其中,第一个参数driver配置的是驱动类的名字oracle.jdbc.driver.OracleDriver ,不同的数据库驱动的名字不同;
第二个参数url:是用来唯一区分数据库的地址,thin:第四类驱动类型 ,@127.0.0.1是本机地址, 1521端口号 ,XE数据库的名字
第三个参数:数据库中自己所使用的账户名
第四个参数:数据库中自己所使用的该账户的密码
(因为我使用的是oracle数据库,所以是以oracle数据库为例来进行配置的)
如:
(3)开始封装,实现代码如下:
package com.briup.common;
//封装用来获取Connection对象的工厂类(相当于对前两步:注册驱动、获取数据库的连接对象 进行了封装)
//【通过连接池来获取连接对象的类,作用同此,但它的close方法就不再是关闭资源,而是将资源归还到连接池中】
import java.sql.Connection;
import java.sql.DriverManager;
import java.util.Properties;
public class ConnectionFactory {
private static String driver;
private static String url;
private static String user;
private static String pwd;
//读取db.properties,给四个变量赋值
static {
Properties p=new Properties();
try {
//p.load(new FileInputStream("src/com/briup/common/db.properties"));
p.load(ConnectionFactory.class.getResourceAsStream("db.properties"));
driver=p.getProperty("driver");
url=p.getProperty("url");
user=p.getProperty("username");
pwd=p.getProperty("password");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
throw new RuntimeException("文件加载失败...");
}
}
public static Connection getConnection() {
Connection conn=null;
try {
Class.forName(driver);
conn=DriverManager.getConnection(url,user,pwd);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
throw new RuntimeException("获取数据库连接失败");
}
return conn;
}
}
测试结果:
第二种方法:通过获取连接池对象调getConnection方法来实现
(1)将需要用的jar包druid-1.1.23.jar,导入到项目中。
(2)项目中 src下面,创建资源文件: druid.properties,文件内容是druid连接池的配置信息:
driverClassName=oracle.jdbc.OracleDriver
url=jdbc:oracle:thin:@127.0.0.1:1521:XE
username=tom
password=tom
#初始化连接数量
initialSize=5
#最大连接数
maxActive=10
#最大等待时间
maxWait=3000
(3)开始封装,实现代码如下:
/*
----【使用连接池获取连接对象】-----
【数据库连接池,在系统初始化时创建一定数量数据库连接对象,需要时直接从池中取出一个空闲
对象,用完后并不直接释放掉对象,而是再放到对象池中,以便下一次对象请求可以直接复用】
封装用来获取Connection对象(相当于对前两步:注册驱动、获取数据库的连接对象 进行了封装)
*/
package com.briup.common;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;
import javax.sql.DataSource;
import org.junit.Test;
import com.alibaba.druid.pool.DruidDataSourceFactory;
public class ConnectionFactory {
private static DataSource ds;
static {
Properties p=new Properties();
try {
//使用Properties读取资源文件
p.load(ConnectionFactory.class.getClassLoader().getResourceAsStream("druid.properties"));
//获取连接池对象
ds=DruidDataSourceFactory.createDataSource(p);
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException("文件加载失败");
}
}
/*测试用(如果要使用@Test 注释,需导入junit.jar。过程:选中工程右击Build Path,Add Libraries..,Junit,Next,选择版本,Finish)
@Test
public void test() {
Connection conn = ConnectionFactory.getConnection();
System.out.println("连接池"+conn);
}
*/
//读取配置文件,使用工厂类创建连接池
public static Connection getConnection() {
Connection conn=null;
try {
//获取连接
conn = ds.getConnection();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
throw new RuntimeException("数据库连接失败");
}
return conn;
}
}
测试结果:
到此为止,用来获取Connection对象的工厂类就封装完成了。如果想要查看是否成功可在测设类中进行简单的输出测试即可,也可使用@Test注释来测试方法。
补充:
如果使用的是其他的数据库,资源文件的内容也是不同的。
(1)如果使用的是mysql数据库:
//String url = “jdbc:mysql://localhost:3306/test?autoReconnect=true&useUnicode=true&characterEncoding=UTF8”;
String url = “jdbc:mysql://localhost:3306/test”;
String driver = “com.mysql.jdbc.Driver”;
String username = “root”;
String password = “123”;
(2)如果使用的是sqlserver数据库
String driver = “com.microsoft.sqlserver.jdbc.SQLServerDriver”; //加载JDBC驱动
String url = “jdbc:sqlserver://localhost:1433; DatabaseName=test”; //连接服务器和数据库test
String username = “sa”; //默认用户名
String password = “123456”; //密码