-2

データベースに接続し、Java プログラムで準備済みステートメントを使用してその中のテーブルを更新しようとしています。更新しようとしています。これが私のコードです:

public void updateTable(Map<String, String> mp) throws SQLException {

    String URL = "jdbc:oracle:thin:@localhost:1500:orcl";
    String USER = "user";
    String PASS = "password";
    Connection con = DriverManager.getConnection(URL, USER, PASS);

    PreparedStatement updateTableName = null;


    String updateString =
        "update database.Views.TABLE " +
        "set TABLENAME = ? " +
        "where TABLENAME = ?";

    try {
        con.setAutoCommit(false);
        updateTableName = con.prepareStatement(updateString);

        for (Map.Entry<String, String> e : mp.entrySet()) 
        {
            updateTableName.setString(1, e.getValue());
            updateTableName.setString(2, e.getKey());
            updateTableName.executeUpdate();
            con.commit();

        }

    } catch (SQLException e) {

        if (con != null) 
        {
            try {
                System.err.print("Transaction is being rolled back");
                con.rollback();
            } catch (SQLException excep) {

            }
        }
    } finally {
        if (updateTableName != null) 
        {
            updateTableName.close();
        }
        con.setAutoCommit(true);
}
    con.close();
 }

コードを実行するたびに、「トランザクションがロールバックされています」と表示されます。try ステートメントにどのようなエラーがあるか分かりますか? 前もって感謝します!

編集:例外を出力するように変更すると、ORA-00971: Missing SET keyword と表示されます。

4

3 に答える 3

6
    "update database.Views.TABLE" +
    "set TABLENAME = ?" +
    "where TABLENAME = ?";

この文字列の値は

update database.Views.TABLEset TABLENAME = ?where TABLENAME = ?

これは有効な SQL ではありません。

于 2013-06-19T17:57:13.630 に答える
0

SQLException最初のcatchブロックでキャッチしたものをログに記録してみてください。これにより、問題が何であるかを明確に示すことができます。

いずれにせよ、TABLEは SQL 予約済みキーワードであり、テーブルにそのような名前を付けることは許可されるべきではありません。少なくともTABLE1、より適切な名前がないため、名前を に変更してみてください。

于 2013-06-19T18:15:49.113 に答える
0

わかりました、@Spiff TABLE1を更新するだけで最も単純なクエリに変更しましたが、次のものも取り出しました。

String updateString =
    "update database.Views.TABLE " +
    "set TABLENAME = ? " +
    "where TABLENAME = ?";

そしてそれを1行に結合しました

updateTableName = con.prepareStatement(updateString)

作る :

updateTableName = con.prepareStatement(update TABLE1 set TABLENAME = ? where TABLENAME = ?);
于 2013-06-19T19:03:05.743 に答える