MySQL先建立表,字段名称为name和password,Java连接MySQL,使用事务对用户表进行插入操作
使用PrepareStatement接口提供的setObject()方法传参
import java.sql.*;
public class Demo {
public static void main(String[] args) {
//初始化连接对象
Connection connection = null;
PreparedStatement ps1 = null;
PreparedStatement ps2 = null;
try {
//加载MySQL驱动
Class.forName("com.mysql.jdbc.Driver");
//开始连接数据库
connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/java_test", "root", "123456");
connection.setAutoCommit(false); //不自动提交
//事务开始于此
ps1 = connection.prepareStatement("insert into user (name,password) values (?,?)");
//使用?分隔符传递参数
ps1.setObject(1, "A"); //ps1对象设置第一个?的参数
ps1.setObject(2, "12345678");
ps1.execute(); //调用execute()执行
//期间隔10s再插入一行
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
e.printStackTrace();
}
ps2 = connection.prepareStatement("insert into user (name,password) values (?,?)");
ps2.setObject(1, "B");
ps2.setObject(2, "87456321");
ps2.execute();
//事务结束,提交所以事务
connection.commit();
//捕获异常处理
} catch (ClassNotFoundException e) {
e.printStackTrace();
try{
connection.rollback(); //使用rollback方法,未commit 之前 使用rollback 可以恢复数据到修改之前
}catch (SQLException e1){
e1.printStackTrace();
}
} catch (SQLException e) {
e.printStackTrace();
} finally { //逐个关闭对象
try {
if (ps1 != null) {
ps1.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
try {
if (ps2 != null) {
ps2.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
try {
if (connection != null) {
connection.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}