java - 从数据库获取空列时崩溃,如何防止? java

标签 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 中。

一切正常,直到我获取没有值的列。客户端崩溃,而不仅仅是在文本区域中显示任何内容。

SQL 中的最后一个变量是“specialistID”,它会根据我在组合框中选择的值而变化。只要数据库中存在使用该 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)

最佳答案

感谢您的评论,我设法通过添加解决了这个问题

if(specialist != null){
    the loop here
}

当数据库在某些 ID 处为空时,它会获取 null,并且在这种情况下 for 循环会崩溃。

可能不是最好的解决方案,但目前有效:)

关于java - 从数据库获取空列时崩溃,如何防止? java ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32156236/

相关文章:

java - 从许多类的类中调用函数而无需重置值

java - 在 netbeans 中使用 JAWS 查找同义词

sql - django对象...values()仅选择一些字段

database - 检索按 PostgreSQL 的 Ltree 模块下的列排序的完整层次结构

sql - 选择和显示排名项目和用户的投票,如 la reddit、digg 等

java - 持久化关联实体时违反 Hibernate 约束

java - 添加同一按钮的多个实例

mysql - Min、Max、Average 和 Count 分组到 15 分钟的 bin 中

mysql - SQL:对行进行计数和分组

java - MySql数据库设置: unknown database fcdb