gpt4 book ai didi

java - 在 JDBC 中转义单引号(出现错误 : You have an error in your SQL syntax . ..)

转载 作者:行者123 更新时间:2023-11-29 04:19:13 25 4
gpt4 key购买 nike

我正在尝试使用 jdbc 将数据插入 mysql。我有这样的东西:

    Connection conn = DriverManager.getConnection(urlDB, userDB, passwordDB);

String postTitle = "Post title";
String postContent = "A Linux's distributions";

String sql = "INSERT INTO posts VALUES ( '"+postTitle+"', '"+postContent+"')";
PreparedStatement statement = conn.prepareStatement(sql);
statement.executeUpdate();
conn.close();

但是我得到一个错误:

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: 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 's

据我所知,prepareStatement 方法应该转义单引号(也许我错了)。我很乐意提出任何建议。

最佳答案

要正确使用准备好的语句,您需要使用参数占位符 (?) 并在语句上设置值。这将自动为您提供针对 SQL 注入(inject)的保护。

您需要将代码更改为:

String sql = "INSERT INTO posts VALUES (?, ?)";          
try (PreparedStatement statement = conn.prepareStatement(sql)) {
statement.setString(1, postTitle);
statement.setString(2, postContent);
statement.executeUpdate();
}

另见 JDBC Basics - Using Prepared Statements有关如何使用 PreparedStatement 的示例。

我还更改了您的代码以使用 try-with-resources,因为这将始终正确关闭语句(即使发生异常),而您问题中的代码不会。

请注意,如果您明确指定要插入的列会更好。这可以保护您的代码免受列更改顺序或新添加的 - 可选 - 列的影响:

INSERT INTO posts(title, content) VALUES (?, ?)

关于java - 在 JDBC 中转义单引号(出现错误 : You have an error in your SQL syntax . ..),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30455892/

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