21.5.2 事务处理的过程演练
【实例21.4】本节将通过一个实例,演示事务处理中的回滚功能。实例代码如下所示。
01 import java.sql.*;
02 ///通过连接数据库来获取数据
03 ///将setAutoCommit(false)设为false,即不自动提交。
04 ///rollback进行回滚
05 public class sqltest1
06 {
07 private Connection con;
08 public static void main(String[]args)
09 {
10 try
11 {
12 sqltest1 test=new sqltest1();
13 Connection con=test.getConnection();
14 con.setAutoCommit(false);
15 String sql="select*from teacherinfo";
16 String sql1="insert into teacherinfo values('朱雪莲','674322','女','24','1981-1-6','上海市','5000')";
17 System.out.println("插入数据后的数据是:");
18 test.getStudent1(sql1);
19 test.getStudent(con, sql);
20 con.rollback();
21 System.out.println("回滚数据后的数据是:");
22 test.getStudent(con, sql);
23 }
24 catch(Exception e){}
25 }
26 public void getStudent1(String sql)
27 {
28 try
29 {
30 Statement st=con.createStatement();
31 st.executeUpdate(sql);
32 st.close();
33 con.close();
34 }
35 catch(Exception e){}
36 }
37 ///通过结果集的getString方法来获得表中的数据字段
38 ///将所有获得来的字段输出
39 public void getStudent(Connection con, String sql)
40 {
41 try
42 {
43 Statement st=con.createStatement();
44 ResultSet rs=st.executeQuery(sql);
45 while(rs.next())
46 {
47 String name1=rs.getString(1);
48 String code1=rs.getString(2);
49 String sexy1=rs.getString(3);
50 String age1=rs.getString(4);
51 System.out.println("\n姓名:"+name1+"\t 学号:"+code1+"\t 性别:"+sexy1+"\t 年龄:"+age1);
52 }
53 st.close();
54 con.close();
55 }
56 catch(Exception e){e.printStackTrace();}
57 }
58 ///用来连接数据库的类
59 ///con是指定用来连接数据库的连接类
60 ///username是进入数据库的用户名
61 ///password是指进入数据库的密码
62 ///url1是连接数据库的URL
63 public Connection getConnection()
64 {
65 String url1="jdbc:odbc:schoolmanage";
66 String username="";
67 String password="";
68 try
69 {
70 Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
71 con=DriverManager.getConnection(url1,username, password);
72 }
73 catch(SQLException e){e.printStackTrace();}
74 catch(ClassNotFoundException ex){ex.printStackTrace();}
75 return con;
76 }
77 }
【代码说明】第63~76行创建数据库的连接,这里通过第65行还是指定了前面创建的ODBC。第26~36行和第39~57行创建了两个getStudent()方法,使用的参数不同,处理的功能也不同。第20行使用了事务的回滚功能。
【运行效果】
插入数据后的数据是:
姓名:王鹏 学号:2001 性别:男 年龄:23
姓名:宋江 学号:2001 性别:男 年龄:23
姓名:李丽 学号:2001 性别:女 年龄:23
姓名:钱敏 学号:2001 性别:女 年龄:23
姓名:朱庭 学号:2001 性别:男 年龄:23
姓名:祖海 学号:2001 性别:女 年龄:23
姓名:周浩 学号:2001 性别:男 年龄:23
姓名:张平 学号:2001 性别:男 年龄:23
姓名:孙军 学号:2001 性别:男 年龄:23
姓名:王俊 学号:2001 性别:男 年龄:23
姓名:李鹏 学号:2001 性别:男 年龄:23
姓名:孙鹏 学号:2001 性别:男 年龄:23
姓名:王海 学号:2001 性别:男 年龄:23
姓名:周洁 学号:2001 性别:女 年龄:23
姓名:宋平 学号:2001 性别:女 年龄:23
姓名:吴浩 学号:2001 性别:男 年龄:23
姓名:武芬 学号:2001 性别:女 年龄:23
姓名:朱雪莲 学号:674322 性别:女 年龄:24
回滚数据后的数据是:
姓名:王鹏 学号:2001 性别:男 年龄:23
姓名:宋江 学号:2001 性别:男 年龄:23
姓名:李丽 学号:2001 性别:女 年龄:23
姓名:钱敏 学号:2001 性别:女 年龄:23
姓名:朱庭 学号:2001 性别:男 年龄:23
姓名:祖海 学号:2001 性别:女 年龄:23
姓名:周浩 学号:2001 性别:男 年龄:23
姓名:张平 学号:2001 性别:男 年龄:23
姓名:孙军 学号:2001 性别:男 年龄:23
姓名:王俊 学号:2001 性别:男 年龄:23
姓名:李鹏 学号:2001 性别:男 年龄:23
姓名:孙鹏 学号:2001 性别:男 年龄:23
姓名:王海 学号:2001 性别:男 年龄:23
姓名:周洁 学号:2001 性别:女 年龄:23
姓名:宋平 学号:2001 性别:女 年龄:23
姓名:吴浩 学号:2001 性别:男 年龄:23
姓名:武芬 学号:2001 性别:女 年龄:23
经过回滚后,原先插入的最后一条数据已经没有了。这是为了保证数据的完整性和一致性,而进行的数据库的回滚操作。