Java-JDBC访问数据库

Java-JDBC访问数据库解析

Posted by Jinliang on September 12, 2017

Java基础—JDBC访问数据库

JDBC,全称Java DataBase Connectivity。它提供各种方法,包括访问数据库、执行sql语句等。这些操作数据库的类都在java.sql包中,下面是通过JDBC链接数据库的一些步骤。

  1. 加载JDBC驱动器。其实也就是咱们通常说的一些jar包,这些包一般在数据库的官网可以找到,Java官网也有的,一般5/6个左右,直接加到项目中的classpath中皆可以了,一般在项目中的WEB-INF/lib目录下。(找不到的联系我,我可以发给你,,我后续会上传到CSDN的)
  2. 加载JDBC驱动,并将其注册到DriverManager中。一般通过反射来注册,大概的语法是Class.forName(String driveName)。(反射是加载类的一种方式,具体的实现机制我会在接下来的博客中提到,关于Java源码部分的。)
  3. 建立数据库链接,取得Connection对象。一般的方法是DriverManager.getConnection(url,username,passwd)方法实现,URL表示衔接数据库的字符串,username是数据库的用户名,passwd是数据库的密码。
  4. 建立Statement或者是PreparedStatement对象。
  5. 执行sql语句
  6. 访问结果集ResultSet对象。
  7. 将上述的对象通过.close()方法关闭,因为JDBC驱动在底层是通过网络IO实现SQL命令与数据传输的。

这是使用JDBC的一个思路,其实在真正的项目中,并不可能每次访问都写一遍这些过程,一般放在一个工具类中,使用的时候直接调用。下面粘贴上我一般使用的JDBC工具类。

package com.neu.mvc.dao.util;

import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Properties;

//SessionFactory必须是单例模式
public class SessionFactorytemp {
	private static SessionFactorytemp sessionFactory = new SessionFactorytemp();

	private SessionFactorytemp() {
	}

	public static SessionFactorytemp getInstance() {
		return sessionFactory;
	}

	public Connection getSession() throws Exception {
		// 0_1 通过属性文件加载相关配置信息
		Properties props = new Properties();
		InputStream in = SessionFactorytemp.class.getClassLoader()
				.getResourceAsStream("db.properties");
		props.load(in);
		in.close();
		// 1-加载驱动
		Class.forName(props.getProperty("jdbc.DBDriver"));
		// 2-根据url,username,password连接数据库
		String url = props.getProperty("jdbc.url");
		String username = props.getProperty("jdbc.username");
		String password = props.getProperty("jdbc.password");
		Connection con = DriverManager.getConnection(url, username, password);
		// 3-返回连接
		return con;
	}

	public void close(ResultSet rs, Statement ps, Connection con)
			throws Exception {
		if (rs != null)
			rs.close();
		if (ps != null)
			ps.close();
		if (con != null)
			con.close();
	}
}

上面是普通的通过JDBC连接数据库的工具类,封装在一个类中,调用的时候更加方便。但是在项目中我们还可能使用连接池(不懂得自行百度),使用连接池的话上面的类就需要改变了。 我一般使用的是c3p0连接池,下面粘贴c3p0连接池的工具类,不过要想真正的使用c3p0连接池还是创建配置文件以及相应的驱动,也就是jar包。这个工具类用到了单例模式哦。

package com.neu.mvc.dao.util;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;

import com.mchange.v2.c3p0.ComboPooledDataSource;

//SessionFactory必须是单例模式
public class SessionFactory {
	//单例模式
	private static SessionFactory sessionFactory = new SessionFactory();
	private SessionFactory() {
		cpds = new ComboPooledDataSource("java_C3P0");
	}
	public static SessionFactory getInstance() {
		return sessionFactory;
	}
	//配置数据源连接池C3P0
	private ComboPooledDataSource cpds;
	//从连接池中获得连接
	
	public Connection getSession() throws Exception {
		 System.out.println("连接池信息:" + cpds);
		 return cpds.getConnection();
	}

	public void close(ResultSet rs, Statement ps, Connection con)
			throws Exception {
		if (rs != null)
			rs.close();
		if (ps != null)
			ps.close();
		if (con != null)
			con.close();
	}
}

算了,还是把配置文件也粘贴上吧。。。。。。

<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
       <named-config name="java_C3P0">
			<!-- 实现连接池与数据库的连接从而可以将数据库的con对象放入连接池 -->
              <property name="user">liang</property>
              <property name="password">tiger</property>
              <property name="driverClass">oracle.jdbc.driver.OracleDriver</property>
              <property name="jdbcUrl">jdbc:oracle:thin:@127.0.0.1:1521:ORCL</property>
			<!-- 对Connection对象在连接池中的数量进行配置 -->
              <property name="initialPoolSize">10</property>
              <property name="minPoolSize">10</property>
              <property name="maxPoolSize">50</property>
              <property name="acquireIncrement">10</property>
             <!-- 对PreparedStatement对象及Statement对象在连接池中的数量进行配置 -->
              <property name="maxStatements">20</property>
              <property name="maxStatementsPerConnection">5</property>
       </named-config>
</c3p0-config>

最后,如果配置c3p0连接池,千万不要忘了jar包啊!!