概述
Java Database Connectivity(Java语言连接数据库),是一套由SUN公司开发的,操作数据库的API,专用于操作数据库。此套API存在于java.sql. *
, 这套API是由SUN公司制定,各大数据库厂家根据自己产品的实现原理进行实现(即为驱动)。在使用时我们仅仅需要使用SUN公司制定的接口书写代码,就可以实现对数据库的操作。
JDBC-MySQL
如果我们需要使用Java语言对MySQL数据库进行操作,则需要使用MySQL数据库针对Java制定的操作数据库接口的实现类,此类由MySQL厂家提供,位于MySQL官网,地址为:MySQL驱动下载地址(包含在MySQL数据库下载包中)。
使用Java操作MySQL数据库
使用Java程序操作MySQL数据库的基本操作分为六步。
注册驱动
使用java.sql.DriverManager.registerDriver(Driver driver)
方法选取驱动。
示例:
//注册驱动
DriverManager.registerDriver(new com.mysql.cj.jdbc.Driver());
取得连接
使用java.sql.DriverManager.getConnection(String url, String user, String password)
连接数据库。
//连接数据库
String url = "jdbc:mysql://localhost:3306/test";//test为要操作的数据库
String userName = "root";
String password = "907282050";
Connection connection = DriverManager.getConnection(url,userName,password);
获取数据库操作对象
Statement
对象即为操作数据库的对象,我们通过Statement
来对URL中的数据库进行增删改查等操作。
//获取数据库操作对象
String sql = "select * from dept where User = ?";
PreparedStatement preparedStatement = connection.prepareStatement(sql);
//为sql语句指定值(下标从1开始)
preparedStatement.setString(1,"001");
执行SQL语句
statement的每种操作有多个方法重载,可以执行批量语句,并返回KEY。executeupdate (insert/delete/update)
执行增删改。其他方法请查阅java.sql.Statement
。
//执行SQL语句
resultSet = preparedStatement.executeQuery();
处理查询结果集
//处理查询结果集
String s = "";
while (resultSet.next())
//使用从1开始的下标读取指定列的数据
s = resultSet.getString(1);
释放资源
在数据库操作完毕后必须要关闭资源并且要遵循从小到大依次关闭。
//释放资源
resultSet.close();
statement.close();
connection.close();
完整示例
将连接数据库的三个参数和驱动位置写入到配置.proerpties文件中,利用反射MySQL实现的Driver类,其中中的静态代码块已经执行了创建Driver对象。
import java.sql.*;
import java.util.ResourceBundle;
public class MyJdbc {
public static void main(String[] args) {
Connection connection = null;
PreparedStatement statement = null;
ResultSet resultSet = null;
//使用资源绑定器读取资源
ResourceBundle bundle = ResourceBundle.getBundle("jdbc");
try {
//注册驱动
Class.forName(bundle.getString("className"));
//连接数据库
DriverManager.getConnection(
bundle.getString("url"),
bundle.getString("userName"),
bundle.getString("password")
);
//获取数据库操作对象
String sql = "select * from dept where User = ?";
PreparedStatement preparedStatement = connection.prepareStatement(sql);
//为sql语句指定值(下标从1开始)
preparedStatement.setString(1,"001");
//执行SQL语句
resultSet = preparedStatement.executeQuery();
//处理查询结果集
String s = "";
while (resultSet.next())
//使用从1开始的下标读取指定列的数据
s = resultSet.getString(1);
} catch (SQLException | ClassNotFoundException throwables) {
throwables.printStackTrace();
} finally {
//释放资源
if (resultSet != null){
try {
resultSet.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
if (statement != null){
try {
statement.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
if (connection != null){
try {
connection.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
}
}
}
事务
JDBC中的事务是自动提交的,只要执行任意一条DML语句,则自动提交一次。这是JDBC默认的事务行为,但是在实际的业务当中,通常都是条DML语句共同联合才能完成的,必须保证他们这些DML语句在同一个事务中同时成功或者同时先败。
在连接数据库后事务设置为手动
//设置事务为手动提交
connection.setAutoCommit(false);
操作成功后提交事务
//提交事务
connection.commit();