Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL查询在SQL Developer中工作,但在Java端不工作_Java_Sql_Oracle_Jdbc_Oracle11g - Fatal编程技术网

SQL查询在SQL Developer中工作,但在Java端不工作

SQL查询在SQL Developer中工作,但在Java端不工作,java,sql,oracle,jdbc,oracle11g,Java,Sql,Oracle,Jdbc,Oracle11g,我正试图解决这个问题,但没有成功。我试图查找特定表中包含值的每一行 例如,让我们考虑一下这个雇员表: | Id | First_name | Last_name | Date_of_birth | Car_number | |------------------|------------|------------|---------------|------------| | 10001 | John | Washington |

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

例如,让我们考虑一下这个雇员表:

|     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端构建此查询(这是我在日志中打印的内容):

然后我使用一个准备好的语句,这样,如果我搜索字符串“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");
     ...
 }
String wantedQuery=“Select*From”+tableName+“WHERE”;
编制报表编制报表;
try(ResultSet rsColumns=columnsForTable(tableName)){
String关键字=keywordField.getText();
整数极限=0;
while(rsColumns.next()){
wantedQuery+=“”+rsColumns.getString(1)+“类似”或“;
极限++;
}
wantedQuery=wantedQuery.substring(0,wantedQuery.length()-3);
preparedStatement=con.prepareStatement(wantedQuery);
System.out.println(wantedQuery);
System.out.println(“\'%”+关键字+“%\'”);

对于(使用
setString()时,int i=1;i)
,JDBC知道它必须是一个字符串,所以它会根据需要在
字符串周围加上单引号,您不必自己做。但因为这样做,它实际上是一个不同的字符串,与您预期的不同。

作为一个快速猜测,您不需要在此处使用单引号:
preparedStatement.setString(i,“\'%”+关键字+“%\”)
@meskobalazs-Hmm就是这样!但它并没有获取所有行。我得到了大约8行,但当直接在数据库上运行查询时,有100多行……不管我之前的评论如何,我忘了使用相同的关键字运行查询,谢谢您的帮助。
rsColumns.getString(1)
是正确的,因为这是我从表中获取列名称的地方(
“从用户选项卡中选择列名称,其中表名称=?”
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");
     ...
 }