jdbc dymanic sql查询变量包含' s

时间:2017-05-12 15:50:26

标签: java mysql sql jdbc

我问过这个因为我无法找到答案。

我正在做的是

 String selectTableSQL = "SELECT * FROM diseaseinfo WHERE diseaseName =""+diseaseName +'" AND name = '"+username+"'";

它是完美的运行,除非并且直到疾病不包含 类型的单词

  

维尔姆斯'肿瘤

     

艾迪生病

等...

如此查询

SELECT * FROM diseaseinfo WHERE diseaseName = 'Adult Still's disease' AND name = 'add';
由于'不会执行在'Adult Still's

并且在java中我不能用String selectTableSQL = ' ';开始字符串,它总是在String selectTableSQL = " ";

任何解决方案?

2 个答案:

答案 0 :(得分:0)

在JDBC中使用查询的正确方法是使用PreparedStatement并绑定变量。

但在您的情况下,请尝试使用'替换值中的单引号\'

您可以使用简单的diseaseName.replace("'", "\\'");来执行此操作。

答案 1 :(得分:0)

要避免这种情况以及任何语法错误或SQL注入,您必须改为使用PreparedStatement:

String selectTableSQL = "SELECT * FROM diseaseinfo WHERE col1 = ? and col2 = ?";
try (PreparedStatement ps = connection.prepareStatement(selectTableSQL)) {

    ps.setString(1, value_1);
    ps.setString(2, value_2);
    ResultSet rs = ps.executeQuery();
    while(rs.next()){
        //...
    }
}