我在 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/