2015-11-04 62 views
1

我无法执行查询here.It说上面提到的错误。我已经尝试'选择*从客户'查询,它工作。我无法弄清楚我在哪里出错了。请提前帮忙,谢谢。完整查询是 - SELECT CUSTOMER_ID,FIRST_NAME,LAST_NAME,COUNTRY,AGE,GENDER,EMAIL_ADDRESS FROM CUSTOMER where FIRST_NAME ='SHIVAM';MySQL语法错误异常

是 - com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErr orException错误消息:在 'where子句'

DefaultTableModel model; 
model=(DefaultTableModel)tblSearchCustomer.getModel(); 
try{ 
Class.forName("java.sql.Driver"); 
Connection con= DriverManager.getConnection("jdbc:mysql://localhost:3306/divign","root","password"); 
Statement stmt=con.createStatement(); 

String sfld=(String) searchfldCB.getSelectedItem(); 
//this stands for Search Field(ComboBox) 
String op=(String) opCB.getSelectedItem(); 
//this stands for operator(ComboBox) 
String crit=criteriaTF.getText(); 
//this stands for criteria 
String query="SELECT CUSTOMER_ID,FIRST_NAME,LAST_NAME,COUNTRY,AGE,GENDER,EMAIL_ADDRESS FROM CUSTOMER WHERE" + sfld+""+op+""+crit+" ;"; 
//This Query is not Executing 
ResultSet rs=stmt.executeQuery(query); 
while(rs.next()) { 
    model.addRow (new Object[ ] { 

     rs.getInt(1),rs.getString(2),rs.getString(3),rs.getString(4),rs.getInt(5), 
     rs.getString(6),rs.getInt(7) 
    }); 

} 
rs.close(); 
stmt.close(); 
con.close(); 
} 
catch(Exception e){ 
JOptionPane.showMessageDialog(null,e.toString()); 
} 
+0

你能提供完整的查询和错误被执行? –

+1

请发布生成的查询和错误消息。作为一个猜测,你几乎可以肯定是缺少一些空格'WHERE “+ sfld的+ ”“ + OP + ”“ +暴击+”;' –

+0

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErr orException:未知coloumn “SHIVAM 'in'where子句' – Yashw

回答

1

所以在这里被校正的查询 -

串查询= “SELECT CUSTOMER_ID,名字,姓氏,密码,地址,国家,年龄,性别,EMAIL_ADDRESS,PHONE_NUMBER FROM CUSTOMER WHERE” + sfld的+” “+ OP +” ' “+爆击+”' ;“;

注意周围的暴击引号....现在,如果我在的JTextField(criteriaTF)输入名称SHIVAM将在MySQL中使用引号,即“SHIVAM”

0

串查询=“SELECT CUSTOMER_ID,名字,姓氏未知coloumn 'SHIVAM', COUNTRY,AGE,GENDER,EMAIL_ADDRESS FROM CUSTOMER WHERE“+ sfld +”“+ op +”“+ crit +”;“;

在where条件中你没有提到列名来分配sfld +“”+ op +“”+ crit的值。

您必须在where子句旁边提供列名称。

2

当您生成查询,也有你的where语句,这意味着你会得到WHERE FIRST_NAME=SHIVAM没有单引号,所以它会尝试比较FIRST_NAME到一个名为SHIVAM列不存在

+0

这是迄今为止最好的答案,只是因为它没有提供继续使用动态SQL的“解决方案”。如果它提到使用*参数化查询*首先会避免该问题,并且所有其他“解决方案”仍然容易受到SQL注入的影响,那么这将是一个更好的答案。 –