2017-05-12 4 views
0

Ich versuche, unsere SQL-Datenbank von einem JFrame-Panel in Netbeans zu aktualisieren. Momentan versuche ich eine Schaltfläche aus dem "registernewStudent" -Panel zu verwenden, wo der Benutzer 4 Textfelder auswählen kann, wobei die erste (Studenten-ID) und die letzte (Raum) eine Ganzzahl und die mittleren 2 Zeichenfolgen sein sollen. Ich erhalte jedoch eine Fehlermeldung, die besagt: "Ausnahme im Thread" AWT-EventQueue-0 "java.lang.NullPointerException"SQL-Einfügung mit Java

Unten finden Sie den Quellcode für die Schaltfläche.

Dies ist unser erstes reales Projekt, wir würden uns über jede Hilfe freuen, die wir bekommen könnten.

private void btnNyREActionPerformed(java.awt.event.ActionEvent evt) {           
    try { 
     String talStrang1 = txtElevID.getText(); 
     int tal1 = Integer.parseInt(talStrang1); 
     String Strang2 = txtElevFN.getText(); 
     String Strang3 = txtElevEN.getText(); 
     String talStrang4 = txtElevSS.getText(); 
     int tal2 = Integer.parseInt(talStrang4); 

     database.insert("insert into Elev values(tal1, Strang2, Strang3,tal2)"); 

    } catch (InfException ex) { 
     Logger.getLogger(NyRegElev.class.getName()).log(Level.SEVERE, null, ex); 
    } 
}  
+2

Bitte lernen Sie, wie Sie 'PreparedStatement' verwenden: http://docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html –

Antwort

3

Zum einen müssen Sie angeben, in welche Spalten die Werte eingefügt werden sollen. Etwas wie:

database.insert("insert into Elev (column1, column2, column3, column4) values...;

Die column# würde in der Tabelle der tatsächliche Name der Spalte sein.

Zweitens können Sie Variablen nicht einfach als String in SQL einfügen. Sie werden sie nicht als Variable erkennen. Stattdessen müssen Sie Verkettung verwenden und so etwas wie tun:

database.insert("insert into Elev (column1, column2, column3, column4) values(" + tal1 + "," + Strang2 + "," Strang3 + "," tal2 + ")"; 

Aber das lässt Sie offen für Schwachstellen. Sie sollten stattdessen prepared statements verwenden, um SQL-Injektionen zu vermeiden.

Ein Beispiel für eine in MySQL vorbereitete Anweisung in Java finden Sie im obigen Link. Ein Beispiel habe ich Ihre Abfrage aufgenommen und konvertiert das Beispiel zu dem, was es für Sie aussehen sollte:

String query = "insert into Elev (column1, column2, column3, column4) values (?, ?, ?, ?)"; 

// create the mysql insert preparedstatement 
     PreparedStatement preparedStmt = conn.prepareStatement(query); 
     preparedStmt.setInt(1, tal1); 
     preparedStmt.setString (2, Strang1); 
     preparedStmt.setString (3, Strang3); 
     preparedStmt.setInt(4, tal2); 

// execute the preparedstatement 
     preparedStmt.execute(); 

Die vorbereitete Anweisung wird die Parameter geliefert nehmen und sie anstelle der ? ‚s, die in der query Variable (unter anderem).