-2

我正在尝试连接到数据库并使用 java 程序中的准备好的语句更新其中的表 - 数据库称为“数据库”,并且还有另一个名为 Views 的文件夹,其中的表(“TABLE”)我正在尝试更新。这是我的代码:

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:缺少 SET 关键字。

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

好的,我想通了,@Spiff 我确实将它更改为最简单的查询,只需更新 TABLE1,但我也取出了:

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

并将其与

updateTableName = con.prepareStatement(updateString)

制作:

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

您应该尝试SQLException在第一个 catch 块中记录您捕获的内容,这将使您清楚地表明问题所在。

在任何情况下,TABLE都是 SQL 保留的关键字,您不应该被允许命名这样的表 - 至少尝试将其重命名TABLE1为缺少更好的名称。

于 2013-06-19T18:15:49.113 回答