[英]What's wrong with my JDBC mySQL statement? Apparently my WHERE clause is messed
我的JDBC mySQL语句出了什么问题? 显然我的WHERE子句搞砸了。 注意:第一个值在actionListener中定义,= value是数据库中的变量。
searchBtn.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
list.clearSelection();
//connect to database
String afName= auth_fName.getText();
String aMI = auth_MI.getText();
String alName = auth_lName.getText();
String tField = titleField.getText();
String sField = subjectField.getText();
//PR.111.002 - “Core Java”, Cay Horstmann - AVAILABLE
try
{
Connection conn = Database.getConnection();
Statement s = conn.createStatement();
if (!afName.equals("") && (!aMI.equals ("")) && (!alName.equals(""))&& (!tField.equals("")) && (!sField.equals("")))
{
selectString = "SELECT call_Number, title, auth_lName, auth_fName, auth_MI, availability"
+ "FROM book, transaction"
+ "WHERE aLName = 'auth_LName' AND afName = 'auth_FName' AND aMI = 'auth_MI'"
+ " AND title = 'title' AND sField = 'subject'";
result ="";
}
s = conn.createStatement();
ResultSet rs = s.executeQuery(selectString);
while (rs.next())
{
String call_Number = rs.getString("call_Number");
String title = rs.getString("title");
String auth_lName = rs.getString("auth_lName");
String auth_MI = rs.getString ("auth_MI");
String auth_fName = rs.getString("auth_fName");
String availability = rs.getString("availability");
view = new View (call_Number, title, auth_lName, auth_MI, auth_fName, availability);
vList.add(view);
}
s.close();
conn.close();
list.setListData(vList.toArray());
} catch (Exception ex) {
ex.printStackTrace();
}
}
});
你忘记了一些空白。
更换
selectString = "SELECT call_Number, title, auth_lName, auth_fName, auth_MI, availability"
+ "FROM book, transaction"
+ "WHERE aLName = 'auth_LName' AND afName = 'auth_FName' AND aMI = 'auth_MI'"
+ " AND title = 'title' AND sField = 'subject'";
通过
selectString = "SELECT call_Number, title, auth_lName, auth_fName, auth_MI, availability"
+ " FROM book, transaction"
+ " WHERE aLName = 'auth_LName' AND afName = 'auth_FName' AND aMI = 'auth_MI'"
+ " AND title = 'title' AND sField = 'subject'";
对于将来的SQL问题,如果在执行之前打印/调试SQL语句或PreparedStatement
,您会自己帮助很多。 然后可以更容易地发现这种错误。
logger.debug(selectString);
与具体问题无关 ,您需要关闭数据库资源,包括ResultSet
它们的try
块的finally
块中的ResultSet
。 这样可以防止异常情况下的资源泄漏。
selectString = "SELECT call_Number, title, auth_lName, auth_fName, auth_MI, availability"
+ "FROM book, transaction"
+ "WHERE aLName = 'auth_LName' AND afName = 'auth_FName' AND aMI = 'auth_MI'"
+ " AND title = 'title' AND sField = 'subject'";
问题是你在事务和WHERE之间没有空格......
好的,我明白了。 它不完全是where子句,这正是解析器指向的内容。 它靠近 where子句。 如果删除换行符,以下是SQL的内容:
SELECT call_Number, title, auth_lName, auth_fName, auth_MI, availabilityFROM book, transactionWHERE aLName = 'auth_LName' AND afName = 'auth_FName' AND aMI = 'auth_MI' AND title = 'title' AND sField = 'subject'
问题是“可用性”和“FROM”之间或“事务”和“WHERE”之间没有空格。 如果在每行的字符串末尾添加空格,它应该可以工作。
这种错误一直在发生。 我习惯在我的应用程序的任何一行SQL查询的末尾添加一个额外的空间,以防止我在以后更改查询时意外地执行此操作。
另请注意,“交易”是保留字。 虽然您似乎没有遇到问题,但您可能会在将来意外地找到解析器将其解释为关键字而不是表/字段名称的问题。 引用它(使用MySQL中的反引号)将有助于此,但如果可能的话,您可以重命名它。 那些“我不小心使用关键字作为名称”的错误可能是一个真正的痛苦追踪。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.