JDBC中的事务处理指的是事务的一致性等问题,例如插入一条数据(id,name,password)到表中,另一条数据(address,id)到另一张表中,并且两条数据是相关联的,那么假设第一条数据插入成功,但是第二条数据由于异常没有插入成功,那么此时为了保证事务的一致性、完整性,则两条数据都不能够插入。
1、
创建Conn连接类
Conn.java
package com.test.conn; import java.sql.Connection;
import java.sql.DriverManager; public class Conn { public Connection getCon(){
try{
Class.forName("com.mysql.jdbc.Driver");
String url = "jdbc:mysql://localhost/mytest?useUnicode = true&characterEncoding=utf-8";
String user="root";
String password="";
Connection conn = DriverManager.getConnection(url,user,password);
System.out.println(conn.getMetaData().getURL());
return conn;
}
catch(Exception e){
e.printStackTrace();
return null;
}
}
}
2、Service_ForData.java 用来测试调用,其中加入了事务处理
package com.test.service; import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException; public class Service_ForData { private static Connection conn ;
private static PreparedStatement pstmt; public static void main(String[] args) {
conn = new com.test.conn.Conn().getCon(); try {
conn.setAutoCommit(false);
addPerson(conn);
addAddress(conn);
conn.commit();
} catch (Exception e) {
System.out.println("捕获到异常");
e.printStackTrace();
try {
conn.rollback();
System.out.println("事务回滚成功");
} catch (SQLException e1) { e1.printStackTrace();
} } } public static void addPerson(Connection conn) throws Exception{ pstmt = conn.prepareStatement("insert into person (id,name,password) values(?,?,?)");
pstmt.setInt(,);
pstmt.setString(,"tom");
pstmt.setString(, "");
pstmt.executeUpdate(); } public static void addAddress(Connection conn) throws Exception{
pstmt = conn.prepareStatement("insert into address (id,address,userid) values(?,?,?)");
pstmt.setInt(, );
pstmt.setString(, "obsnsjka");
pstmt.setInt(, );
pstmt.executeUpdate();
} }
由于addAddress()方法插入不成功,所以两条记录都不插入
结果截图如下: