String sql = "select spelprojekt.sid, beteckning from spelprojekt join arbetar_i on spelprojekt.sid = arbetar_i.sid join anstalld on arbetar_i.aid = anstalld.aid join specialist on anstalld.aid = specialist.aid where specialist.aid = " + specialistID + "";
String print = "";
ArrayList<HashMap<String, String>> specialist = databas.fetchRows(sql);
for (int i = 0; i < specialist.size(); i++) {
print += specialist.get(i).get("SID") + " - " +specialist.get(i).get("BETECKNING") + "\n";
}
taSpelProjekt.setText(print);
所以我有这个代码,我试图从数据库中获取两列并将其打印到netbeans中的jTextArea。
一切正常,直到我获取没有值的列。客户端崩溃而不是在textarea中显示任何内容。
SQL中的最后一个变量是&#34; specialistID
&#34;这取决于我在组合框中选择的值。只要数据库中存有使用该ID保存的内容,一切正常。但是如果数据库列为空,我想防止崩溃。
我得到了这个例外:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at MyPackage.VisaSpecialister.cbSpecialistItemStateChanged(VisaSpecialister.java:180)
at MyPackage.VisaSpecialister.access$000(VisaSpecialister.java:18)
at MyPackage.VisaSpecialister$1.itemStateChanged(VisaSpecialister.java:90)
at javax.swing.JComboBox.fireItemStateChanged(JComboBox.java:1223)
at javax.swing.JComboBox.selectedItemChanged(JComboBox.java:1271)
at javax.swing.JComboBox.contentsChanged(JComboBox.java:1330)
at javax.swing.AbstractListModel.fireContentsChanged(AbstractListModel.java:118)
at javax.swing.DefaultComboBoxModel.setSelectedItem(DefaultComboBoxModel.java:93)
at javax.swing.JComboBox.setSelectedItem(JComboBox.java:576)
at javax.swing.JComboBox.setSelectedIndex(JComboBox.java:622)
at javax.swing.plaf.basic.BasicComboPopup$Handler.mouseReleased(BasicComboPopup.java:852)
at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:290)
at java.awt.Component.processMouseEvent(Component.java:6535)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
at javax.swing.plaf.basic.BasicComboPopup$1.processMouseEvent(BasicComboPopup.java:501)
at java.awt.Component.processEvent(Component.java:6300)
at java.awt.Container.processEvent(Container.java:2236)
at java.awt.Component.dispatchEventImpl(Component.java:4891)
at java.awt.Container.dispatchEventImpl(Container.java:2294)
at java.awt.Component.dispatchEvent(Component.java:4713)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4888)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4525)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4466)
at java.awt.Container.dispatchEventImpl(Container.java:2280)
at java.awt.Window.dispatchEventImpl(Window.java:2750)
at java.awt.Component.dispatchEvent(Component.java:4713)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
at java.awt.EventQueue.access$500(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:709)
at java.awt.EventQueue$3.run(EventQueue.java:703)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)
at java.awt.EventQueue$4.run(EventQueue.java:731)
at java.awt.EventQueue$4.run(EventQueue.java:729)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
答案 0 :(得分:0)
感谢您的评论,我设法通过添加
解决了这个问题if(specialist != null){
the loop here
}
虽然数据库在某些ID处为空,但它取值为null,而在这种情况下,for-loop崩溃了。
可能不是最好的解决方案,但它现在有效:)