Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有史以来第一款Java应用程序;can';在数据库中查询?_Java_Mysql - Fatal编程技术网

有史以来第一款Java应用程序;can';在数据库中查询?

有史以来第一款Java应用程序;can';在数据库中查询?,java,mysql,Java,Mysql,我用Java创建了我的第一个应用程序(但已经用C#和Python编程了),有一个问题我甚至无法理解,因为调试器消息对用户非常不友好 调试器输出如下所示: 调试:线程“AWT-EventQueue-0”中出现异常 位于的java.lang.NullPointerException Kwestinariusz.MainWindow.jButton1ActionPerformed(MainWindow.java:176) 在Kwestionariusz.MainWindow.access$100(Ma

我用Java创建了我的第一个应用程序(但已经用C#和Python编程了),有一个问题我甚至无法理解,因为调试器消息对用户非常不友好

调试器输出如下所示:

调试:线程“AWT-EventQueue-0”中出现异常 位于的java.lang.NullPointerException Kwestinariusz.MainWindow.jButton1ActionPerformed(MainWindow.java:176) 在Kwestionariusz.MainWindow.access$100(MainWindow.java:14)访问 Kwestionariusz.MainWindow$2.actionPerformed(MainWindow.java:72)在 javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018) 在 javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341) 在 fireActionPerformed(DefaultButtonModel.java:402) 在 setPressed(DefaultButtonModel.java:259) 在 javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252) 位于java.awt.Component.ProcessMouseeEvent(Component.java:6505) javax.swing.JComponent.ProcessMouseeEvent(JComponent.java:3321)位于 位于的java.awt.Component.processEvent(Component.java:6270) java.awt.Container.processEvent(Container.java:2229)位于 dispatchEventImpl(Component.java:4861)位于 dispatchEventImpl(Container.java:2287)位于 dispatchEvent(Component.java:4687)位于 awt.LightweightDispatcher.RetargetMouseeEvent(Container.java:4832) 在 java.awt.LightweightDispatcher.ProcessMouseeEvent(Container.java:4492) 位于java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422) 位于java.awt.Container.dispatchEventImpl(Container.java:2273) dispatchEventImpl(Window.java:2719)位于 dispatchEvent(Component.java:4687)位于 dispatchEventImpl(EventQueue.java:703)位于 访问$000(EventQueue.java:102) java.awt.EventQueue$3.run(EventQueue.java:662)位于 java.awt.EventQueue$3.run(EventQueue.java:660)在 java.security.AccessController.doPrivileged(本机方法)位于 ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) 在 ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87) 在java.awt.EventQueue$4.run(EventQueue.java:676)处 java.awt.EventQueue$4.run(EventQueue.java:674)在 java.security.AccessController.doPrivileged(本机方法)位于 ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) 位于java.awt.EventQueue.dispatchEvent(EventQueue.java:673) java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:244) 在 java.awt.EventDispatchThread.PumpeEventsforFilter(EventDispatchThread.java:163) 在 java.awt.EventDispatchThread.PumpeEventsforHierarchy(EventDispatchThread.java:151) 在 EventDispatchThread.pumpEvents(EventDispatchThread.java:147) 在 EventDispatchThread.pumpEvents(EventDispatchThread.java:139) 位于java.awt.EventDispatchThread.run(EventDispatchThread.java:97) 生成成功(总时间:16秒)

这可能与以下动作有关:

if (("".equals(login) ) || ("".equals(password)) || ("".equals(accountType)))
        {}
        else
        {
            Users user;
            user = (Users) db.createNamedQuery("Users.findByLoginAndType")
            .setParameter("login", login)
            .setParameter("company", accountBool)
            .getSingleResult();
            if (password.equals(user.getPassword()))
            {
                JFrame appWindow;
                appWindow = new AppWindow();
                this.setVisible(false);
                appWindow.setVisible(true);       
            }
        }
其中:

@NamedQuery(name = "Users.findByLoginAndType", query = "SELECT u FROM Users u WHERE u.login = :login AND u.company = :companyBool LIMIT 1")

这里是它发生的地方:

Kwestionariusz.MainWindow.jButton1ActionPerformed(MainWindow.java:176) at 
MainWindow.java中的第176行。打开文本编辑器,打开行号显示,然后转到该行。查看您在该行上使用的所有对象引用,其中一个为null。您需要找出为什么无法初始化它以指向有用的内容

我个人认为这样的代码是一个巨大的错误:

if (("".equals(login) ) || ("".equals(password)) || ("".equals(accountType)))
        {}
报告这三项中的哪一项是空白的根本没有价值吗?如果一个为空会发生什么?如果它有一个只带空格的字符串呢


我认为您试图在这里表达您与用户之间的合同,但没有使用正确的习惯用法。在检查每个异常后抛出一个
IllegalArgumentException
,这是我的做法。这是一个未经检查的异常,因此调用方将被迫处理它。

您是否通过调试器查看了NPE的来源?您看到的是堆栈跟踪。它显示异常是由第176行的
main窗口中名为
jButton1ActionPerformed
的方法引发的。调用该方法的方法位于第14行,第72行由
actionPerformed
调用,依此类推。这是一个非常有用的工具,但您需要将它与调试器结合起来—您使用的是IDE吗?“有史以来第一个Java应用程序;无法在数据库中查询?”哇!我的“第一次”Java pp(每次我安装或更新开发环境时编写)是
HelloWorld
,但是“更新DB”-你很勇敢。好吧,这只是数据库连接错误,谢谢你的帮助,很抱歉。我相信你没有粘贴你提到的代码,所以我不知道最大的错误是什么。。。但我猜你输入的是密码验证,我知道这是错误的,但这只是“暂时”了解GUI编程的所有基础知识。第176行是:user=(Users)db.createNamedQuery(“Users.findByLoginAndType”).setParameter(“login”,login.setParameter(“company”,accountBool.getSingleResult();所以这就是我怀疑的地方。。。不过,我不知道为什么。我是否错误地设置了参数或查询错误?如果(()| |()| |())用户将字段留空,那么if(()| |()| |())就是不做任何事情。。。但我想你的方式要优雅得多。我确实从你的代码中粘贴了,只是没有粘贴与NPE有关的部分。我猜db是空的。最好的方法是使用一个好的调试器并设置断点。