1.概念
首先理清几个概念,
JDBC:java数据库连接,是Orical公司的指定的一套规范接口
java数据库驱动:JDBC的实现类,由相应的数据库厂商提供,可以通过驱动去操作不同的数据库
在java-数据库这里,jdbc-api中的所有包都是java.sql或者javax.sql
2.JDBC的操作步骤:
(1)建立数据库和表
(2)创建项目
(3)导入驱动jar包
(4)注册驱动
Class.forName("com.mysql.jdbc.Driver");
(5)获取连接
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:端口号/项目名", "登录名", "密码");
package com.itheima.Utils;
import java.sql.Connection;
import java.sql.DriverManager;
/**
*实现java数据库连接的工具类
*这里的代码没有使用配置文件,一旦相应的名称改变,就不可用
*/
public class JDBCUtils {
public static Connection getConnection() throws Exception {
Class.forName("com.mysql.jdbc.Driver");
String url = "jdbc:mysql:///Pro";
String userName = "root";
String password = "123";
Connection conn = DriverManager.getConnection("url", "userName", "password");
return conn;
}
}
package com.itheima.Utils;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.ResourceBundle;
/**
* 这里使用配置文件,将数据库的一些常量信息写到jdbc.properties文件中
* 然后利用ResourceBundle类进行读取
* 需要注意的是,每次进行连接的时候,没必要每次都加载Driver
* 所以该代码将公共部分进行了提取,写到一个静态代码块中
* 只在第一次连接的时候注册驱动
*
*/
public class JDBCUtils2 {
static final String DRIVERCLASS;
static final String URL;
static final String USERNAME;
static final String PASSWORD;
static {
ResourceBundle rsb = ResourceBundle.getBundle("jdbc");
DRIVERCLASS = rsb.getString("driverClass");
URL = rsb.getString("url");
USERNAME = rsb.getString("userName");
PASSWORD = rsb.getString("password");
}
static {
try {
Class.forName(DRIVERCLASS);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
public static Connection getConnection() throws ClassNotFoundException, SQLException {
return DriverManager.getConnection(URL, USERNAME, PASSWORD);
}
}
3.在数据库连接时,如果经常创建连接并释放,或造成运行缓慢,耗费时间,所以有了连接池,连接池里存放着连接。连接池创建的时候,会创建若干个连接,在需要时,从连接池内部取出,不使用时,将连接返还,这样避免了连接的反复创建和释放,从而节省了时间
常用的连接池为c3p0
package com.itheima.jdbcUtils;
import java.sql.Connection;
import java.sql.SQLException;
import javax.sql.DataSource;
import com.mchange.v2.c3p0.ComboPooledDataSource;
/**
*java连接池工具类
* c3p0连接池
* 所有参数在配置文件c3p0.properties中
*
* c3p0.properties配置文件 每个名字都不能写错
*
* c3p0.driverClass=com.mysql.jdbc.Driver
* c3p0.jdbcUrl=jdbc:mysql://127.0.0.1:3306/day12
* c3p0.user=root
* c3p0.password=123
*
*/
public class DataSourceUtils {
private static ComboPooledDataSource ds = new ComboPooledDataSource();
/**
* 得到数据源
* dbUtils工具类中,QueryRunner qr = new QueryRunner(DataSource ds)
* QueryRunner类中的参数是DataSource,所以本工具类很有必要写一个静态的函数,返回DataSource或其子类
*/
public static DataSource getDataSource() {
return ds;
}
/**
* 如果使用dbUtils工具类,获取连接需要的参数为DataSource,不需要手动创建连接
* 所以本方法基本不会被调用
*/
public static Connection getConnection() throws SQLException {
return ds.getConnection();
}
}