2017-06-11 42 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

相關問題