Java基础—JDBC访问数据库
JDBC,全称Java DataBase Connectivity。它提供各种方法,包括访问数据库、执行sql语句等。这些操作数据库的类都在java.sql包中,下面是通过JDBC链接数据库的一些步骤。
- 加载JDBC驱动器。其实也就是咱们通常说的一些jar包,这些包一般在数据库的官网可以找到,Java官网也有的,一般5/6个左右,直接加到项目中的classpath中皆可以了,一般在项目中的WEB-INF/lib目录下。(找不到的联系我,我可以发给你,,我后续会上传到CSDN的)
- 加载JDBC驱动,并将其注册到DriverManager中。一般通过反射来注册,大概的语法是
Class.forName(String driveName)
。(反射是加载类的一种方式,具体的实现机制我会在接下来的博客中提到,关于Java源码部分的。) - 建立数据库链接,取得Connection对象。一般的方法是
DriverManager.getConnection(url,username,passwd)
方法实现,URL表示衔接数据库的字符串,username是数据库的用户名,passwd是数据库的密码。 - 建立Statement或者是PreparedStatement对象。
- 执行sql语句
- 访问结果集ResultSet对象。
- 将上述的对象通过.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包啊!!