2017-11-13 1 views
0

Ich versuche gerade, eine txt-Datei über ein Java-Programm in eine mySQL-Datenbank zu schreiben. Meine Datenbank verbindet sich korrekt über einen JDBC-Treiber und ich kann Tabellen usw. über das Programm erstellen. Jedoch, wenn ich versuche, die Textdatei zu lesen, bekomme ich diese FehlermeldungEine TXT-Datei in die mySQL-Datenbank schreiben

java.sql.SQLException: Sie haben einen Fehler in Ihrer SQL-Syntax; Überprüfen Sie das Handbuch, das Ihrer MariaDB-Serverversion entspricht, für die richtige Syntax in der Nähe von "FName", "SName", "DOB" VALUES ("John", "McCullough", "270696") in Zeile 1

Ich kann keinen Fehler in meinem SQL-Code finden. Hier ist der Rest des Codes von der Klasse. Jede Hilfe würde sehr geschätzt werden.

   try (Connection con = DriverManager.getConnection(dbUrl, dbUsername, dbPassword)) { 
       FileReader file1 = new FileReader("resources/Test.txt"); 
       BufferedReader buffer1 = new BufferedReader(file1); 
       String read; 
       while ((read = buffer1.readLine()) != null) { 
        String[] row = read.split(","); 
        String fName = row[0]; 
        String sName = row[1]; 
        String DOB = row[2]; 
        String insert = "INSERT INTO chessleague.table1 ('FName' , 'SName' , 'DOB') VALUES ('" + fName + "' , '" + sName + "' , '" + DOB + "')"; 

        ps = con.prepareStatement(insert); 

        ps.executeUpdate(); 
        ps.close(); 
       } 
      } catch (Exception ex) { 
       System.out.println(ex); 
      } 
+3

keine Anführungszeichen für die Spaltennamen verwenden '('FName', '$ name', 'DOB')' tun nur '(FName, SNAME, DOB)' –

+2

Zuerst wirst du wollen Lesen Sie [Vorbereitete Anweisungen verwenden] (https://docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html). Ist DOB wirklich ein 'String'-basierter Wert? – MadProgrammer

+0

@ Aominè Danke, dass mein Problem behoben –

Antwort

1

Wie in den Kommentaren erwähnt, zitieren Sie nicht die Spaltennamen.

Der Code missbraucht vorbereitete Anweisungen stark, um einfaches SQL auszuführen. Die Klasse Connection verfügt über eine createStatement()-Methode, die eine einfache Anweisung erstellt, die für SQL-Befehle in Textform gedacht ist.

Statement stmt = con.createStatement(); 
stmt.execute("SELECT * from test.t1"); 

Vorbereitete Anweisungen erwarten eine Vorlage, die zum Erstellen der SQL-Anweisungen verwendet wird. Hier ist ein Beispiel, wie die Einfügung mit vorbereiteten Anweisungsbefehlen durchgeführt werden könnte.

try (PreparedStatement ps = con.prepareStatement("INSERT INTO chessleague.table1 (FName , SName , DOB) VALUES (?, ?, ?)")) { 
    ps.setString(0, fName); 
    ps.setString(1, sName); 
    ps.setString(2, DOB); 
    ps.execute(); 
} catch (SQLException ex) { 
    System.out.println("SQLException: " + ex.getMessage()); 
}