2016-07-28 15 views
0

Ich habe Probleme beim Einfügen eines Datums für den jDateChooser in meine Oracle DB. Unten ist das Aktionsereignis in der Klasse staffDisplay.Datum von JDateChooser in Oracle DB einfügen

`public void saveButtonPressed(ActionEvent e){ 
     try{ 
      int result = staff.addStaff(
        firstNameTextField.getText(), 
        lastNameTextField.getText(), 
        dateOfBirthDateChooser.getDate(), 
        departmentTextField.getText(), 
        Double.parseDouble(salaryTextField.getText()), 
        startDateDateChooser.getDate(), 
        Boolean.parseBoolean(fullTimeTextField.getText())); 

      if(result == 1){//it worked 
       JOptionPane.showMessageDialog(this,"Staff Member Added Successfully"); 
      }else{//didn't work 
       JOptionPane.showMessageDialog(this, "Error Occured - Staff member was not added"); 
      }` 

Dies ist die vorbereitete Anweisung ist in einer anderen Klasse.

`public class StaffQueries { 
private static final String URL = "jdbc:oracle:thin:@localhost:1521:xe"; 
private static final String USERNAME = "xxx"; 
private static final String PASSWORD = "xxx"; 

private Connection con; 

private PreparedStatement insert = null; 

public StaffQueries() { 

    try{ 
     Class.forName("oracle.jdbc.driver.OracleDriver"); 
     con = DriverManager.getConnection(URL,USERNAME,PASSWORD); 
     System.out.println("Drivers loaded and connection made"); 

     insert = con.prepareStatement("INSERT INTO STAFF " + "(StaffID, FirstName, LastName, DateOfBirth, Department, Salary, StartDate, Fulltime)" 
       + "VALUES(ColmStaffSequence.NextVal,?,?,?,?,?,?,?)"); 

    }catch(SQLException e){ 
     System.out.println("something went wrong with the DataBase"); 
     e.printStackTrace(); 
     System.exit(1); 

    }catch(Exception e){ 
     System.out.println("something went wrong when loading the drivers"); 
     e.printStackTrace(); 
     System.exit(2); 

    } 
} 

public int addStaff(String fn, String ln, Date dob, String d, double sal, Date sd, boolean ft){ 

     int results = 0; 

     try{ 
      //fill in the missing parameters for the prepared insert statement 
      insert.setString(1, fn); 
      insert.setString(2, ln); 
      insert.setDate(3, dob); 
      insert.setString(4, d); 
      insert.setDouble(5, sal); 
      insert.setDate(6, sd); 
      insert.setBoolean(7, ft); 

      //execute the prepared insert statement 
      results = insert.executeUpdate(); 
     } catch (SQLException e){ 
      e.printStackTrace(); 
      close(); 
     } 
     return results; 
    }` 

Es Fehlermeldung sagt

`Exception in thread "AWT-EventQueue-0" java.lang.Error: Unresolved compilation problem: 
The method addStaff(java.lang.String, java.lang.String, java.sql.Date, java.lang.String, double, java.sql.Date, boolean) in the type StaffQueries is not applicable for the arguments (java.lang.String, java.lang.String, java.util.Date, java.lang.String, double, java.util.Date, boolean)` 

Also ich denke, das Datum insertedd zum jdatechooser als java.util.date eingegeben und ich brauche es java.sql.date zu sein? Wenn das das Problem ist? Wenn ja, wie konvertiere ich es in java.sql.date? Vielen Dank.

+0

Ändern Sie den Import von 'java.sql.Date' mit zu' java.util.Date' in StaffQueries – Jens

+0

ich änderte sich dies und eine neue Ausnahme kommt auf. 'java.lang.ClassCastException: java.util.Date kann nicht in java.sql.Date' umgewandelt werden. Ich verstehe, warum ein util.date nicht in sql.date umgewandelt werden kann, aber ich weiß nicht, wie ich das im Code korrigieren kann. Hast du irgendwelche Vorschläge? – Clyo

Antwort

0

können Sie verwenden new java.sql.Date(long milis) und bekommen die Millisekunden von dem gewählten Datum von startDateDateChooser.getDate().getTime()