从数据库中获取空列时崩溃,如何防止? Java的

时间:2015-08-22 12:40:32

标签: java sql database crash

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)

1 个答案:

答案 0 :(得分:0)

感谢您的评论,我设法通过添加

解决了这个问题
if(specialist != null){
    the loop here
}

虽然数据库在某些ID处为空,但它取值为null,而在这种情况下,for-loop崩溃了。

可能不是最好的解决方案,但它现在有效:)