当前位置: 首页 > 面试题库 >

带where子句的SQL select语句

慕凌
2023-03-14
问题内容

我将如何在没有硬编码值的情况下编写此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()是一个昂贵的调用(除非您的应用程序服务器使用语句缓存和其他类似的功能)。从理论上讲,最好先准备一次语句,然后多次重用(尽管
不能 同时使用):

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();
}


 类似资料:
  • 问题内容: 我有一个包含多个搜索条件的搜索页面 员工姓名 员工ID 入职日期 部门 等等 用户可以提供一个或多个搜索条件。我需要查询数据库以获取搜索结果。 使用纯JDBC,有两种方法可以实现此目的。 通过附加用户提供的搜索条件来准备SQL查询。 例如: 使用 例如: 此答案说明,像上面的ex 1一样,可以修改ex2,如下所示 然后仔细地(牢记参数索引)将输入设置为准备好的语句。听起来这不是一个非常

  • 问题内容: 是否可以在WHERE子句中使用LIMIT x? 如果是这样,怎么办? 我正在尝试这样做: 但我收到以下错误: 问题答案: 应该在之后。 句法 :

  • 例如,我想做这样的事情: 新建Select().from(Table).where(“id in?”,list).execute()

  • 问题内容: 我正在使用UNION创建一个搜索界面来搜索多个表。我的问题是,当我尝试搜索单词时,最后一个表中的数据是唯一不断出现的东西。如何在条件适当的地方正确搜索表,应根据其首字母搜索名称。 这是我的代码: 问题答案: 未使用的参数的值为NULL。只有表实际进行搜索。 您必须为查询提供六个参数: 或在所有LIKE中使用相同的参数:

  • 问题内容: 除了带有协议扩展的语法外: …我偶然发现您可以在协议本身上使用相同的where子句: 请注意,这是 不 一样的where子句限制一个通用的协议,并 没有 自己做P上的通用协议。 我的实验似乎表明,此处只能使用冒号,并且冒号后面的内容必须是类或协议(可能是通用的)。 我很好奇:这是怎么逃避我的注意的?所以我去寻找它何时出现的证据。在Swift 3.0中,前一种语法是合法的,但后者 则不

  • 问题内容: 这是我的项目表 这是我的发货表 我想为提供最小数量的项目命名。 我试过了。但是它只返回最小数量值,这是我的代码 问题答案: