目次
1.1 Statement createStatement() throws SQLException;
1.2 PreparedStatement prepareStatement(String sql) throws SQLException ;
1.3 void setAutoCommit(boolean autoCommit) throws SQLException;
1.4 void commit() throws SQLException;
1.5 void rollback() throws SQLException;
2 トランザクションのロールバックが必要な典型的なケース: 銀行transfer case
ホームページ Java &#&チュートリアル トランザクションの送信とロールバックの JDBC 実装の例

トランザクションの送信とロールバックの JDBC 実装の例

Jul 20, 2017 pm 07:05 PM
jdbc 事務

1. Connectionクラスでよく使われるメソッドの復習

1.1 Statement createStatement() throws SQLException;

Statementインスタンスを作成する(つまりSQL実行オブジェクトを作成する)

1.2 PreparedStatement prepareStatement(String sql) throws SQLException ;

PreparedStatementオブジェクトを作成する(すなわち、プリコンパイルされたSQL実行オブジェクトを作成する)

1.3 void setAutoCommit(boolean autoCommit) throws SQLException;

トランザクションの自動送信を設定する(falseは自動送信をオフにすることを意味し、trueは自動送信を開始する)

1.4 void commit() throws SQLException;

手動でトランザクションをコミット

1.5 void rollback() throws SQLException;

トランザクションの手動ロールバック

2 トランザクションのロールバックが必要な典型的なケース: 銀行transfer case

transfer out と transfer in は 1 つのトランザクションです。transfer out は成功したが、transfer in が失敗した場合は、トランザクションをロールバックする必要があります。そうしないと、transferer の残高は減少しますが、transferer の残高は減少しません。

注: トランザクションのロールバックの送信は、 Connection によって提供されるメソッドを通じて呼び出されます。 トランザクションは依然として データベースの実装に依存します。 Connection のメソッドは本質的にデータベース トランザクション メカニズムを呼び出します。

2.1 トランザクション管理を使用しない 譲渡業務

デメリット:譲渡が成功し譲渡に失敗した場合、譲渡者の残高は減少しますが、譲渡者の残高は変わりません

プロジェクト構造図

 1 package cn.xiangxu.entity; 2  3 import java.sql.Connection; 4 import java.sql.PreparedStatement; 5 import java.util.Scanner; 6  7 import cn.xiangxu.tools.DBUtil; 8  9 public class Test {10     public static void main(String[] args) {11         Scanner scanner = new Scanner(System.in);12         System.out.println("请输入转出用户名:");13         String outName = scanner.nextLine();14         System.out.println("请输入需要转出的资金额度:");15         Double money = Double.parseDouble(scanner.nextLine());16         System.out.println("请输入转入用户名:");17         String inName = scanner.nextLine();18         System.out.println("转出账户为:" + outName + "转出金额为:" + money + "转入账户为:" + inName);19         20         21         Connection conn = null;22         try {23             conn = DBUtil.getConnection(); // 实例化连接对象24             25 //            conn.setAutoCommit(false); // 关闭自动提交事务功能26             27             String sql = "UPDATE client "28                     + "SET account = account - ? " 
29                     + "WHERE name = ? ";30             PreparedStatement ps = conn.prepareStatement(sql);31             ps.setDouble(1, money);32             ps.setString(2, outName);33             Integer rs = ps.executeUpdate();34             if(rs > 0) {35                 System.out.println("转出成功");36             } else {37                 System.out.println("转出失败");38                 return; // 转出失败跳出函数,不再执行下面的语句;但是finally中的语句还是会执行的,因为就算天塌下来finally中的语句都会执行39             }40             41             System.out.println("======分割线=======");42             43             String sql_in = "UPDATE client "44                     + "SET account = account + ? " 
45                     + "WHERE name = ? ";46             PreparedStatement ps_in = conn.prepareStatement(sql_in);47             ps_in.setDouble(1, money);48             ps_in.setString(2, inName);49             Integer judge_in = ps_in.executeUpdate();50             if(judge_in > 0) {51                 System.out.println("转入成功");52 //                conn.commit(); // 转出、转入都成功就提交事务53             } else {54                 System.out.println("转入失败");55 //                conn.rollback(); // 转出成功、转入失败就回滚事务56             }57             58 //            conn.setAutoCommit(true); // 打开自动提交事务59             60         } catch (Exception e) {61             // TODO Auto-generated catch block62             e.printStackTrace();63         } finally {64             System.out.println("我是finally中的语句哟");65             try {66                 DBUtil.closeConnection();67             } catch (Exception e) {68                 // TODO Auto-generated catch block69                 e.printStackTrace();70             }71         }72     }73 }
ログイン後にコピー
業務Javaソースコードの転送
1 CREATE TABLE client  (2     id INT (10)  PRIMARY KEY,3     name VARCHAR (10),4     pwd VARCHAR (10),5     account INT (20)6 );
ログイン後にコピー
SQL文
 1 package cn.xiangxu.tools; 2  3 import java.io.IOException; 4 import java.io.InputStream; 5 import java.sql.Connection; 6 import java.sql.SQLException; 7 import java.util.Properties; 8  9 import org.apache.commons.dbcp.BasicDataSource;10 11 public class DBUtil {12     /*13      * ThreadLocal用于线程跨方法共享数据使用14      * ThreadLocal内部有一个Map,  key为需要共享数据的线程本身,value就是其需要共享的数据15      */16     private static ThreadLocal<Connection> tl; // 声明一个类似于仓库的东西17     private static BasicDataSource dataSource; // 声明一个数据库连接池对象18     19     // 静态代码块,在类加载的时候执行,而且只执行一次20     static {21         tl = new ThreadLocal<Connection>(); // 实例化仓库对象22         dataSource = new BasicDataSource(); // 实例数据库连接池对象23 24         Properties prop = new Properties(); // 创建一个Properties对象用(该对象可以用来加载配置文件中的属性列表)25         InputStream is = DBUtil.class.getClassLoader().getResourceAsStream("config/mysql.properties"); // 读取配置文件信息26         try {27             prop.load(is); // 加载配置文件中的属性列表28             29             String driverClassName = prop.getProperty("driverClassName"); // 获取属性信息30             String url = prop.getProperty("url");31             String username = prop.getProperty("username");32             String password = prop.getProperty("password");33             Integer maxActive = Integer.parseInt(prop.getProperty("maxActive"));34             Integer maxWait = Integer.parseInt(prop.getProperty("maxWait"));35             36             dataSource.setDriverClassName(driverClassName); // 初始化数据库连接池(即:配置数据库连接池的先关参数)37             dataSource.setUrl(url);38             dataSource.setUsername(username);39             dataSource.setPassword(password);40             dataSource.setMaxActive(maxActive);41             dataSource.setMaxWait(maxWait);42             43             is.close(); // 关闭输入流,释放资源44         } catch (IOException e) {45             // TODO Auto-generated catch block46             e.printStackTrace();47         } 
48         49     }50     51     /**52      * 创建连接对象(注意:静态方法可以直接通过类名来调用)53      * @return 连接对象54      * @throws Exception55      */56     public static Connection getConnection() throws Exception { 
57         try {58             Connection conn = dataSource.getConnection(); // 创建连接对象(利用数据库连接池进行创建)59             tl.set(conn); // 将连接对象放到仓库中60             return conn; 
61         } catch (Exception e) {62             // TODO Auto-generated catch block63             e.printStackTrace();64             throw e;65         }66     }67     68     /**69      * 关闭连接对象(注意:静态方法可以通过类名直接调用)70      * @throws Exception71      */72     public static void closeConnection() throws Exception {73         Connection conn = tl.get(); // 从仓库中取出连接对象74         tl.remove(); // 清空仓库75         if(conn != null) { // 判断连接对象是否释放资源76             try {77                 conn.close();78             } catch (Exception e) {79                 // TODO Auto-generated catch block80                 e.printStackTrace();81                 throw e;82             }83         }84     }85 86 }
ログイン後にコピー
データベース接続プールのJavaソースコード
1 # zhe shi zhu shi , yi ban bu yong zhong wen 
2 # deng hao liang bian mei you kong ge, mo wei mei you fen hao3 # hou mian bu neng you kong ge4 driverClassName=com.mysql.jdbc.Driver5 url=jdbc:mysql://localhost:3306/test6 username=root7 password=1828388 maxActive=1009 maxWait=3000
ログイン後にコピー
データベース情報ファイル
 1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 "> 2   <modelVersion>4.0.0</modelVersion> 3   <groupId>cn.xiangxu</groupId> 4   <artifactId>testJDBC</artifactId> 5   <version>0.0.1-SNAPSHOT</version> 6   <dependencies> 7       <dependency> 8           <groupId>mysql</groupId> 9           <artifactId>mysql-connector-java</artifactId>10           <version>5.1.37</version>11       </dependency>12       <dependency>13           <groupId>junit</groupId>14           <artifactId>junit</artifactId>15           <version>4.12</version>16       </dependency>17       <dependency>18           <groupId>commons-dbcp</groupId>19           <artifactId>commons-dbcp</artifactId>20           <version>1.4</version>21       </dependency>22   </dependencies>23 </project>
ログイン後にコピー
maven依存関係ファイル
2.2 トランザクション制御を使用した転送業務

 1 package cn.xiangxu.entity; 2  3 import java.sql.Connection; 4 import java.sql.PreparedStatement; 5 import java.sql.SQLException; 6 import java.util.Scanner; 7  8 import cn.xiangxu.tools.DBUtil; 9 10 public class Test {11     public static void main(String[] args) {12         Scanner scanner = new Scanner(System.in);13         System.out.println("请输入转出用户名:");14         String outName = scanner.nextLine();15         System.out.println("请输入需要转出的资金额度:");16         Double money = Double.parseDouble(scanner.nextLine());17         System.out.println("请输入转入用户名:");18         String inName = scanner.nextLine();19         System.out.println("转出账户为:" + outName + "转出金额为:" + money + "转入账户为:" + inName);20         21         22         Connection conn = null;23         try {24             conn = DBUtil.getConnection(); // 实例化连接对象25             26             conn.setAutoCommit(false); // 关闭自动提交事务功能27             28             String sql = "UPDATE client "29                     + "SET account = account - ? " 
30                     + "WHERE name = ? ";31             PreparedStatement ps = conn.prepareStatement(sql);32             ps.setDouble(1, money);33             ps.setString(2, outName);34             Integer rs = ps.executeUpdate();35             if(rs > 0) {36                 System.out.println("转出成功");37             } else {38                 System.out.println("转出失败");39                 return; // 转出失败跳出函数,不再执行下面的语句;但是finally中的语句还是会执行的,因为就算天塌下来finally中的语句都会执行40             }41             42             System.out.println("======分割线=======");43             44             String sql_in = "UPDATE client "45                     + "SET account = account + ? " 
46                     + "WHERE name = ? ";47             PreparedStatement ps_in = conn.prepareStatement(sql_in);48             ps_in.setDouble(1, money);49             ps_in.setString(2, inName);50             Integer judge_in = ps_in.executeUpdate();51             if(judge_in > 0) {52                 System.out.println("转入成功");53                 conn.commit(); // 转出、转入都成功就提交事务54             } else {55                 System.out.println("转入失败");56                 conn.rollback(); // 转出成功、转入失败就回滚事务57             }58             59             conn.setAutoCommit(true); // 打开自动提交事务60             61         } catch (Exception e) {62             // TODO Auto-generated catch block63             try {64                 conn.rollback(); // 捕获到异常后也需要进行事务回滚65             } catch (SQLException e1) {66                 // TODO Auto-generated catch block67                 e1.printStackTrace();68             } 
69             e.printStackTrace();70         } finally {71             System.out.println("我是finally中的语句哟");72             try {73                 DBUtil.closeConnection();74             } catch (Exception e) {75                 // TODO Auto-generated catch block76                 e.printStackTrace();77             }78         }79     }80 }
ログイン後にコピー

転送業務のJavaソースコード
2.3 自動送信機能をカプセル化する、手動送信機能と手動ロールバック機能を 1 つのクラスに

  1 package cn.xiangxu.tools;  2   3 import java.io.IOException;  4 import java.io.InputStream;  5 import java.sql.Connection;  6 import java.sql.SQLException;  7 import java.util.Properties;  8   9 import org.apache.commons.dbcp.BasicDataSource; 10  11 public class DBUtil { 12     /* 13      * ThreadLocal用于线程跨方法共享数据使用 14      * ThreadLocal内部有一个Map,  key为需要共享数据的线程本身,value就是其需要共享的数据 15      */ 16     private static ThreadLocal<Connection> tl; // 声明一个类似于仓库的东西 17     private static BasicDataSource dataSource; // 声明一个数据库连接池对象 18      19     // 静态代码块,在类加载的时候执行,而且只执行一次 20     static { 21         tl = new ThreadLocal<Connection>(); // 实例化仓库对象 22         dataSource = new BasicDataSource(); // 实例数据库连接池对象 23  24         Properties prop = new Properties(); // 创建一个Properties对象用(该对象可以用来加载配置文件中的属性列表) 25         InputStream is = DBUtil.class.getClassLoader().getResourceAsStream("config/mysql.properties"); // 读取配置文件信息 26         try { 27             prop.load(is); // 加载配置文件中的属性列表 28              29             String driverClassName = prop.getProperty("driverClassName"); // 获取属性信息 30             String url = prop.getProperty("url"); 31             String username = prop.getProperty("username"); 32             String password = prop.getProperty("password"); 33             Integer maxActive = Integer.parseInt(prop.getProperty("maxActive")); 34             Integer maxWait = Integer.parseInt(prop.getProperty("maxWait")); 35              36             dataSource.setDriverClassName(driverClassName); // 初始化数据库连接池(即:配置数据库连接池的先关参数) 37             dataSource.setUrl(url); 38             dataSource.setUsername(username); 39             dataSource.setPassword(password); 40             dataSource.setMaxActive(maxActive); 41             dataSource.setMaxWait(maxWait); 42              43             is.close(); // 关闭输入流,释放资源 44         } catch (IOException e) { 45             // TODO Auto-generated catch block 46             e.printStackTrace(); 47         } 
 48          49     } 50      51     /** 52      * 创建连接对象(注意:静态方法可以直接通过类名来调用) 53      * @return 连接对象 54      * @throws Exception 55      */ 56     public static Connection getConnection() throws Exception { 
 57         try { 58             Connection conn = dataSource.getConnection(); // 创建连接对象(利用数据库连接池进行创建) 59             tl.set(conn); // 将连接对象放到仓库中 60             return conn; 
 61         } catch (Exception e) { 62             // TODO Auto-generated catch block 63             e.printStackTrace(); 64             throw e; 65         } 66     } 67      68     /** 69      * 关闭连接对象(注意:静态方法可以通过类名直接调用) 70      * @throws Exception 71      */ 72     public static void closeConnection() throws Exception { 73         Connection conn = tl.get(); // 从仓库中取出连接对象 74         tl.remove(); // 清空仓库 75         if(conn != null) { // 判断连接对象是否释放资源 76             try { 77                 conn.close(); 78             } catch (Exception e) { 79                 // TODO Auto-generated catch block 80                 e.printStackTrace(); 81                 throw e; 82             } 83         } 84     } 85      86     /** 87      * 在执行SQL语句前关闭JDBC的自动提交事务功能 88      * @throws SQLException 89      */ 90     public static void tansBegin() throws SQLException { 91         try { 92             tl.get().setAutoCommit(false); // 从仓库中获取连接对象并调用setAutoCommit来关闭自动提交事务功能 93         } catch(SQLException e) { 94             e.printStackTrace(); 95             throw e; 96         } 97     } 98      99     /**100      * 手动回滚功能101      * @throws SQLException102      */103     public static void transBack() throws SQLException {104         tl.get().rollback(); // 从仓库中获取连接对象并调用rollback来实现事务回滚操作105         tl.get().setAutoCommit(true); // 回滚启动事务自动提交功能106     }107     108     /**109      * 手动提交功能110      * @throws SQLException111      */112     public static void transCommit() throws SQLException {113         tl.get().commit(); // 从仓库中获取连接对象并调用commit来实现事务提交操作114         tl.get().setAutoCommit(true); // 提交后启动事务自动提交功能115     }116 117 }
ログイン後にコピー

DBUtil
 1 package cn.xiangxu.entity; 2  3 import java.sql.Connection; 4 import java.sql.PreparedStatement; 5 import java.sql.SQLException; 6 import java.util.Scanner; 7  8 import cn.xiangxu.tools.DBUtil; 9 10 public class Test {11     public static void main(String[] args) {12         Scanner scanner = new Scanner(System.in);13         System.out.println("请输入转出用户名:");14         String outName = scanner.nextLine();15         System.out.println("请输入需要转出的资金额度:");16         Double money = Double.parseDouble(scanner.nextLine());17         System.out.println("请输入转入用户名:");18         String inName = scanner.nextLine();19         System.out.println("转出账户为:" + outName + "转出金额为:" + money + "转入账户为:" + inName);20         21         22         Connection conn = null;23         try {24             conn = DBUtil.getConnection(); // 实例化连接对象25             26             DBUtil.tansBegin(); // 关闭自动提交事务功能27             28             String sql = "UPDATE client "29                     + "SET account = account - ? " 
30                     + "WHERE name = ? ";31             PreparedStatement ps = conn.prepareStatement(sql);32             ps.setDouble(1, money);33             ps.setString(2, outName);34             Integer rs = ps.executeUpdate();35             if(rs > 0) {36                 System.out.println("转出成功");37             } else {38                 System.out.println("转出失败");39                 return; // 转出失败跳出函数,不再执行下面的语句;但是finally中的语句还是会执行的,因为就算天塌下来finally中的语句都会执行40             }41             42             System.out.println("======分割线=======");43             44             String sql_in = "UPDATE client "45                     + "SET account = account + ? " 
46                     + "WHERE name = ? ";47             PreparedStatement ps_in = conn.prepareStatement(sql_in);48             ps_in.setDouble(1, money);49             ps_in.setString(2, inName);50             Integer judge_in = ps_in.executeUpdate();51             if(judge_in > 0) {52                 System.out.println("转入成功");53                 DBUtil.transCommit(); // 转出、转入都成功就提交事务54             } else {55                 System.out.println("转入失败");56                 DBUtil.transBack(); // 转出成功、转入失败就回滚事务57             }58             59         } catch (Exception e) {60             // TODO Auto-generated catch block61             try {62                 DBUtil.transBack();// 捕获到异常后也需要进行事务回滚63             } catch (SQLException e1) {64                 // TODO Auto-generated catch block65                 e1.printStackTrace();66             } 
67             e.printStackTrace();68         } finally {69             System.out.println("我是finally中的语句哟");70             try {71                 DBUtil.closeConnection();72             } catch (Exception e) {73                 // TODO Auto-generated catch block74                 e.printStackTrace();75             }76         }77     }78 }
ログイン後にコピー
ビジネス Java ソースコードを転送

以上がトランザクションの送信とロールバックの JDBC 実装の例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Java8 (291) 以降、TLS1.1 が無効になり、JDBC が SSL を使用して SqlServer2008 に接続できなくなります。 Java8 (291) 以降、TLS1.1 が無効になり、JDBC が SSL を使用して SqlServer2008 に接続できなくなります。 May 16, 2023 pm 11:55 PM

Java8-291 以降、TLS1.1 が無効になっているため、JDBC が SSL を使用して SqlServer2008 に接続できません。どうすればよいですか? java.security ファイルを変更する解決策は次のとおりです。 1. jre の java.security ファイルを見つけます。それが jre である場合は、lib/security の {JAVA_HOME}/jre/ に移動します (例:???C:\ProgramFiles\Java\jre1.8.0_301\lib\security)。Eclipse グリーンのインストール不要のポータブル バージョンの場合、インストール フォルダーで java.security を検索します (例: ????xxx\plugins \org)

ロック待機タイムアウトを超過しました。トランザクションを再起動してください - MySQL エラーの解決方法: トランザクション待機タイムアウト ロック待機タイムアウトを超過しました。トランザクションを再起動してください - MySQL エラーの解決方法: トランザクション待機タイムアウト Oct 05, 2023 am 08:46 AM

Lockwaittimeoutexceeded;tryrestartingtransaction - MySQL エラーの解決方法: トランザクション待機タイムアウト。MySQL データベースを使用すると、一般的なエラーが発生することがあります: Lockwaittimeoutexceeded;tryrestartingtransaction。このエラーは、トランザクション待機タイムアウトを示します。このエラーは通常、次の場合に発生します。

MySQL トランザクション処理: 自動送信と手動送信の違い MySQL トランザクション処理: 自動送信と手動送信の違い Mar 16, 2024 am 11:33 AM

MySQL トランザクション処理: 自動送信と手動送信の違い。MySQL データベースでは、トランザクションは一連の SQL ステートメントです。すべての実行が成功するか、すべての実行が失敗するかのいずれかで、データの一貫性と整合性が保証されます。 MySQL では、トランザクションは自動送信と手動送信に分けられ、その違いはトランザクション送信のタイミングとトランザクションの制御範囲にあります。以下では、自動送信と手動送信の違いを詳しく紹介し、具体的なコード例を示して説明します。 1. MySQL が表示されない場合は自動的に送信する

PHP PDO チュートリアル: 基本から習得までの上級ガイド PHP PDO チュートリアル: 基本から習得までの上級ガイド Feb 19, 2024 pm 06:30 PM

1. PDO の概要 PDO は、データベースを操作するためのオブジェクト指向の方法を提供する PHP の拡張ライブラリです。 PDO は、Mysql、postgresql、oracle、SQLServer などのさまざまなデータベースをサポートします。 PDO を使用すると、開発者は統合 API を使用してさまざまなデータベースを操作できるため、さまざまなデータベースを簡単に切り替えることができます。 2. PDO はデータベースに接続します PDO を使用してデータベースに接続するには、まず PDO オブジェクトを作成する必要があります。 PDO オブジェクトのコンストラクターは、データベース タイプ、ホスト名、データベース ユーザー名、およびパスワードの 3 つのパラメーターを受け取ります。たとえば、次のコードは、mysql データベースに接続するオブジェクトを作成します。 $dsn="mysq

Java で JDBC バッチ挿入を実装する方法 Java で JDBC バッチ挿入を実装する方法 May 18, 2023 am 10:02 AM

1. JDBC では、executeBatch メソッドを使用して複数の dml ステートメントをバッチで実行でき、executeUpdate を個別に実行するより効率が高いことを説明します。その原理は何ですか? mysqlとoracleでバッチ実行を実装するにはどうすればよいですか?この記事ではその原理を紹介します。 2. 実験の導入 この実験は、次の 3 つの手順で実行されます: a. mysql で jdbc バッチ実行と単一実行にかかる時間を記録する; b. oracle で jdbc バッチ実行と単一実行にかかる時間を記録する; c. jdbc バッチ実行と単一実行にかかる時間を記録するoracleplsql のバッチ実行と単一実行を記録します。実行に時間がかかる関連する Java およびデータベースのバージョンは次のとおりです: Java17、Mysql8、Oracle

Java エラー: JDBC エラー、解決方法と回避方法 Java エラー: JDBC エラー、解決方法と回避方法 Jun 24, 2023 pm 02:40 PM

Java のアプリケーションが広く普及しているため、Java プログラムがデータベースに接続するときに JDBC エラーが発生することがよくあります。 JDBC (JavaDatabaseConnectivity) は、データベースへの接続に使用される Java のプログラミング インターフェイスです。したがって、JDBC エラーは、Java プログラムがデータベースと対話するときに発生するエラーです。ここでは、最も一般的な JDBC エラーのいくつかと、それらを解決および回避する方法を示します。 ClassNotFoundException これは最も一般的な JDBC です

MongoDB テクノロジー開発で遭遇するトランザクション管理問題の解決策の分析 MongoDB テクノロジー開発で遭遇するトランザクション管理問題の解決策の分析 Oct 08, 2023 am 08:15 AM

MongoDB テクノロジー開発で遭遇するトランザクション管理問題の解決策の分析 最新のアプリケーションがますます複雑かつ大規模になるにつれて、データのトランザクション処理要件もますます高くなっています。 MongoDB は、人気のある NoSQL データベースとして、データ管理において優れたパフォーマンスとスケーラビリティを備えています。ただし、MongoDB はデータの一貫性とトランザクション管理が比較的弱く、開発者にとって課題となっています。この記事では、MongoDB 開発で遭遇するトランザクション管理の問題を調査し、いくつかの解決策を提案します。

MySQL トランザクションの原則と適用シナリオ MySQL トランザクションの原則と適用シナリオ Mar 02, 2024 am 09:51 AM

MySQL トランザクションの原理と適用シナリオ データベース システムでは、トランザクションは一連の SQL 操作であり、これらの操作はすべて正常に実行されるか、すべて失敗してロールバックされます。一般的に使用されるリレーショナル データベース管理システムとして、MySQL はトランザクション特性をサポートし、データベース内のデータの一貫性、分離性、耐久性、アトミック性を保証できます。この記事では、MySQL トランザクションの基本原則から始めて、そのアプリケーション シナリオを紹介し、読者の参考となる具体的なコード例を示します。 MySQL トランザクションの原則: My

See all articles