2013-02-09 134 views
-1

我想保存輸入到jtable的信息到mysql數據庫。我專門從jtable中將學生的標記存入數據庫。這裏是我的代碼片段,它應該通過點擊gui上的「保存」按鈕來保存項目。JTable + mysql數據庫

private void btnSaveActionPerformed(java.awt.event.ActionEvent evt) 
{                        
    tblMarkSheet.getRowCount(); 
     try 
     { 

     String sql = "INSERT INTO marksheet(examName,streamName,className,termName,academicYear,pupilID,mathematics,english,kiswahili,science,SS_CRE,total) VALUES('" + cboExamName.getSelectedItem() + "','" + cboStream.getSelectedItem() + "','" + cboClass.getSelectedItem() + "','" + cboTerm.getSelectedItem() + "','" + cboAcademicYear.getSelectedItem() + "','" + Integer.parseInt(tblMarkSheet.getValueAt(row, 0).toString()) + "','" + Integer.parseInt(tblMarkSheet.getValueAt(row, 1).toString()) + "','" + Integer.parseInt(tblMarkSheet.getValueAt(row, 2).toString()) + "','" + Integer.parseInt(tblMarkSheet.getValueAt(row, 3).toString()) + "','" + Integer.parseInt(tblMarkSheet.getValueAt(row, 4).toString()) + "','" + Integer.parseInt(tblMarkSheet.getValueAt(row, 5).toString()) + "','" + Integer.parseInt(tblMarkSheet.getValueAt(row, 6).toString()) + "') "; 
     stmt.execute(sql); 
     JOptionPane.showMessageDialog(null, "Marks Saved successfully!"); 

     } 
     catch (Exception e) 
     { 
     JOptionPane.showMessageDialog(this, e.getMessage()); 
     e.printStackTrace(); 
     } 
} 

,我發現了以下錯誤:

java.lang.NullPointerException 
    at AmsProject.MarkSheet.btnSaveActionPerformed(MarkSheet.java:445) 
    at AmsProject.MarkSheet.access$100(MarkSheet.java:18) 
    at AmsProject.MarkSheet$3.actionPerformed(MarkSheet.java:185) 
    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:2719) 
    at java.awt.Component.dispatchEvent(Component.java:4687) 
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:723) 
    at java.awt.EventQueue.access$200(EventQueue.java:103) 
    at java.awt.EventQueue$3.run(EventQueue.java:682) 
    at java.awt.EventQueue$3.run(EventQueue.java:680) 
    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:696) 
    at java.awt.EventQueue$4.run(EventQueue.java:694) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) 
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:693) 
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242) 
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161) 
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138) 
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:91) 

我希望我能在這裏貼上我的代碼行數,但我的IDE與顯示的數字問題。 445線是這個

System.out.println(Integer.parseInt(tblMarkSheet.getValueAt(row, 6).toString())); 

線18:

public class MarkSheet extends javax.swing.JFrame { 

和線路185:

btnSaveActionPerformed(evt); 

請幫助我。我將不勝感激!

+1

哪裏*確切*你卡? – 2013-02-09 15:44:38

+0

保存到數據庫中。我無法擺脫空指針異常 – 2013-02-09 15:55:34

+0

請重新設置您的代碼的格式,「INSERT」行太長了。然後重新運行代碼並給我們周圍的線條,並將堆棧軌跡修剪到實際上屬於你的線條。 – 2013-02-09 15:59:54

回答

1

使用Statement#executeUpdate進行數據庫寫入操作。還可以使用PreparedStatement而不是Statement來防止SQL Injection攻擊。

從您的更新變量tblMarkSheet似乎null

System.out.println(Integer.parseInt(tblMarkSheet.getValueAt(row, 6).toString())) 

檢查,這已經被正確分配,並可在actionPerformed方法的範圍。例如,確保你沒有在實例化的地方創建這個變量的本地實例。

+0

+1爲PreparedStatement。 – camickr 2013-02-09 15:48:44

+0

嘿,Reimus,謝謝你的幫助。我已經提出了更正建議,但仍然收到空指針異常 – 2013-02-09 15:57:32

+0

我們無法訪問您的程序或數據。我們不知道異常消息的行號是指什麼。所以你需要確定自己哪個變量是空的,爲什麼它是空的。 – camickr 2013-02-09 16:38:10