SQLite mit Java / Probleme beim INSERT Befehl

Fissko

Mitglied
Hallo, ich habe die Klasse "Hinzufügen", die über eine andere Klasse aufgerufen wird. In der Klasse "Hinzufügen" sollen die Werte in einen vorher ausgewählte Tabelle eingefügt werden.
Allerdings erhalte ich den Fehler: " org.sqlite.SQLiteException: [SQLITE_ERROR] SQL error or missing database (no such column: ...)"

Ich habe schon mehrmals meine über die for Schleifen ausfgenommenen Werte zum Test ausgelesen und das passt immer. Daher verstehe ich den Fehler hier nicht.
hinzufügenWerteArray soll die einzelnen Werte für die Spalten einer Tabelle einlesen.
columnNames beinhaltet die Namen der Spalten.
Und relName Insert gibt den Tabellennamen an, in den etwas eingefügt werden soll.

Weiß da jemand, wo der wahrscheinlich super einfache Fehler liegt? ^^

Danke schonmal 😀

Java:
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.sql.*;
import java.util.ArrayList;

public class Hinzufügen {
   
    private static ArrayList<String> hinzufügenWerteArray = new ArrayList<>();
   
    public static void hinzufügen(ArrayList<String> columnNames, String relNameInsert) {
          Connection c = null;
          Statement stmt = null;
          BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
         
          try {
             Class.forName("org.sqlite.JDBC");
             c = DriverManager.getConnection("jdbc:sqlite:test.db");
             System.out.println("Opened database successfully");
            
            
                 for (int i = 0; i < columnNames.size(); i++) {
                   System.out.print("Was möchten Sie als: " + columnNames.get(i) + " hinzufügen?");
                   String hinzufügenWerte = in.readLine();
                   hinzufügenWerteArray.add(hinzufügenWerte);
                 }   
                
            
             stmt = c.createStatement();
             String sql = "INSERT INTO " + relNameInsert + " (";
            
             for(int i = 1; i < columnNames.size(); i++)    {
                
                 sql += columnNames.get(i-1) + ", ";
             }
            
             sql += columnNames.get((columnNames.size()-1)) + ")";
                    
                    
                    sql += " VALUES (";
            
             for (int i = 1; i < columnNames.size(); i++) {
                
                 sql += hinzufügenWerteArray.get(i-1) + ", ";
             }
            
             sql += hinzufügenWerteArray.get((columnNames.size()-1)) + ")";
            
             stmt.executeQuery(sql);           
             stmt.close();
             c.close();         
            
          } catch ( Exception e ) {
             System.err.println( e.getClass().getName() + ": " + e.getMessage() );
             System.exit(0);
          }
          System.out.println("Updated database successfully");
       }
   
   

}
 
Weiß grade nich so genau was du damit meinst ^^

Also ich probiere es zur Zeit mit einer erstellten Tabelle "Person" mit den Spalten "ID" und "Name" aus. Die werden auch ordentlich übernommen und ich kann die Spalten auslesen. Wenn ich dann jedoch in der Konsole beide Werte eingeben will und z.B. für ID "1" und für "Name" test eingebe, erhalte ich die Meldung: "(...)(no such column: test)". Das Problem ist bloß, dass in der ArrayList columnNames dieses "test" gar nicht vor kommt.
 
Einfach mal vor dem stmt.executeQuery(sql); den sql-String ausgeben lassen (oder alternativ mit'm Debugger mal nachgucken)
 
Mal wieder ein guter Tipp, um Fehler zu finden... Ich habe beim Einfügen von einem Character vergessen, dass dieser ja in Anführungzeichen im SQL-Befehl stehen muss... Danke dir 🙂
 

Zurück
Oben