一、 Connection con = DriverManager.getConnection();
JDBC入门方案,实现步骤如下:
- 导入驱动jar包:mysql-connector-java-5.1.37-bin.jar;
- 注册驱动:
java.sql.DriverManager.registerDriver(new Driver());
- 在com.mysql.jdbc.Driver类中存在如下静态代码块
- 因此开发中获取字节码文件对象即可:
Class.forName("com.mysql.jdbc.Driver");
- MySQL5之后利用驱动文件自动注册驱动,可省略注册驱动的步骤
static {
try {
java.sql.DriverManager.registerDriver(new Driver());
} catch (SQLException E) {
throw new RuntimeException("Can't register driver!");
}
}
- 获取数据库连接对象:
Connection connection = DriverManager.getConnection(String url, String username, String password);
- @param url 指定连接路径,具体内容为:jdbc:mysql://ip地址(域名):端口号/数据库名称
** 如果连接的是本机mysql服务器,且mysql服务默认端口是3306,则url可以简写为:jdbc:mysql:///数据库名称- @param username 数据库用户名
- @param password 数据库用户密码
可参考 :
- 获取 preparedStatement 对象:
PreparedStatement preparedStatement = connection.prepareStatement(String sql)
- PreparedStatement 可解决SQL注入问题,效率更高,创建对象前需先定义SQL语句作为实参传入
- 操作数据库
二、Connection con = dataSource.getConnection();
利用数据库连接池对象获取,常用的数据库连接池为C3P0、Druid
C3P0使用步骤:
- 导入jar包 :
- c3p0-0.9.5.2.jar
- mchange-commons-java-0.2.12.jar
- mysql-connector-java-5.1.37-bin.jar
- 定义配置文件并将文件移动到src目录下,C3P0可完成配置文件的自动加载
- 创建数据库连接池对象:
DataSource dataSource = new ComboPooledDataSource();
- 获取Connection对象:
Connection connection = dataSource.getConnection();
Druid使用步骤:
- 导入jar包 :
- druid-1.0.9.jar
- mysql-connector-java-5.1.37-bin.jar
- 定义配置文件,手动导入配置文件:
InputStream is = new InputStream(类名.class.getClassLoader().getResourceAsStream(filename));
Properties properties = new Properties();
properties.load(is);
类名 表示当前正在编辑的类,开发中会创建JDBCUtil工具类,该类名即为JDBCUtil
@param filename 配置文件名称
- 创建数据库连接池对象:
DataSource dataSource = DruidDataSourceFactory.createDataSource(properties);
- 获取Connection对象:
Connection connection = dataSource.getConnection();
三、Connection connection = JDBCUtil.getConnection();
开发中会创建工具类来获取 DataSource 和 Connection,将加载配置文件等步骤进行封装
C3P0工具类
转自:
/**
* 创建数据库连接池
*/
public class JDBCUtils {
// 创建一个ThreadLoacl对象,用当前线程作为key
private static ThreadLocal<Connection> tc = new ThreadLocal<Connection>();
// 读取的是C3P0-config默认配置创建数据库连接池对象
private static DataSource ds = new ComboPooledDataSource();
// 获取数据库连接池对象
public static DataSource getDataSource() {
return ds;
}
// 从连接池中获取连接
public static Connection getConnection() throws SQLException {
Connection conn = tc.get();
if (conn == null) {
conn = ds.getConnection();
// 将conn存放到集合tc中
tc.set(conn);//首次创建连接
}
return conn;
}
// 开启事务
public static void startTransaction() {
try {
// 获取连接
Connection conn = this.getConnection();
// 开启事务
/*
* setAutoCommit总的来说就是保持数据的完整性,一个系统的更新操作可能要涉及多张表,需多个SQL语句进行操作
* 循环里连续的进行插入操作,如果你在开始时设置了:conn.setAutoCommit(false);
* 最后才进行conn.commit(),这样你即使插入的时候报错,修改的内容也不会提交到数据库,
*/
conn.setAutoCommit(false);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void commit() {
try {
Connection conn = tc.get();
if (conn != null) {
conn.commit();
}
} catch (Exception e) {
e.printStackTrace();
}
}
public static void rollback() {
try {
// 从集合tc中得到一个连接
Connection conn = tc.get();
if (conn != null) {
// 该方法用于取消在当前事务中进行的更改,并释放当前Connection对象持有的所有数据库锁。此方法只有在手动事务模式下才可用
conn.rollback();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Druid工具类
需要利用静态代码块对此工具类进行初始化,完成加载配置信息和创建DataSurce的步骤
static {
try {
//1.加载配置文件
InputStream is = JDBCUtil.class.getClassLoader().getResourceAsStream("druid.properties");
Properties properties = new Properties();
properties.load(is);
//2.创建连接池对象
ds = DruidDataSourceFactory.createDataSource(properties);
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}