SQL选择具有where子句声明(SQL select statement with where c

2019-07-18 20:17发布

如何将我写的没有硬编码值,这个sql语句?

resultSet = statement
    .executeQuery("select * from myDatabase.myTable where name = 'john'");
// this works

而有类似:

String name = "john"; 
resultSet = statement
    .executeQuery("select * from myDatabase.myTable where name =" + name);
// Unknown column 'john' in 'where clause' at
// sun.reflect.NativeConstructorAccessorImpl.newInstance0...etc...

提前致谢..

Answer 1:

它通常是一个可怕的想法来构造SQL查询你目前做的方式,因为它开启了大门,各种SQL注入攻击 。 为了正确地做到这一点,你将不得不使用预处理语句来代替。 这也将解决种种逃避,你显然此刻遇到这样的问题。

PreparedStatement statement = connection.prepareStatement("select * from myDatabase.myTable where name = ?");    
statement.setString(1, name);    
ResultSet resultSet = statement.executeQuery();

需要注意的是prepareStatement()是一个昂贵的呼叫(除非你的应用程序服务器使用语句缓存和其他类似设备)。 从理论上讲,如果你准备语句一次,然后重复使用它多次(尽管不是同时)这将会是最好的:

String[] names = new String[] {"Isaac", "Hello"};
PreparedStatement statement = connection.prepareStatement("select * from myDatabase.myTable where name = ?");

for (String name: names) {
    statement.setString(1, name);    
    ResultSet resultSet = statement.executeQuery();
    ...
    ...
    statement.clearParameters();
}


Answer 2:

你缺少周围的字符串单引号,你的代码更正:

String name = "john";
String sql = "select * from myDatabase.myTable where name = '" + name + "'";
// Examine the text of the query in the debugger, log it or print it out using System.out.println
resultSet = statement.executeQuery(sql);

打印出/执行查询,看看它看起来OK之前登录查询的文本。

如果你打算做了很多类似的查询,其中只有不断的变化,可以考虑使用预处理语句



Answer 3:

这应该工作:

String name = "john"; 
resultSet = statement
    .executeQuery("select * from myDatabase.myTable where name =" + "'" + name + "'");


Answer 4:

你需要把周围的值(“约翰”,而不是约翰)报价...



Answer 5:

尝试以下方法:

String name = "john"; 

resultSet = statement
      .executeQuery("select * from myDatabase.myTable where myTable.name = '" + name + "'");


Answer 6:

把引号你的name值,因为它是一个字符串。

"select * from myDatabase.myTable where name ='" + name + "'"


文章来源: SQL select statement with where clause
标签: java sql mysqli