简单参数化查询出错 - Java/SQL

Jam*_*ing 4 java sql netbeans parameterized-query

继我之前的一个与方法设计有关的问题之后,我被建议将我的SQL查询实现为参数化查询,而不是简单的字符串.

我之前从未使用参数化查询,所以我决定从简单的开始,采取以下Select语句:

String select = "SELECT * FROM ? ";

PreparedStatement ps = connection.prepareStatement(select);
ps.setString(1, "person");
Run Code Online (Sandbox Code Playgroud)

这给了我以下错误:"[SQLITE_ERROR] SQL错误或缺少数据库(接近"?":语法错误)"

然后我尝试了一个具有附加标准的修改版本;

String select = "SELECT id FROM person WHERE name = ? ";

PreparedStatement ps = connection.prepareStatement(select);
ps.setString(1, "Yui");
Run Code Online (Sandbox Code Playgroud)

这个版本工作正常,在我的第一个例子中,我错过了参数化查询的要点,还是我错误地构造它们?

谢谢!

And*_*ite 9

简单地说,SQL绑定不能绑定表,只能绑定where子句值.这与"编译"准备好的SQL语句相关的技术原因有一些.通常,参数化查询旨在通过阻止SQL注入来使SQL更安全,并且它具有使查询更加"模块化"的附带好处,但不能达到能够动态设置表名的程度(因为它假设您已经知道桌子会是什么了.