首页 > 解决方案 > 在 Java 中使用 MySQL 选择作为字符串

问题描述

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

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

当'selected'中有单引号时 - 它给了我一个错误:

您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,以了解在附近使用的正确语法.....

所以我理解为什么会出现错误,但我想知道如何使这项工作。除了 concat() 还有其他方法吗?

标签: javamysql

解决方案


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

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

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

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

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

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

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


推荐阅读