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