我在使用 SQL 查询时遇到问题。问题是我正在查询企业名称的外部数据库,有些名称就像“玛莎”(包括撇号)。而且因为我是从一个 android 应用程序查询,查询字符串看起来像:
String query = "Select * from Advertiser where AdvName= '" + name + "';";
那么无论如何我可以忽略或更改查询中的撇号吗?
提前致谢!
这就是在执行参数化查询时应该始终使用准备好的语句的原因之一:
String sql = "select * from Advertiser where AdvName = ?";
PreparedStatement stmt = connection.prepareStatement(sql);
stmt.setString(1, name);
ResultSet rs = stmt.executeQuery();
JDBC 驱动程序将为您转义引号,这也将防止SQL 注入攻击。
当您必须多次执行相同的查询但使用不同的参数时,准备好的语句也具有性能优势。
在JDBC 教程中阅读有关预准备语句的更多信息。
旁注:您不应该;
在查询末尾有 a 。
在 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);