学习笔记——JDBC连接的几种方式及配置

时间:2020-12-12 22:49:33

在连接数据库之前呢,首先要准备好几样东西(文章以mysql为例子):

    ①连接数据库的驱动包,下载mysql数据库的驱动包mysql-connector-java-5.1.21.jar

    ②  jdbc的四大参数

            驱动名:是固定的,mysql的为com.mysql.jdbc.Driver

             数据库地址:jdbc:mysql://localhost:3306/DBName(数据库名),3306是数据库连接端口,如果不同换成自己的端口就行

             数据库名称

             数据库密码

好,这些配置好后来测试一下吧!

第一种方法:

学习笔记——JDBC连接的几种方式及配置

如果抛出异常了,检查下数据库是否连接,或者上述的材料是否准备好

如果出现类似如下结果,则为连接成功

com.mysql.jdbc.JDBC4Connection@3d646c37

第一种方法个人觉得比较繁琐,接下来看看一个加强版方式吧!

第二种方法:    

采用properties配置文件方式:

首先在src包下创建properties文件

学习笔记——JDBC连接的几种方式及配置

同样的,在properties文件内配置四大参数

学习笔记——JDBC连接的几种方式及配置

演示代码如下:

首先创建一个utils类,方便后续使用

package JdbcUtils;

import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.util.Properties;

public class JdbcUtils {
	private static Properties pro = null;
	static {    //避免重复加载配置文件,因此把代码放到静态代码块中
		// 加载配置文件
		InputStream is = JdbcUtils.class.getClassLoader().
				getResourceAsStream("dbconfig.properties");
		pro = new Properties();
		try {
			pro.load(is);
		} catch (IOException e) {
			e.printStackTrace();
		}
		// 加载驱动类
		try {
			Class.forName(pro.getProperty("className"));
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}

	}
	public static Connection getConnection() throws Exception {
		// 得到Connection
		return DriverManager.getConnection(pro.getProperty("url"), pro.getProperty("username"),
				pro.getProperty("password"));
	}
}

接着,我们来测试一下

学习笔记——JDBC连接的几种方式及配置

输出结果为:

学习笔记——JDBC连接的几种方式及配置

由此第二种方式完成,对比与第一种方式,第二种方式在需要获取多个connection对象时显得更为方便,代码重用性也比较强!

但是,第二种方式有一个缺点,在频繁地创建、销毁connection对象,那么我们是否有一个方法,在我们需要的时候去获取connection,不需要的时候把它还回去呢?

答案是有的,那就是数据库连接池

第三种方法:    

数据库连接池有许多种方式,这里介绍两种

     需要注意的是:

         在用连接池获取connection对象,使用close方式时,它并不会关闭而是把连接归还给连接池!

          使用连接池必须要实现:javax.sql.DataSource接口

   ①DBCP连接池

        使用DBCP连接池的时候需要导入依赖包commons-dbcp-1.4.jar和commons-pool-1.3.jar两个jar包

package JdbcPool;

import java.sql.SQLException;

import org.apache.commons.dbcp.BasicDataSource;

//DBCP连接池
public class Demo {
	public static void main(String[] args) throws SQLException {
		BasicDataSource dataSource = new BasicDataSource();
		dataSource.setDriverClassName("com.mysql.jdbc.Driver");
		dataSource.setUrl("jdbc:mysql://localhost:3306/test");
		dataSource.setUsername("root");
		dataSource.setPassword("root");
		System.out.println(dataSource.getConnection().getClass().getName());
	}
}

结果:org.apache.commons.dbcp.PoolingDataSource$PoolGuardConnectionWrapper

是否觉得结果和前面方式不一样呢?

那是因为连接池采用的是装饰者模式实现的。

    好了,接下来介绍另一种连接池的方式

  ②c3p0连接池

    在使用前,当然也得导入依赖jar包了c3p0-0.9.2.1.jar和mchange-commons-java-0.2.3.4.jar

       c3p0连接池可以采用之前的properties配置文件,也可以采用xml方式来配置

        学习笔记——JDBC连接的几种方式及配置

        

package JdbcUtils;
import java.sql.Connection;
import java.sql.SQLException;
import com.mchange.v2.c3p0.ComboPooledDataSource;

public class JdbcUtils_new {
	private static ComboPooledDataSource dataSource 
							= new ComboPooledDataSource();
	public static Connection getConnection() {
		try {
			return dataSource.getConnection();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			throw new RuntimeException();
		}
	}
	public static ComboPooledDataSource getDataSource() {
		return dataSource;
	}
}

测试结果:

学习笔记——JDBC连接的几种方式及配置

可以看出输出结果又和之前不一样,那是因为c3p0采用的是动态代理方式,更为灵活。

其实c3p0还可以在tomcat内配置,路径为tomcat下的conf\Catalina\localhost

配置的格式如下:

    name:指定资源名称

    factory:资源由谁创造,这个是固定的

    type:资源的类型

    最后两行是连接池的配置

学习笔记——JDBC连接的几种方式及配置

这个叫做JNDI配置,用于javaweb应用。

以上:是我最近学习的总结,写的不是很好,当做自己的学习笔记。如果能对你有帮助,不胜荣幸。