day18-事务与连接池 3.jdbc中事务操作介绍
生活随笔
收集整理的這篇文章主要介紹了
day18-事务与连接池 3.jdbc中事务操作介绍
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
那么我們都是通過程序操作數據庫。所以要了解jdbc下怎樣對事務操作。jdbc如何操作事務?
自動事務false那就不開了唄相當于開啟事務。
package cn.itcast.transaction;import java.sql.Connection; import java.sql.SQLException; import java.sql.Statement;import cn.itcast.utils.JdbcUtils; //代碼加上事務了加上回滾了加上提交了//jdbc中事務操作 public class TransactionTest1 {public static void main(String[] args) throws SQLException {//修改id=2這個人的money=500; String sql = "update account set money=500 where id=2"; Connection con = JdbcUtils.getConnection();con.setAutoCommit(false);//開啟事務,相當于start transaction; Statement st = con.createStatement(); st.executeUpdate(sql);//事務回滾 //con.rollback(); con.commit();//事務提交 st.close(); con.close(); } } package cn.itcast.transaction;import java.sql.Connection; import java.sql.SQLException; import java.sql.Statement;import cn.itcast.utils.JdbcUtils; //代碼加上事務了加上回滾了加上提交了//jdbc中事務操作 public class TransactionTest2 {public static void main(String[] args) {//修改id=2這個人的money=500; String sql = "update account set money=500 where id=2";//事務操作的異常不能說想拋就拋 Connection con = null; Statement st = null;try {//如果數據庫操作過程中捕獲異常了,con = JdbcUtils.getConnection();con.setAutoCommit(false);//開啟事務,相當于start transaction;st = con.createStatement();st.executeUpdate(sql); } catch (SQLException e) {e.printStackTrace();//事務回滾 有異常就把事務回滾,有異常就說明出問題了//出問題就把數據恢復到原始,那就回滾吧try {con.rollback();} catch (SQLException e1) {e1.printStackTrace();} }finally{//finally里面的內容肯定是能執行到的try {con.commit();//事務提交st.close();//資源關閉 釋放資源操作 con.close();//資源關閉 } catch (SQLException e) {e.printStackTrace();}}} } package cn.itcast.utils;import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.ResourceBundle;public class JdbcUtils {private static final String DRIVERCLASS;private static final String URL;private static final String USERNAME;private static final String PASSWORD;private static final ThreadLocal<Connection> tl = new ThreadLocal<Connection>();static {DRIVERCLASS = ResourceBundle.getBundle("jdbc").getString("driverClass");URL = ResourceBundle.getBundle("jdbc").getString("url");USERNAME = ResourceBundle.getBundle("jdbc").getString("username");PASSWORD = ResourceBundle.getBundle("jdbc").getString("password");}static {try {// 將加載驅動操作,放置在靜態代碼塊中.這樣就保證了只加載一次. Class.forName(DRIVERCLASS);} catch (ClassNotFoundException e) {e.printStackTrace();}}public static Connection getConnection() throws SQLException {Connection con = tl.get();// 從ThreadLocal中獲取Connection。第一次獲取得到的是null.if (con == null) {// 2.獲取連接con = DriverManager.getConnection(URL, USERNAME, PASSWORD);tl.set(con); // 將con裝入到ThreadLocal中。 }// tl.remove(); //解除return con;}// 關閉操作public static void closeConnection(Connection con) throws SQLException {if (con != null) {con.close();}}public static void closeStatement(Statement st) throws SQLException {if (st != null) {st.close();}}public static void closeResultSet(ResultSet rs) throws SQLException {if (rs != null) {rs.close();}} }
?
轉載于:https://www.cnblogs.com/ZHONGZHENHUA/p/6623289.html
總結
以上是生活随笔為你收集整理的day18-事务与连接池 3.jdbc中事务操作介绍的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [SDOI2015]星际战争
- 下一篇: MonkeyServer的使用及自动化