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

unable to concatenate variable with sql query

这是示例代码...

    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
连接字符串:产品
'

请指出我的错误...我是 java 的新手...而且我需要使用 likeor ....请提供解释的答案...在此先感谢。

可能数据中没有匹配项。您可以先 运行 一个未过滤的查询,然后在 table.

中查看 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"(即回车return)。这就是您仅在打印查询时才获得报价的原因

不用修改太多你的代码,你可以做到

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

现在正在正常获取数据...