【问题标题】:Specifying a variable name in QUERY WHERE clause in JDBC在 JDBC 的 QUERY WHERE 子句中指定变量名
【发布时间】:2011-02-06 04:38:45
【问题描述】:

谁能给我一个链接,说明如何在 JDBC 中创建一个在 WHERE 语句中获取变量名的查询,或者写一个例子,更具体地说,我的代码看起来像这样:

      private String getLastModified(String url) {
     String lastModified = null;
     ResultSet resultSet;
String query = "select LastModified from CacheTable where " + 
     " URL.equals(url)";
     try {
      resultSet = sqlStatement.executeQuery(query);
}

现在我需要能够返回 ResultSet 对象的语法,其中 cacheTable 中的 URL 等于方法参数中的 url。

谢谢

【问题讨论】:

    标签: java mysql jdbc


    【解决方案1】:

    澄清一个误解:JDBC 和 SQL 是两个完全不同的东西。数据库只理解 SQL 语言。这是一个(半)标准,您可以学习here。 JDBC 只是一个 Java API,它使您能够使用 Java 代码执行 SQL 语言。不多不少,不多不少。 JDBC 不是 Java 编写 SQL 语言的方式。它只是 Java 代码和数据库之间的信使。可以学习JDBChere

    也就是说,是的,PreparedStatement 是在 SQL 查询中设置值的方法。它不仅简化了使用 setXXX() 方法在 SQL 字符串中设置完全有价值的 Java 对象,而且还使您免受 SQL injection 攻击。

    【讨论】:

      【解决方案2】:

      要更进一步,您应该真正使用来自 apache-commons 或 Sping JDBC 框架的DBUtils。由于涉及的步骤数量众多,许多 JDBC 工作是平凡且容易出错的。这两个链接都有工作示例供您开始使用。

      这些帮助库将使您的生活更加舒适:-)。

      【讨论】:

        【解决方案3】:

        最简单的方法是

        String query = "select LastModified from CacheTable where url = '" + url +"'";
        

        你应该使用绑定变量:

        String query = "select LastModified from CacheTable where url = ?";
        prepStmt = conn.prepareStatement(query);
        prepStmt.setString(1, url);
        rs = prepStmt.executeQuery();
        

        【讨论】:

        • 感谢您的回答,还有哪些其他方式,如何绑定变量?
        • 哦.. 我认为 prepareStatement 只是用于更新查询。非常感谢
        • 我还有一个问题,如何执行查询,特别是如何获取 ResultSet 对象? (你可以忽略它,我现在注意到了编辑,谢谢)
        猜你喜欢
        • 1970-01-01
        • 2019-05-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-10
        • 2016-05-18
        • 1970-01-01
        相关资源
        最近更新 更多