Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/344.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
Java 无法将变量与sql查询连接起来_Java_Mysql_Concatenation_Intellij 14 - Fatal编程技术网

Java 无法将变量与sql查询连接起来

Java 无法将变量与sql查询连接起来,java,mysql,concatenation,intellij-14,Java,Mysql,Concatenation,Intellij 14,下面是示例代码 Statement stmt = con.createStatement(); String query = "select * from work_product where product_name ='" + ch + "' "; System.out.println(query); // displaying only ` ResultSet rs = stmt.executeQuery(query); System.out.println

下面是示例代码

    Statement stmt = con.createStatement();
    String query = "select * from work_product where product_name ='" + ch + "' ";
System.out.println(query); // displaying only `
    ResultSet rs = stmt.executeQuery(query);
    System.out.println(query);
    while (rs.next()){
    System.out.println(rs.getInt(1)+" "+rs.getString(2));
    }


如果传递的是字符串而不是变量,那么它的工作原理是……就像

ResultSet rs = stmt.executeQuery("select * from work_product where product_name ='product' ");
我也使用了preparedStatement…但不起作用

PreparedStatement statement = con.prepareStatement("select * from work_thing_db.work_product where product_name = ? ");
statement.setString(1,ch);
这是完整的代码……

@FXML protected void keyReleased(KeyEvent evt)throws Exception {
        //SetTimer();

        if (evt.getCode() != KeyCode.BACK_SPACE) {
            String ch = evt.getText();
            //runThread();
            concateString = concateString + ch; //concateString has scope
            if (evt.getCode() == KeyCode.ENTER) {
                System.out.println("Enter Key Fired ");
                System.out.println(concateString);
                dbSearch(concateString);
            }
        }
}
private void dbSearch(String ch){
        System.out.println("In dbSearch");
        System.out.println("Concate String :"+ch);
        String query = "select * from work_product where product_name ='" + ch + "' ";
        System.out.println("Query is :"+query);
        dbConnector conn = new dbConnector();
        Connection con = conn.dbConnection();
        try {

            Statement stmt = con.createStatement();
            ResultSet rs = stmt.executeQuery(query);

            while (rs.next()){
                System.out.println(rs.getString(1)+" "+rs.getString(2));
            }
        }catch(Exception e){System.out.println(e);}
    }


使用:IntelliJ IDEA 14 CE

输出:
输入点火钥匙
产品
在dbSearch中
Concat字符串:产品
'


请指出我的错误。。。我是java新手。。。此外,我还需要像和或一样使用它。。。。请提供答案和解释。。。提前感谢。

数据中可能没有匹配项。您可以先运行非筛选查询,查看表中product_name的值。

连接字符串的方式有问题

    if (evt.getCode() != KeyCode.BACK_SPACE) {
        String ch = evt.getText();
        //runThread();
        concateString = concateString + ch; //concateString has scope
        if (evt.getCode() == KeyCode.ENTER) {
            System.out.println("Enter Key Fired ");
            System.out.println(concateString);
            dbSearch(concateString);
        }
    }
因此,当用户输入“enter”(可以是\n或\r)时,您将在键值的条件之前连接,因此
concateString
将始终包含您的字符串+“enter”(即回车符)。这就是为什么你只在打印查询时才得到报价

不需要修改大部分代码,您可以这样做

    if (evt.getCode() != KeyCode.BACK_SPACE) {
        String ch = evt.getText();
        //runThread();
        if (evt.getCode() == KeyCode.ENTER) {
            System.out.println("Enter Key Fired ");
            System.out.println(concateString);
            dbSearch(concateString);
        } else {
            concateString = concateString + ch; //concateString has scope
        }
    }

因此,您将传递正确的字符串。

我没有想到它。…

private void dbSearch(String ch){
        System.out.println("In dbSearch");
        System.out.println("Concate String :"+ch);
        ch = ch.trim().toString(); // trim and type cast ... its working
        String query = "select * from work_product where product_name ='" + ch + "' ";
        System.out.println("Query is :"+query);
        dbConnector conn = new dbConnector();
        Connection con = conn.dbConnection();
        try {

            Statement stmt = con.createStatement();
            ResultSet rs = stmt.executeQuery(query);

            while (rs.next()){
                System.out.println(rs.getString(1)+" "+rs.getString(2));
            }
        }catch(Exception e){System.out.println(e);}
    }

现在它正在正确地提取数据…

定义
不工作
?不从数据库提取任何数据。。。没有错误,只需检查
ch
的值,或尝试在SOP中打印查询并与实际查询进行比较即可。奇怪的是,即使查询是一个常量字符串或动态构造,我也从未见过这种区别。数据存在于数据库中。。。如果传递的是字符串而不是变量,那么这里的问题很明显,但是您的变量是否持有您期望的值?检查是否有额外的空格和不同的大小写。您应该使用该变量记录代码生成的确切查询语句。