sql >> データベース >  >> RDS >> Oracle

JDBC と Oracle の conn.commit と conn.setAutocommit が正しく機能しない

    TRUNCATE 暗黙的にコミットするデータ定義言語 (DDL) コマンドです。 DELETE を使用した場合、何もコミットされませんでした

    // Deletes ALL Rows; No WHERE Clause
    pstmnt.executeQuery("DELETE FROM bd_vehicles_temp_");
    

    理由 TRUNCATE Rollback Tablespace にコピーせずにテーブル データを直接削除する DDL ステートメントです。 .それが TRUNCATE の理由です の方が高速ですが、ロールバックできません。

    編集 :(私の INSERT もコミットしているのはなぜですか?)

    接続を閉じようとしているからです Connection#rollback を呼び出さずに() .

    接続の場合 明示的な commit なしで閉じられる またはロールバック; JDBC はここで特に何も義務付けていないため、動作はデータベース ベンダーに依存します。 Oracle の場合、暗黙の commit

    そう、ただ rollback() 接続を閉じる前に変更 ついに ブロック

    pstmnt = conn.createStatement();
    
    pstmnt.executeQuery("DELETE FROM bd_vehicles_temp_1");
    System.out.println("Query Executed");
    
    conn.rollback();
    System.out.println("Changes rolled back");
    


    1. SQL Serverクエリ:行が列を作る(ピボット?)

    2. Oracleでサポートされている言語のリストを返す方法

    3. MySQLデータベースに2回保存されたデータ。私が何を間違えているのか分かりませんか?

    4. datagridviewの行の値を取得し、同じ行のボタンを使用して別のフォームに渡す方法