如果没有硬编码值,我将如何编写这个 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...
提前致谢..
以当前的方式构建 SQL 查询是一个糟糕的想法,因为它为各种 SQL 注入攻击打开了大门。要正确执行此操作,您必须使用准备好的报表反而。这也将解决您目前明显遇到的各种转义问题。
PreparedStatement statement = connection.prepareStatement("select * from myDatabase.myTable where name = ?");
statement.setString(1, name);
ResultSet resultSet = statement.executeQuery();
注意prepareStatement()
是一个昂贵的调用(除非您的应用程序服务器使用语句缓存和其他类似设施)。理论上,最好准备一次语句,然后多次重复使用它(尽管not同时):
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();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)