我遇到SQL查询问题。问题是我正在查询企业名称的外部数据库,有些名称就像“Martha's”(包括撇号)。因为我从一个Android应用程序查询,查询字符串看起来像:
String query = "Select * from Advertiser where AdvName= '" + name + "';";
无论如何,我可以忽略或更改查询中的撇号吗?
提前致谢!
答案 0 :(得分:6)
这就是为什么在执行参数化查询时应始终使用预准备语句的原因之一:
String sql = "select * from Advertiser where AdvName = ?";
PreparedStatement stmt = connection.prepareStatement(sql);
stmt.setString(1, name);
ResultSet rs = stmt.executeQuery();
JDBC驱动程序将为您转义引号,这也会阻止SQL injection攻击。
当您必须多次执行相同的查询但使用不同的参数时,预准备语句也具有性能优势。
阅读JDBC tutorial中有关预备语句的更多信息。
附注:您的查询末尾不应该有;
。
答案 1 :(得分:1)
在PLSQL中,您应该在输入字段中使用双''
,这意味着,Martha's =>玛莎的:
String query = "Select * from Advertiser where AdvName= 'Martha''s';";
重要说明:
出于安全目的(避免sql注入),您应该避免以您的方式创建查询,更好地使用prepared-statement并设置如下参数:
String query = "Select * from Advertiser where AdvName= ? ";
PreparedStatement st = conn.prepareStatement(query);
st.setString(1,name);