2017-04-24 3 views
0

Der Versuch, eine einzelne Zeile in eine Datenbank in Java einzufügen. Es fügt nur die erste Spalte ein und ich habe keine Ahnung warum. Hier ist der Code:Java-SQL einfügen JOptionpane

@Override 
public void actionPerformed(ActionEvent e) { 
    // throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. 
    int x = 1; 
    int limit; 
    //promts the user to enter input 
    // String InputString = JOptionPane.showInputDialog(null, "Enter the Number of Countries: ",JOptionPane.QUESTION_MESSAGE); 
    // limit = Integer.parseInt(InputString); 

    Connection connection; 
    PreparedStatement ps; 
    try { 
     String dbName = "osdesign"; 
     String dbUserName = "root"; 
     String dbPassword = ""; 
     //String u = jtfuser.getText(); 
     //String p =jpfpass.getName(); 
     String connectionString = "jdbc:mysql://localhost/" + dbName + "?user=" 
       + dbUserName + "&password=" + dbPassword 
       + "&useUnicode=true&characterEncoding=UTF-8"; 
     connection = DriverManager.getConnection(connectionString); 
     JOptionPane.showMessageDialog(null, "Connected!"); 

     //int x = 1; 
     User List = new User(); 

     //User[] List = new User [limit]; 
     //String query; 
     //for (x = 0; x < limit; x++) 
     // { 
     ///List[x] = new User(); 
     //List[x].User_type = null; 
     List.input(x); 
     //String sql = "INSERT into `userlist` (`UsrCode`, `UsrName`, `UsrPass`, `UsrPassChgDays`, `UsrPassChgDate`, `Usrtype`) VALUES(?, ?, ?, ?, ?, ?);"; 

     PreparedStatement preparedStmt = connection.prepareStatement("INSERT INTO `userlist`" + 
       "VALUES(?, ?, ?, ?, ?, ?);"); 

     String ID = List.ID; 
     String name = List.name; 
     preparedStmt.setString(1, ID); 
     preparedStmt.setString(2, name); 
     preparedStmt.setString(3, List.password); 

     preparedStmt.setString(4, List.Usr_PassChgDays); 
     preparedStmt.setString(5, List.data_of_passChg); 
     preparedStmt.setString(6, List.User_type); 

     preparedStmt.executeUpdate(); 
     //btnlogin.equals(result); 
     // panel.add(btnlogin); 
     // panel.add(jpfpass.getName(),btnlogin); 
     if (preparedStmt.equals(true)) { 
      JOptionPane.showMessageDialog(null, "Great sucess!!!"); 
      //this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     } else { 
      JOptionPane.showMessageDialog(null, "FUCK!!!"); 
     } 

     //JOptionPane.showMessageDialog(null, "User sucessfully created"); 
    } catch (SQLException ex) { 
     Logger.getLogger(RychlikSystemversion0.class.getName()).log(Level.SEVERE, null, ex); 
    } 
} 

Sah überall im Internet und versuchte jeden Trick und ich bin ehrlich verwirrt. Kann mir bitte jemand helfen?

+0

Sie müssen sicherstellen, dass die Datentypen in Java den Datentypen der Spalten in der Datenbank entsprechen. z.B. 'preparedStmt.setString (1, ID);' sollte 'preparedStmt.setInt (1, ID);' sein !! –

+0

Ich habe den Datenbankwert in varchar geändert und es gibt mir immer noch Probleme. Das Programm schwört auf dich, so dass es die Zeile nicht einfügt. –

+0

Ich hatte zunächst den gleichen Gedanken wie @ Kh.Taheri. War Ihre ID-Spalte ** in ** der Datenbanktabelle ein String-Datentyp oder ein Integer-Datentyp und genau, was ist es jetzt? Enthält ** List ** tatsächlich etwas? Testen Sie das. Lege es auf die Konsole: 'System.out.println (List.ID); System.out.println (List.name); System.out.println (List.password); 'usw. – DevilsHnd

Antwort

0

Bitte bearbeiten SQL-Abfrage entfernen; end query

PreparedStatement preparedStmt = connection.prepareStatement("INSERT INTO `userlist`" + 
       "VALUES(?, ?, ?, ?, ?, ?)**;**"); 
+0

Warum? Mag MySQL das nicht? Ich dachte, alle Datenbanksysteme akzeptieren SQL-Anweisungen mit dem Semikolon am Ende. Schließlich ist es die Standardmethode, um jede SQL-Anweisung in Datenbanksystemen zu trennen, die es erlaubt, mehr als eine SQL-Anweisung in demselben Aufruf an den Server auszuführen. Für einige Datenbanksysteme ist es eine absolute Notwendigkeit. Einige Systeme benötigen es nicht und T-SQL benötigt es vielleicht gerade nicht ... aber es wird bald. – DevilsHnd

+0

@DevilsHnd Nicht unbedingt, in einigen Datenbanksystemen ist es nur ein Trennzeichen im Client, nicht auf dem Server selbst (eine CLI weiß also, wann die Anweisung vollständig ist und an den Server zur Ausführung gesendet werden kann). Obwohl ich die Informationen in der Frage gegeben habe, stimme ich zu, dass dies wahrscheinlich nicht die Ursache ist. –

+0

@Mark Rotteveel - In einigen. Wie ich in meinem vorherigen Kommentar gesagt habe: "Einige Systeme erfordern es nicht ..." – DevilsHnd