实验题3 向student表连续插入5条记录,使用JDBC事务保证插入操作正确性,若若5条记录插入成功,则操作成功;否则回滚插入操作。
【核心代码】
package Program03;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Scanner;
import Program01.ConnectionDemo;
public class InsertAndRollback {
static String sql;
public static Connection conn;
public InsertAndRollback() {
ConnectionDemo connection = new ConnectionDemo();
try {
conn = connection.connected();
conn.setAutoCommit(false);
} catch (SQLException e) {
e.printStackTrace();
}
}
public void Insert() {
Scanner scannin = new Scanner(System.in);
PreparedStatement prpdStmt = null;
sql = "insert into student(Sno,Sname,Sage) values(?,?,?)";
try {
prpdStmt = conn.prepareStatement(sql);
} catch (SQLException e2) {
// TODO Auto-generated catch block
e2.printStackTrace();
}
for (int i = 0; i < 5; i++) {
System.out.println("请输入要插入的学生的学号");
String No = scannin.next();
System.out.println("请输入要插入的学生的姓名");
String name = scannin.next();
System.out.println("请输入要插入的学生的年龄");
int age = scannin.nextInt();
try {
prpdStmt.clearBatch();
prpdStmt.setString(1, No);
prpdStmt.setString(2, name);
prpdStmt.setInt(3, age);
prpdStmt.addBatch();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
try {
prpdStmt.executeBatch();
prpdStmt.close();
conn.commit();
} catch (SQLException e) {
try {
System.out.println("学生学号已存在");//按照学号的原因是学号为主键
conn.rollback();
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
e.printStackTrace();
}finally{
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
InsertAndRollback insertDemo = new InsertAndRollback();
insertDemo.Insert();
}
}