gpt4 book ai didi

java - Prepared Statements 额外引号

转载 作者:太空宇宙 更新时间:2023-11-03 11:22:45 25 4
gpt4 key购买 nike

在 Java 中使用准备好的语句时,将问号替换为字符串的方法会添加额外的引号,这会弄乱我的查询。这是我使用的代码:

ConnectToDB c = new ConnectToDB();
Connection conn = c.connectToDB();

String query = "select * from ?";
PreparedStatement stmt = conn.prepareStatement(query);
stmt.setString(1, "users");

ResultSet set = stmt.executeQuery();

while(set.next()){
users.add(new Utente(set.getInt("id"),
set.getString("name"),
set.getString("surname"),
set.getString("email"),
set.getString("password"),
set.getString("imgURL"),
set.getString("orgURL"),
(Boolean)set.getObject("isAuthor")));
}

stmt.close();

这是我的日志:显然,在调用 stmt.setString(1, "users") 时替换了 ?使用字符串“users”,包括引号:

java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''users'' at line 1

我试图寻找这个问题,但似乎每个人都想在他们的陈述中包含引号,显然,没有人遇到我的问题。我可能遗漏了一些愚蠢的东西,但我做错了什么?

最佳答案

我认为你的表叫做users。您不对 DB 对象名称使用参数,仅对您输入查询的 使用参数。所以在你的情况下,你只需将 users 放在实际的 SQL 中:

String query = "select * from users";
PreparedStatement stmt = conn.prepareStatement(query);

ResultSet set = stmt.executeQuery();

(或者在这种特殊情况下,您可以使用Statement而不是PreparedStatement,因为您没有使用任何参数。)

据推测,users 不是您从程序外部获得的字符串(例如,不是您从用户那里获得的字符串)。

如果您需要提供一个值,例如用户 ID,则可以使用参数:

String query = "select * from users where id = ?";
PreparedStatement stmt = conn.prepareStatement(query);
stmt.setInt(1, userId);

ResultSet set = stmt.executeQuery();

旁注:而不是直接调用 close,如 Nexevis said ,我建议使用 try-with-resources。看起来像这样:

String query = "select * from users";
ConnectToDB c = new ConnectToDB();
try (
Connection conn = c.connectToDB();
PreparedStatement stmt = conn.prepareStatement(query);
) {
ResultSet set = stmt.executeQuery();

while(set.next()){
users.add(new Utente(set.getInt("id"),
set.getString("name"),
set.getString("surname"),
set.getString("email"),
set.getString("password"),
set.getString("imgURL"),
set.getString("orgURL"),
(Boolean)set.getObject("isAuthor")));
}
}

关于java - Prepared Statements 额外引号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57891884/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com