在连接数据库之前呢,首先要准备好几样东西(文章以mysql为例子):
①连接数据库的驱动包,下载mysql数据库的驱动包mysql-connector-java-5.1.21.jar
② jdbc的四大参数
驱动名:是固定的,mysql的为com.mysql.jdbc.Driver
数据库地址:jdbc:mysql://localhost:3306/DBName(数据库名),3306是数据库连接端口,如果不同换成自己的端口就行
数据库名称
数据库密码
好,这些配置好后来测试一下吧!
第一种方法:
如果抛出异常了,检查下数据库是否连接,或者上述的材料是否准备好
如果出现类似如下结果,则为连接成功
com.mysql.jdbc.JDBC4Connection@3d646c37
第一种方法个人觉得比较繁琐,接下来看看一个加强版方式吧!
第二种方法:
采用properties配置文件方式:
首先在src包下创建properties文件
同样的,在properties文件内配置四大参数
演示代码如下:
首先创建一个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")); } }
接着,我们来测试一下
输出结果为:
由此第二种方式完成,对比与第一种方式,第二种方式在需要获取多个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方式来配置
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; } }
测试结果:
可以看出输出结果又和之前不一样,那是因为c3p0采用的是动态代理方式,更为灵活。
其实c3p0还可以在tomcat内配置,路径为tomcat下的conf\Catalina\localhost
配置的格式如下:
name:指定资源名称
factory:资源由谁创造,这个是固定的
type:资源的类型
最后两行是连接池的配置
这个叫做JNDI配置,用于javaweb应用。
以上:是我最近学习的总结,写的不是很好,当做自己的学习笔记。如果能对你有帮助,不胜荣幸。