java - SQL 查询可以在 SQL Developer 中运行,但不能在 Java 端运行

标签 java sql oracle jdbc oracle11g

我正在尝试解决这个问题,但没有成功。我试图找到特定表中包含值的每一行。

例如,让我们考虑这个 Employee 表:

|     Id           | First_name | Last_name  | Date_of_birth | Car_number |
|------------------|------------|------------|---------------|------------|
| 10001            | John       | Washington | 28-Aug-43     | 5          |
| 10083            | Arvid      | Sharma     | 24-Nov-54     | null       |
| 10034            | David      | Johnson    | 12-May-76     |            |

我正在 Java 端构建此查询(这是我在日志中打印的内容):

Select * From Employee WHERE Id LIKE ? OR First_name LIKE ? OR Last_name LIKE ? OR Date_of_birth LIKE ? OR Car_number LIKE ?

然后我使用准备好的语句,这样,如果我搜索字符串“oh”,它就会变成:

Select * From Employee WHERE Id LIKE '%oh%' OR First_name LIKE '%oh%' OR Last_name LIKE '%oh%' OR Date_of_birth LIKE '%oh%' OR Car_number LIKE '%oh%'

下面是相应的代码:

String wantedQuery = "Select * From " + tableName + " WHERE";

PreparedStatement preparedStatement;
try(ResultSet rsColumns = columnsForTable(tableName)) {
    String keyword = keywordField.getText();

    int limit = 0;
    while (rsColumns.next()) {
        wantedQuery += " " + rsColumns.getString(1) + " LIKE ? OR";
        limit++;
    }
    wantedQuery = wantedQuery.substring(0, wantedQuery.length()-3);

    preparedStatement = con.prepareStatement(wantedQuery);

    System.out.println(wantedQuery);
    System.out.println("\'%"+keyword+"%\'");

    for(int i = 1; i <= limit; i++) {;
        preparedStatement.setString(i, "\'%"+keyword+"%\'");
    }
}

try(ResultSet rs = preparedStatement.executeQuery()) {
 //now get the results from here
 ResultSetMetaData metaData = rs.getMetaData();
 while (rs.next()) {
     System.out.println("Fetching row");
     ...
 }

现在的问题是,当我尝试获取结果时,它给了我 0 行(我从未看到打印出“获取行”),但查询在 SQL Developer 中有效。所以我猜错误是在 Java 端,但我知道它可能是什么。有什么想法吗?

最佳答案

当您使用setString()时,JDBC知道它必须是一个字符串,因此它根据需要在String周围放置单引号,您不需要必须自己做。但因为你这样做了,它实际上与你期望的不同。

关于java - SQL 查询可以在 SQL Developer 中运行,但不能在 Java 端运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29874853/

相关文章:

oracle - 从 SQL Developer 将 CLOB 插入 Oracle 数据库

java - 通过 jdbc 更改用户密码。包含问号的通行证问题

mysql - Java Spring应用程序中从Oracle迁移到MySQL : Connection Pooling

sql - 从 plpgsql 中的执行查询字符串返回值

java - 在 Postgresql 中用于转换 uuid::text 的算法是什么?

java - 以编程方式将 Eclipse 格式化程序配置文件 XML 导出到 .prefs

java - 如何从pom.xml获取maven项目安装目录

sql - 无法在 sql server 2017 安装程序中找到报告服务

java - IS NULL 条件下的 JDBC 错误

java - 无法在嵌套的 Try catch 之外传递变量?