在 SQL 更新语句中找不到错误

尤里斯·普内科

我正在做一款问答游戏。有提问者窗口。这对于保存问题很有用。但是当想要更新文本字段之一并按保存时,就会发生错误。语法有问题?!

void insertCell(String tableNamer, String column, String value, int id) throws ClassNotFoundException, SQLException{
    Class.forName("org.h2.Driver");
    Connection conn = DriverManager.getConnection("jdbc:h2:file:C:/Users/Juris Puneiko/IdeaProjects/for_my_testings/src/sample/DB/Questions/For_Private/Easy", "Juris", "1");

    PreparedStatement ps = conn.prepareStatement("UPDATE ? SET ? = ? where  ID = ?");
    ps.setString(1, tableNamer);
    ps.setString(2, column);
    ps.setString(3, value);
    ps.setInt(4, id);
    ps.executeUpdate();
    ps.close();
    conn.close();
}

org.h2.jdbc.JdbcSQLException:SQL 语句中的语法错误“UPDATE ?[*] SET ? = ? WHERE ID = ?”;预期的“标识符”;SQL 语句:更新?放 ?= ? 其中 ID = ? [42001-196]

这是什么 >>> [*]?

这是什么意思?

截屏

吉里·图塞克

占位符只能用于大多数 SQL 数据库中的值,不能用于表名或列名等标识符:

"UPDATE myTable SET myCol = ? where ID = ?" -- OK
"UPDATE ? SET ? = ? where ID = ?" -- not OK

The reason is that those parameters are also used for prepared statements, where you send the query to the database once, the database "prepares" the statement, and then you can use this prepared statement many times with different value parameters. this can improve DB performance because DB can compile and optimize the query and then use this processed form repeatedly - but to be able to do this, it needs to know names of the tables and columns involved.


To fix this, you only leave the ?s in for the values, and you concatenate the tableNamer and column manually:

"UPDATE " + tableNamer + " SET " + column + " = ? where ID = ?"

但请记住,通过这样做,tableNamercolumn现在可能容易受到SQL注入。确保您不允许用户提供或影响它们,否则请清理用户输入。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在此SQL语句中找不到错误

来自分类Dev

简单SQL更新语句上的错误

来自分类Dev

弄乱了SQL数据-在更新语句中选择

来自分类Dev

更新语句中SQL中的动态列名

来自分类Dev

SQL更新语句中的新/旧变量

来自分类Dev

弄乱了SQL数据-在更新语句中选择

来自分类Dev

SQL Server:更新语句中缺少什么

来自分类Dev

SQL Server:事务和更新语句错误

来自分类Dev

访问中的SQL更新语句的语法错误

来自分类Dev

Java SQL更新语句

来自分类Dev

选择SQL更新语句

来自分类Dev

更新语句中的错误

来自分类Dev

在from子句中使用不同表的SQL更新语句

来自分类Dev

在更新语句中具有select子查询的嵌套SQL查询

来自分类Dev

如何在更新语句中使用SQL变量递增

来自分类Dev

如何在SQL Server更新语句中使用MAX函数

来自分类Dev

在SQL更新语句中使用子字符串

来自分类Dev

使用 PL/SQL 在 Oracle 中使用 Excel 表中的列作为更新语句中的输入

来自分类Dev

更新语句在SQL中失败

来自分类Dev

Asp.Net SQL更新语句

来自分类Dev

SQL更新语句,但使用pyodbc

来自分类Dev

SQL Server更新语句执行

来自分类Dev

SQL更新语句:“ FROM”附近的OperationalError

来自分类Dev

在SQL Server中递归更新语句

来自分类Dev

如何压缩多个更新语句-SQL

来自分类Dev

找不到句柄0的准备好的语句。(SQL错误)

来自分类Dev

更新语句内的DBMS_SQL.NUMBER_TABLE引发无效数据类型错误

来自分类Dev

SQL 未在 if 语句中更新

来自分类Dev

将SQL更新语句转换为View语句