2017-06-11 41 views
0

我一直在努力执行以下查询:的executeUpdate()抛出一个ArrayIndexOutOfBoundsException

SQL_ADDPROJECT = "INSERT INTO project (name, description, duration, departement, chef) VALUES (?, ?, ?, ?, ?)"; 

使用:

public boolean addProject(String name, String description, String duration, String budget, int chef, int departement) { 
    try { 
     addProject_statement = connection.prepareStatement(SQL_ADDPROJECT); 
     addProject_statement.setString(1, name); 
     addProject_statement.setString(2, description); 
     addProject_statement.setString(3, duration); 
     addProject_statement.setString(4, budget); 
     addProject_statement.setInt(5, chef); 
     addProject_statement.setInt(6, departement); 

     int res = addProject_statement.executeUpdate(); 
     if (res != 0) { 
      addProject_statement.close(); 
      return true; 
     } 
    } catch (Exception e) { 
     JOptionPane.showMessageDialog(null, e.getMessage()); 
    } 
    return false;    
} 

我打电话addProject这样:

save_button.addActionListener(new ActionListener() { 
    public void actionPerformed(ActionEvent e) { 
     String name = nameField.getText(); 
     String description = descField.getText(); 
     String duration = durationField.getText(); 
     String budget = budgetField.getText(); 
     int chef = User.userId; 
     int departement = User.departementId; 
     if(name != null && duration != null) { 
      if (dao.addProject(name, description, duration, budget, chef, departement)) { 
       JOptionPane.showMessageDialog(null, "Project " + name + " created successfully!"); 
       MainMenu menu = new MainMenu(); 
       menu.setVisible(true); 
       frame.dispose(); 
      } else { 
       JOptionPane.showMessageDialog(null, "Please fill in the form correctly!"); 
      } 
      return; 
     } 
    } 
}); 

,但每次我尝试执行我收到的消息对话,说5

其次是另一个消息对话,说Please fill in the form correctly

知道我填写正确!

跟踪:

java.lang.ArrayIndexOutOfBoundsException: 5 
    at org.sqlite.core.CorePreparedStatement.batch(CorePreparedStatement.java:121) 
    at org.sqlite.jdbc3.JDBC3PreparedStatement.setInt(JDBC3PreparedStatement.java:324) 
    at database.SqlConnection.addProject(SqlConnection.java:75) 
    at project.addProject$4.actionPerformed(addProject.java:196) 
    at javax.swing.AbstractButton.fireActionPerformed(Unknown Source) 
    at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source) 
    at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source) 
    at javax.swing.DefaultButtonModel.setPressed(Unknown Source) 
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source) 
    at java.awt.Component.processMouseEvent(Unknown Source) 
    at javax.swing.JComponent.processMouseEvent(Unknown Source) 
    at java.awt.Component.processEvent(Unknown Source) 
    at java.awt.Container.processEvent(Unknown Source) 
    at java.awt.Component.dispatchEventImpl(Unknown Source) 
    at java.awt.Container.dispatchEventImpl(Unknown Source) 
    at java.awt.Component.dispatchEvent(Unknown Source) 
    at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source) 
    at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source) 
    at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source) 
    at java.awt.Container.dispatchEventImpl(Unknown Source) 
    at java.awt.Window.dispatchEventImpl(Unknown Source) 
    at java.awt.Component.dispatchEvent(Unknown Source) 
    at java.awt.EventQueue.dispatchEventImpl(Unknown Source) 
    at java.awt.EventQueue.access$500(Unknown Source) 
    at java.awt.EventQueue$3.run(Unknown Source) 
    at java.awt.EventQueue$3.run(Unknown Source) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source) 
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source) 
    at java.awt.EventQueue$4.run(Unknown Source) 
    at java.awt.EventQueue$4.run(Unknown Source) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source) 
    at java.awt.EventQueue.dispatchEvent(Unknown Source) 
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
    at java.awt.EventDispatchThread.run(Unknown Source) 
+0

在catch可以请你现在打印堆栈跟踪,并将其添加... – utkarsh31

+0

@ utkarsh31,我看到我知道的跟踪它的未来在那里从,谢谢! – mari

+0

乐意帮忙:) – utkarsh31

回答

2

addProject_statement.setString(4, budget);已在SQL声明中没有匹配的参数,所以值(和它们的类型)的数量不匹配。


对于

SQL_ADDPROJECT = "INSERT INTO project (name, description, duration, budget, departement, chef) VALUES (?, ?, ?, ?, ?, ?)"; 

使用

addProject_statement.setString(1, name); 
addProject_statement.setString(2, description); 
addProject_statement.setString(3, duration); 
addProject_statement.setString(4, budget); 
addProject_statement.setInt(5, departement); 
addProject_statement.setInt(6, chef); 
1

我相信你将在addProject_statement 6个值,但只有5 PARAMS在Insertquery,那是什么导致了问题...

+0

没错。设置语句的顺序也是错误的。 – c0der

+0

同意,这也需要修复 – utkarsh31

1

你声明ISN”订购。厨师没有预算和部门。

public boolean addProject(String name, String description, String duration, String budget, int chef, int departement) { 
    try { 
     addProject_statement = connection.prepareStatement(SQL_ADDPROJECT); 
     addProject_statement.setString(1, name); 
     addProject_statement.setString(2, description); 
     addProject_statement.setString(3, duration); 
     addProject_statement.setString(4, departement); 
     addProject_statement.setInt(5, chef); 
+0

我相信你需要添加'addProject_statement.setString(4,预算);'并相应地更改'SQL' – c0der

相关问题