1

我在使用 SQL 查询时遇到问题。问题是我正在查询企业名称的外部数据库,有些名称就像“玛莎”(包括撇号)。而且因为我是从一个 android 应用程序查询,查询字符串看起来像:

String query = "Select * from Advertiser where AdvName= '" + name + "';";

那么无论如何我可以忽略或更改查询中的撇号吗?

提前致谢!

4

2 回答 2

6

这就是在执行参数化查询时应该始终使用准备好的语句的原因之一:

String sql = "select * from Advertiser where AdvName = ?";
PreparedStatement stmt = connection.prepareStatement(sql);
stmt.setString(1, name);
ResultSet rs = stmt.executeQuery();

JDBC 驱动程序将为您转义引号,这也将防止SQL 注入攻击。

当您必须多次执行相同的查询但使用不同的参数时,准备好的语句也具有性能优势。

在JDBC 教程中阅读有关预准备语句的更多信息。

旁注:您不应该;在查询末尾有 a 。

于 2012-07-14T06:14:59.890 回答
1

在 PLSQL 中,您应该在输入字段中使用 double '',意思是 Martha's => Martha's:

String query = "Select * from Advertiser where AdvName= 'Martha''s';";


重要说明:
出于安全目的(避免 sql 注入),您应该避免按照您的方式创建查询,最好使用准备好的语句并设置如下参数:

String query = "Select * from Advertiser where AdvName= ? ";
PreparedStatement  st   = conn.prepareStatement(query);
st.setString(1,name);
于 2012-07-14T06:12:31.340 回答