2017-06-11 5 views
0

Ich habe die folgende Abfrage auszuführen versucht:executeUpdate() wirft eine ArrayIndexOutOfBoundsException

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

mit:

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;    
} 

ich addProject so nennen:

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; 
     } 
    } 
}); 

aber jedes Mal Ich versuche auszuführen, ich bekomme einen Nachrichtendialog, der 5

01 sagt

durch eine andere Nachricht Dialog gefolgt, die Wissen Please fill in the form correctly

sagt, dass ich es richtig zu füllen haben!

Trace:

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

Im Fang Sie bitte auf den Stacktrace drucken und fügen Sie es ... – utkarsh31

+0

@ utkarsh31 jetzt, dass ich die Spur sah ich weiß, wo es kommt von, danke! – mari

+0

Glücklich zu helfen :) .. – utkarsh31

Antwort

2

addProject_statement.setString(4, budget); hat kein zugehöriges Argument in der SQL Anweisung so viele Werte (und deren Art) nicht übereinstimmen.


Für

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

Verwenden

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

Ich glaube, Sie hinzufügen 6 Werte im addProject_statement aber es gibt nur 5 params in der Insertquery, das ist, was das Problem verursacht ...

+0

Das stimmt. Die Reihenfolge der gesetzten Anweisungen ist ebenfalls falsch. – c0der

+0

einverstanden, das muss auch behoben werden – utkarsh31

1

Sie Anweisung isn‘ t bestellt. Es gibt kein Budget und Abteilung ist vor Chef.

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

Ich glaube, Sie müssen 'addProject_statement.setString (4, Budget) hinzufügen;' und ändern Sie 'SQL' entsprechend – c0der

Verwandte Themen