java - 在 Java 中使用 MySQL 选择作为字符串

标签 java mysql

我在 Java 程序中执行查询时遇到问题。这是代码:

String selected=offersList.getSelectedValue();
String sql="SELECT * from outcoming_offers where about='"+selected+"'";
pst=con.prepareStatement(sql);
rs=pst.executeQuery();

当“selected”中有单引号时 - 它会给我一个错误:

You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near.....

所以我明白为什么会出现错误,但我想知道如何让它工作。除了concat()还有其他方法吗?

最佳答案

总是更好的方法是使用准备好的语句而不是原始 SQL 字符串连接。

根据您的示例,您应该编写如下准备好的查询(要传递的参数替换为问号):

String sql="SELECT * from outcoming_offers where about=?";
PreparedStatement ps = con.preparedStatement(sql);

然后只需注入(inject)参数值并执行查询:

ps.setString(1, selected);
ResultSet rs = ps.executeQuery();

由于这种方法,您不必处理 SQL 查询字符串和单引号,这通常很容易出错,而且(非常重要)您的代码不会暴露于 SQL 注入(inject)攻击。

文档中的更多信息:https://docs.oracle.com/javase/8/docs/api/java/sql/package-summary.html

关于java - 在 Java 中使用 MySQL 选择作为字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55121175/

相关文章:

java - JSP刷新页面时出现http错误

java - 在 Java 中使用字符串替换方法时遇到问题

java - 将现有 Java 和 Flash 应用程序迁移到 Android (Google TV)

mysql - 左外连接 ON & AND & WHERE 不起作用?

如果密码包含 % 符号,Java 无法连接到 MySQL

java - 为什么它说 "java.sql.SQLException: invalid column name"

保证日志在午夜轮换的 Java 日志记录框架

php - 使用 php 和 mysql 检索注册表单上的电子邮件地址存在困难

php - 使用 PHP 和 AJAX 对查询结果进行分页

javascript - 根据隐藏文本框检查最小最大数