JDBC的事务处理
事務,也是數據庫事務,指的是作為單個邏輯工作單元執行的一系列操作。正常的情況下,操作應該順利進行,與操作相關的所有數據庫信息也成功地更新;
但是,如果在這一系列過程中任何一個環節出了差錯,導致操作失敗了,數據庫中所有信息都必須保持操作前的狀態不變。否則,數據庫的信息將會一片混亂而不可預測。
一個邏輯工作單元要稱為事務,必須滿足ACID(原子性,一致性,隔離性和持久性)。
事務的結束只能有兩種形式:提交和回滾。操作完全成功則提交,產生永久性的修改;操作不完全成功則回滾,恢復到事務開始前的狀態。它們將結束一個事務。
(1)關閉自動提交事務。通過設置連接的自動提交事務屬性為false,如下:
Connection conn = DriverManager.getConnection("連接URL", "用戶名", "密碼"); //關閉自動提交事務 conn.setAutoCommit(false);(2)如果執行順利,提交事務;一旦發生異常,回滾(rollback)事務,如下:
try{conn.setAutoCommit(false); //關閉自動提交事務stmt = conn.createStatement(); //創建會話stmt.executeUpdate("sql語句");conn.commit(); //提交事務 }catch(Exception e) {e.printStackTrace();conn.rollback(); //回滾事務 }(3)關閉連接,如下:
finally{if(stmt != null)stmt.close();if(conn != null)conn.close(); }延伸:
使用JDBC操作數據庫的時候,可以維護一個數據庫工具類和有關數據庫配置的屬性文件,如下:
DBUtil.java
package com.lmb.util;import java.sql.Connection; import java.sql.SQLException; import java.util.ResourceBundle; import org.apache.commons.dbcp.BasicDataSource; /*** 數據庫工具類* @param DRIVER_CLASS type:String 數據庫驅動類* @param URL type:String 要連接的數據庫的URL* @param USER_NAME type:String 要連接的數據庫的登錄名* @param PASSWORD type:String 要連接的數據庫的密碼* @param PAGE_SIZE type:int 商品分頁操作時每頁的最大商品數* @param bds type:BasicDataSource 數據庫連接池對象* @author lmb*/ public class DBUtil {public static final String DRIVER_CLASS;public static final String URL;public static final String USER_NAME;public static final String PASSWORD;public static final int PAGE_SIZE = 12;private static BasicDataSource bds = new BasicDataSource();static { //讀取數據庫配置資源屬性文件,得到數據庫配置屬性ResourceBundle rb = ResourceBundle.getBundle("com.lmb.util.dbconfig");//dbconfig.properties文件的目錄DRIVER_CLASS = rb.getString("DRIVER_CLASS");URL = rb.getString("URL");PASSWORD = rb.getString("PASSWORD");USER_NAME = rb.getString("USER_NAME");//將從資源屬性文件中得到的數據庫配置屬性,傳入新建的數據庫連接池對象bds中去bds.setDriverClassName(DRIVER_CLASS);bds.setUrl(URL);bds.setUsername(USER_NAME);bds.setPassword(PASSWORD);//設置數據庫連接池的初始化連接數bds.setInitialSize(100);//設置數據庫連接池的最小連接數bds.setMinIdle(20);//設置數據庫連接池的最大連接數bds.setMaxActive(150);}/*** 使用數據庫連接池來創建數據庫連接* @return connection 一個數據庫連接*/public static Connection getConnection() {Connection connection = null;try {connection = bds.getConnection();} catch (SQLException e) {e.printStackTrace();}return connection;} }dbconfig.properties(以mysql為例)
# DRIVER_CLASS=com.mysql.jdbc.Driver URL=jdbc\:mysql\://localhost\:3306/hollycrmUSER_NAME=root PASSWORD=root當需要創建數據庫連接時:
…… Connection conn=(Connection) DBUtil.getConnection(); ……總結
- 上一篇: 数据库-表连接
- 下一篇: sql语句转化为分页查询的一种实现