Синтаксис SQL! исключение нулевого указателя! - PullRequest
0 голосов
/ 10 января 2010

У меня есть таблица в MySQL с именем «clienttable», и в ней 11 столбцов, 9-й столбец - «yahooId», а 11-й столбец - «пароль». У меня есть два исключения: 1: Синтаксис SQL для строки rst = stmt.executeQuery("SELECT yahooId AND password FROM clienttable"); и 2: NullPoniterException для строки while (rst.next()), пожалуйста, помогите мне, спасибо. Также это то, что я написал в своем классе базы данных:

    public static boolean Test(String userName, String password) {
    boolean bool = false;
    Statement stmt = null;
    try {
        stmt = conn.createStatement();
    } catch (SQLException ex) {
        Logger.getLogger(Manager.class.getName()).log(Level.SEVERE, null, ex);
    }
    ResultSet rst = null;
    try {
        rst = stmt.executeQuery("SELECT yahooId AND password FROM clienttable");
    } catch (SQLException ex) {
        Logger.getLogger(Manager.class.getName()).log(Level.SEVERE, null, ex);
    }
    try {
        while (rst.next()) {
            if (rst.getString(9).equals(userName) && rst.getString(11).equals(password)) {
                bool = true;
            } else {
                bool = false;
            }
        }
    } catch (SQLException ex) {
        Logger.getLogger(Manager.class.getName()).log(Level.SEVERE, null, ex);
    }
    return bool;



}

исключение:

init:
deps-jar:
compile-single:
run-single:
Jan 10, 2010 6:45:52 PM ClientDataBase.Manager Test
SEVERE: null
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FROM clienttable' at line 1
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
        at com.mysql.jdbc.Util.handleNewInstance(Util.java:406)
        at com.mysql.jdbc.Util.getInstance(Util.java:381)
        at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1030)
        at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)
        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3491)
        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3423)
        at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1936)
        at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2060)
        at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2536)
        at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2465)
        at com.mysql.jdbc.StatementImpl.executeQuery(StatementImpl.java:1383)
        at ClientDataBase.Manager.Test(Manager.java:94)
        at ClientGUI.MainFrame.submit(MainFrame.java:374)
        at ClientGUI.MainFrame.jButton1ActionPerformed(MainFrame.java:257)
        at ClientGUI.MainFrame.access$600(MainFrame.java:33)
        at ClientGUI.MainFrame$7.actionPerformed(MainFrame.java:143)
        at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
        at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
        at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
        at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
        at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
        at java.awt.Component.processMouseEvent(Component.java:6038)
        at javax.swing.JComponent.processMouseEvent(JComponent.java:3265)
        at java.awt.Component.processEvent(Component.java:5803)
        at java.awt.Container.processEvent(Container.java:2058)
        at java.awt.Component.dispatchEventImpl(Component.java:4410)
        at java.awt.Container.dispatchEventImpl(Container.java:2116)
        at java.awt.Component.dispatchEvent(Component.java:4240)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4322)
        at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3986)
        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3916)
        at java.awt.Container.dispatchEventImpl(Container.java:2102)
        at java.awt.Window.dispatchEventImpl(Window.java:2429)
        at java.awt.Component.dispatchEvent(Component.java:4240)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
        at ClientDataBase.Manager.Test(Manager.java:99)
        at ClientGUI.MainFrame.submit(MainFrame.java:374)
        at ClientGUI.MainFrame.jButton1ActionPerformed(MainFrame.java:257)
        at ClientGUI.MainFrame.access$600(MainFrame.java:33)
        at ClientGUI.MainFrame$7.actionPerformed(MainFrame.java:143)
        at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
        at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
        at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
        at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
        at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
        at java.awt.Component.processMouseEvent(Component.java:6038)
        at javax.swing.JComponent.processMouseEvent(JComponent.java:3265)
        at java.awt.Component.processEvent(Component.java:5803)
        at java.awt.Container.processEvent(Container.java:2058)
        at java.awt.Component.dispatchEventImpl(Component.java:4410)
        at java.awt.Container.dispatchEventImpl(Container.java:2116)
        at java.awt.Component.dispatchEvent(Component.java:4240)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4322)
        at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3986)
        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3916)
        at java.awt.Container.dispatchEventImpl(Container.java:2102)
        at java.awt.Window.dispatchEventImpl(Window.java:2429)
        at java.awt.Component.dispatchEvent(Component.java:4240)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)

Ответы [ 3 ]

6 голосов
/ 10 января 2010

Ваш выбор должен быть:

SELECT yahooId, password FROM clienttable

У вас есть И вместо запятой. Поскольку запрос недействителен, ResultSet не возвращается, и вы получаете нулевой указатель.

EDIT: Ваш запрос вернет набор результатов, но не тот, который вам нужен. yahooId И пароль вернет один столбец - результат логического И для этих столбцов. Когда вы затем к rs.getString ("yahooId"), это возвращает null, и у вас есть .equals () прямо там Корень проблемы в том, что вам нужна запятая, но моя причина для нуля была неправильной.

РЕДАКТИРОВАТЬ 2: Я попробовал запрос, и он работал на моем MySQL. Может быть, это версия вещь. В любом случае, к его проблеме я был прав до правки.

4 голосов
/ 10 января 2010

Ошибка SQL вызывает вторую ошибку. Вы должны разделять имена столбцов запятыми, а не «И».

Кроме того, не имеет значения, что yahooid и пароль являются 9-м и 11-м столбцами таблицы. Как только вы исправите синтаксическую ошибку SQL, они станут первым и вторым столбцами в запросе, поэтому вы получите их с помощью rst.getString (1) и rst.getString (2) соответственно.

Кроме того, ДЕЙСТВИТЕЛЬНО, ДЕЙСТВИТЕЛЬНО плохая идея - просто регистрировать и игнорировать исключения, как вы это сделали. Поскольку вы ничего не сделали с первым исключением, кроме записи в журнал, вы вызвали каскадирование других исключений. Это будет продолжаться до тех пор, пока вы сами не сделаете, чтобы обработчики исключений действительно обрабатывали исключения.

3 голосов
/ 10 января 2010

(1)

SELECT yahooId AND password FROM clienttable

AND не принадлежит там. Следует читать

SELECT yahooId, password FROM clienttable

(2)

Ваш цикл с next появляется после того, как вы поймали исключение из вашего запроса. Если ваш запрос выдал исключение, то в rst не на что смотреть; так что этот код должен быть в пределах try.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...