封装用来获取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”; //密码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值