JDBC支持事务操作,一般情况下,事务的操作需要以下步骤:
(1)把数据库连接对象的自动提交SQL的操作的属性关闭。(默认关闭事务-即打开自动提交。因为DDL和DCL的语句都会导致使我立即提交,而事务是由一步或几步数据操作序列组成的逻辑单元,这系列操作要么全部执行,或全部放弃执行。所以要将自动提交属性关闭)
(2) 执行一系列数据库操作,如果成功就提交事务。(调用Connection的commit方法提交)
(3)如果事务中操作没有完全成功,就回滚事务(当Connection遇到一个未处理的SQLException异常时,系统将会非正常的退出,事务也会自动的回滚。但如果程序捕获到了异常,则需要在异常处理块中显示的回滚事务)
代码举例:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ page import="java.sql.*"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>JSP中数据库操作事务处理</title>
</head>
<body>
<body>
<%
Connection conn=null;
Statement stat=null;
ResultSet rs=null;
Class.forName("com.mysql.jdbc.Driver").newInstance();
String url="jdbc:mysql://localhost:3306/spj?user=root&password=19960722w";
conn = DriverManager.getConnection(url);
conn.setAutoCommit(false);
try
{
stat=conn.createStatement();
String sql="insert into j (Jno,Jname,City) values('6','牧场','西安')";
stat.execute(sql);
String sql1="update j set Jno='7' where Jname='牧场'";
stat.execute(sql1);
conn.commit();
conn.setAutoCommit(true);
out.println("事务执行成功,执行回滚操作");
}
catch(Exception e)
{
conn.rollback();
out.println("执行失败,执行回滚操作");
System.out.print(e.getMessage());
}
if(stat!=null)
{
stat.close();
}
if(conn!=null)
{
conn.close();
}
%>
</body>
</body>
</html>