問題が発生しました: mybaties を使用してデータベースにデータを挿入します。挿入は成功したことが示されていますが、データベース内のデータは変更されていませんか?
考えられる理由はいくつかあります。
-
トランザクションがコミットされていません: MyBatis をデータベース操作に使用する場合、トランザクションを手動で送信する必要があります。データの挿入が完了した後、メソッドを呼び出してトランザクションをコミットできます
commit()
。トランザクションがコミットされていない場合、データベース内のデータは実際には保存されません。 -
構成の問題: データベース接続が正しく構成されており、正しいデータベースに接続されていることを確認してください。設定ファイル内のデータベースのURL、ユーザー名、パスワードなどが正しいかどうかを確認できます。
-
SQL ステートメント エラー: 挿入ステートメントが正しいかどうかを確認してください。構文エラーまたはデータ型の不一致により、挿入が失敗する可能性があります。同じ SQL ステートメントを手動で実行して確認してください。
-
データベースの自動コミット設定: 一部のデータベースはデフォルトで自動コミットされます。つまり、SQL ステートメントが実行されるたびに変更が自動的にデータベースに保存されます。データベースが自動コミット モードにある場合は、他のコードがデータを変更したが、時間内に送信されなかったため、目に見える変化が生じなかった可能性があります。
-
データベース トランザクション分離レベル: トランザクションを有効にして挿入操作を実行すると、トランザクション分離レベルが原因である可能性があります。トランザクション分離レベルを READ_COMMITTED に設定するか、トランザクションを無効にして、データが正常に挿入できるかどうかを確認してください。
上記のヒントが問題の発見と解決に役立つことを願っています。問題が解決しない場合は、問題の解決に役立つ詳細とコードを提供してください。
初回タイムコード:
public class InsertDataTest {
public static void main(String[] args) {
Emp emp =new Emp("102","王二浪","男",29,"23232323232323","武当山","2000-10-20");
MyBatisUtil util = new MyBatisUtil();
SqlSession sqlSession = util.getSqlSession();
int insertData = sqlSession.insert("insertData", emp);
System.out.println(insertData);
}
}
結果:
コンソールの結果出力には問題なく、トレンドも出力され期待通りの効果が得られていますが、データベースに戻るとデータが送信されていません。以下に示すように設定したため、オンになっています。トランザクションについては、送信されていないため、トランザクションは送信されません。
<!--
transactionManager 事务管理器
type的值有JDBC和MANAGED
JDBC – 这个配置直接使用了 JDBC 的提交和回滚设施,它依赖从数据源获得的连接来管理事务作用域,
也就是给我们来手动管理事务的提交。
-->
<transactionManager type="JDBC"/>
正しいコード:
public class InsertDataTest {
public static void main(String[] args) {
Emp emp =new Emp("102","王二浪","男",29,"23232323232323","武当山","2000-10-20");
MyBatisUtil util = new MyBatisUtil();
SqlSession sqlSession = util.getSqlSession();
int insertData = sqlSession.insert("insertData", emp);
System.out.println(insertData);
if (sqlSession != null) {
sqlSession.commit();
sqlSession.close();
}
}
}