2013-02-09 199 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