2017-03-02 91 views
2

我试图检索基于存储在skw文本框中的关键字的记录,当我传递USN或Age时,它会给出正确的结果,但它不能与Name 。它抛出错误:com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorExceptionUnknown列“NAME_KEYWORD(SKW)”在“where子句”MySQLSyntaxErrorException:'where子句'中的未知列'John'

ResultSet res=stmt.executeQuery("select * from Student where USN="+skw.getText()+" or Name='"+skw.getText()+"' or Age="+skw.getText()+""); 
+0

的可能的复制[com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:未知列“史密斯”在“where子句”](HTTP: //stackoverflow.com/questions/1632893 5/com-mysql-jdbc-exceptions-jdbc4-mysqlsyntaxerrorexception-unknown-column-smith) –

+0

不要将值连接到查询字符串中。您的代码易受SQL注入攻击。相反,您应该使用带有参数的准备好的语句,然后设置每个参数的值。司机然后将正确处理任何必要的逃跑等。 –

回答

0

如果您选择的文本,你应该用单引号的文本换值

ResultSet res=stmt.executeQuery("select * from Student where USN='" 
    +skw.getText()+"' or Name='"+skw.getText()+"' or Age='"+skw.getText()+"'"); 

否则所得到的文本中用作列名

+0

为什么downvote为一个接受的答案? – scaisEdge

+1

这不是我,但可能会因为没有将提问者指向参数化的SQL而降低投票率。 –

+0

@LukeWoodward非常感谢您的建议。 – scaisEdge