问答题

数据库的事务处理(Transaction Handling)
以dept表为例,定义一个事务:往表中添加数据,添加多条。测试事务的有效性。源代码见附件。
要求:将测试结果截图上传。

【参考答案】

import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; /**  * 事务的基本用法  *  */ public class TransactionTest {     public static void main(String[] args) {         Connection conn = null;         PreparedStatement ps1 = null;         PreparedStatement ps2 = null;         try {             // 加载驱动类             Class.forName("com.mysql.jdbc.Driver");             conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/hr?characterEncoding=gb2312", "root", "123456");             conn.setAutoCommit(false); // JDBC中默认是true,自动提交事务             String sql = "insert into Emp(Emp_ID,Emp_Name,Job,Manager_ID,Entry_Date,";             sql += "Salary,Bonus,Dept_ID)";             sql += " values (?,?,?,?,?,?,?,5)";// ?是占位符             ps1 = conn.prepareStatement(sql);             ps1.setObject(1, 21);             ps1.setObject(2, "李均宓");             ps1.setObject(3, "其他");             ps1.setObject(4, null);             ps1.setObject(5, "2014-11-08 12:31:52");             ps1.setObject(6, 3500);             ps1.setObject(7, null);             ps1.execute();             System.out.println("插入雇员1数据成功。");             try {                 Thread.sleep(3000);             } catch (InterruptedException e) {                 e.printStackTrace();             }             sql = "insert into Emp(Emp_ID,Emp_Name,Job,Manager_ID,Entry_Date,";             sql += "Salary,Bonus,Dept_ID)";             sql += " values (?,?,?,?,?,?,?,5)";// ?是占位符             ps2 = conn.prepareStatement(sql);             ps2.setObject(1, 22);             ps2.setObject(2, "高嘉悦");             ps2.setObject(3, "其他");             ps2.setObject(4, null);             ps2.setObject(5, "2015-01-08 09:31:52");             ps2.setObject(6, 2500);             ps2.setObject(7, null);             ps2.execute();             System.out.println("插入雇员2数据成功。");             conn.commit();// 提交事务         } catch (ClassNotFoundException e) {             e.printStackTrace();             try {                 conn.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 (conn != null) {                     conn.close();                 }             } catch (SQLException e) {                 e.printStackTrace();             }         }     } }