在java中编写SQL语句

时间:2013-06-19 17:54:04

标签: java sql database

我正在尝试连接数据库并使用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关键字。

3 个答案:

答案 0 :(得分:6)

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

此字符串的值为

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

这不是有效的SQL。

答案 1 :(得分:0)

您应该尝试记录第一个捕获区中捕获的SQLException,这样可以清楚地指出问题所在。

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

答案 2 :(得分: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 = ?);