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中打印查询并与实际查询进行比较即可。奇怪的是,即使查询是一个常量字符串或动态构造,我也从未见过这种区别。数据存在于数据库中。。。如果传递的是字符串而不是变量,那么这里的问题很明显,但是您的变量是否持有您期望的值?检查是否有额外的空格和不同的大小写。您应该使用该变量记录代码生成的确切查询语句。