繁体   English   中英

我的JDBC mySQL语句出了什么问题? 显然我的WHERE子句是混乱的

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM