我的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();
}
}
});
答案 0 :(得分:4)
你忘记了一些空白。
替换
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
之前打印/调试SQL语句,则会对自己有所帮助。然后可以更容易地发现这种错误。
logger.debug(selectString);
无关,您需要关闭数据库资源,包括ResultSet
块finally
块中的try
。这样可以防止出现异常时资源泄漏。
答案 1 :(得分:4)
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 之间没有空格......
答案 2 :(得分:2)
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中的反引号)将有助于此,但如果可能的话,您可以重命名它。那些“我不小心用一个关键字作为名字”的错误可能是一个非常痛苦的追踪。