繁体   English   中英

Java MySQL-简单MySQL登录框架中的未知Null指针异常

[英]Java MySQL - Unknown Null Pointer Exception in simple MySQL Login Frame

我有一个连接到MySQL数据库的简单登录屏幕。 它连接得很好,但是在尝试执行时抛出空指针异常。 这是我的代码的两个片段以及堆栈跟踪。 我加粗了抛出异常的行。

package GUI;

import java.sql.*;
import javax.swing.JOptionPane;
import java.awt.event.*;

public class LogInFrame extends javax.swing.JFrame
{

    Connection con;
    Statement st;
    ResultSet rs;

    // Login Constructor
    public LogInFrame()
    {
        connect();
        initComponents();
        setLocationRelativeTo(null);
    }

    public void connect(){
         try
        {
            con = DriverManager.getConnection(
                    "jdbc:mysql://instance44668.db.xeround.com:5719/obliquedb?"
                    + "user=NAME2&password=PASS");
        }
        catch (SQLException ex)
        {
            System.err.println("Cannot connect to database server");
            System.err.println(ex.getMessage());
        } 
        finally
        {
            try
            {
                con.close();
            } 
            catch (SQLException ex)
            {
                System.out.println("Better luck next time");
            }
        } 
    }

这是执行语句的方法

private void acceptButtonActionPerformed(java.awt.event.ActionEvent evt)                                         
    {                                             
        try 
        {

            String user = userTextField.getText().trim();
            char[] password = passwordTextField.getPassword();
            String pass = new String(password);

            String query = "SELECT username,password FROM users WHERE username = '"+user+"'and password = '"+pass+"'";

  EXCEPTION THROWN-**rs = st.executeQuery(query);**

            int count = 0;
            while(rs.next())
            {
                count++;
            }

            if(count == 1) {
                JOptionPane.showMessageDialog(this, 
                        "Login Successful", 
                        "Error Message", JOptionPane.ERROR_MESSAGE);
            }
            else if(count > 1) {
                JOptionPane.showMessageDialog(this, 
                        "Duplicate Records Found!", 
                        "Error Message", JOptionPane.ERROR_MESSAGE);
            }
            else {
                JOptionPane.showMessageDialog(this, 
                        "User Not Found", 
                        "Error Message", JOptionPane.ERROR_MESSAGE);
            }

        }
        catch (Exception e) {
            System.out.println("Error Retrieving Records" + e);
    }                                        
    }

和堆栈跟踪

Error Retrieving Recordsjava.lang.NullPointerException
java.lang.NullPointerException
    at GUI.LogInFrame.acceptButtonActionPerformed(LogInFrame.java:178)
    at GUI.LogInFrame.access$000(LogInFrame.java:7)
    at GUI.LogInFrame$1.actionPerformed(LogInFrame.java:94)
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
    at java.awt.Component.processMouseEvent(Component.java:6505)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
    at java.awt.Component.processEvent(Component.java:6270)
    at java.awt.Container.processEvent(Container.java:2229)
    at java.awt.Component.dispatchEventImpl(Component.java:4861)
    at java.awt.Container.dispatchEventImpl(Container.java:2287)
    at java.awt.Component.dispatchEvent(Component.java:4687)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
    at java.awt.Container.dispatchEventImpl(Container.java:2273)
    at java.awt.Window.dispatchEventImpl(Window.java:2713)
    at java.awt.Component.dispatchEvent(Component.java:4687)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:707)
    at java.awt.EventQueue.access$000(EventQueue.java:101)
    at java.awt.EventQueue$3.run(EventQueue.java:666)
    at java.awt.EventQueue$3.run(EventQueue.java:664)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
    at java.awt.EventQueue$4.run(EventQueue.java:680)
    at java.awt.EventQueue$4.run(EventQueue.java:678)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:677)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:90)

connect ,连接立即关闭。

该语句最好应该是PreparedStatement(具有其他优点)。

因此,也要在connect中创建语句并最终删除。

在应用程序出口关闭该语句和连接时进行disconnect连接。

结果集rs应该接近。

       String query = "SELECT username,password "
           + "FROM users "
           + "WHERE BINARY username = ? "
           + "AND BINARY password = ?";

对于区分大小写的比较,请为列指定二进制排序规则,或使用BINARY。

密码可以更适当地处理,但是在我们谈论台式机应用程序时,这很好。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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