2015-04-19 3 views
0

В приведенном ниже коде всегда возникает ошибка NullPointerException.Ошибка NullPointerException при входе по запросу JDBC

Подключение:

Connection con; 
java.sql.PreparedStatement st; 

public void Connect() 
{ 
    try{ 

     Class.forName("com.mysql.jdbc.Driver").newInstance(); 

     String user = "root"; 
     String password = ""; 

     con = DriverManager.getConnection("jdbc:mysql://localhost:3306/mpdb",user,password); 

     String sql = new String("SELECT * FROM 'dati' WHERE user =? and pass =?"); 

     st = con.prepareStatement(sql); 

    }catch(Exception ex){ 

     JOptionPane.showMessageDialog(null, "Connessione non riuscita"); 
     ex.printStackTrace(); 
    } 
} 

Логин:

@SuppressWarnings("deprecation") 
public void mouseClicked(MouseEvent arg0) { 

    TextFields tf = new TextFields(); 
    Driver d = new Driver(); 

    try{ 

     String sql = new String("SELECT user,pass FROM 'dati' WHERE user =? and pass =?"); 

     ps = d.con.prepareStatement(sql); 
     ps.setString(1,tf.ftf.getText()); //JFormattedTextField 
     ps.setString(2,tf.pf.getText()); //JPasswordField 

     rs = ps.executeQuery(); 

     if(rs.next()){ 

      JOptionPane.showMessageDialog(null, "User successfully logged"); 

     }else{ 

      JOptionPane.showMessageDialog(null, "User not found"); 
     } 

     }catch(Exception ex){ 

      ex.printStackTrace(); 
     } 
} 
+7

Вы должны указать свою ошибку –

+0

В частности, отправьте трассировку стека, указав код, на который ссылаются номера строк в трассировке стека. Благодаря! –

+0

Используйте отладчик, чтобы выполнить свой код и найти нулевую переменную, вызывающую исключение. Затем вы можете добавить чеки, чтобы предотвратить проблему. – JNYRanger

ответ

0

select утверждение неверно. Одиночные кавычки (') обозначают строковые литералы в SQL, а не имена объектов (в вашем случае - имя таблицы). Поскольку SQL недействителен, набор результатов не может быть создан и, следовательно, исключение.

Чтобы решить эту проблему, вы должны удалить кавычки 'dati':

String sql = "SELECT user,pass FROM dati WHERE user =? and pass =?" 
0

Я решил с этим кодом:

Выполнить подключение:

package main; 

import java.sql.Connection; 
import java.sql.DriverManager; 

import javax.swing.JOptionPane; 

public class Driver { 

    Connection con = null; 

    public static Connection Join() 
    { 

    try{ 

     Class.forName("com.mysql.jdbc.Driver").newInstance(); 

     String user = "root"; 
     String password = ""; 

     Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/mpdb",user,password); 

     return con; 

    }catch(Exception ex){ 

     JOptionPane.showMessageDialog(null, "Connessione non riuscita"); 
     ex.printStackTrace(); 
     return null; 

    } 

    } 

} 

Войти Кнопка:

@SuppressWarnings("deprecation") 
     public void mouseClicked(MouseEvent arg0) { 

      TextFields tf = new TextFields(); 

      String sql = new String("SELECT * FROM `dati` WHERE user = ? and pass = ?"); 

      try{ 

       ps = con.prepareStatement(sql); 
       ps.setString(1,tf.ftf.getText().trim()); 
       ps.setString(2,tf.pf.getText().trim()); 

       rs = ps.executeQuery(); 

       if(rs.next()){ 

        JOptionPane.showMessageDialog(null, "Login effettuato"); 

       }else{ 

        JOptionPane.showMessageDialog(null, "Utente o password non corretti"); 

       } 

       }catch(Exception ex){ 

        ex.printStackTrace(); 

       } 

     } 
     public void mousePressed(MouseEvent arg0) { 

     } 
     public void mouseReleased(MouseEvent arg0) { 

     } 
    }); 

Но теперь у меня новая проблема: программа выполняет свою работу, но она не сравнивает правильно пароль. Как мне продолжить?

Смежные вопросы