Create Befehl mit variierender Spaltenanzahl/Spaltenname

Fissko

Mitglied
Hallo, ich habe die folgende Klasse, mit der ich mit vorher aufgenommen Spaltennamen und Datentypen eine Tabelle mit SQl erstellen möchte.
Die Bedeutung der VAriablen ist:
relName = Name der Tabelle
spaltenAnzahl = Anzahl der Spalten der Tabelle
ArrayList<String> spaltenNamenArray = Eine Liste mit den Namen der Spalten
ArrayList<String> datentypNamenArray = Eine Liste mit den Datentypen der Spalten.

Leider wird bei mir jedes mal keine Tabelle erstellt. Ich erhalte auch keine Fehlermeldung. Das Programm bleibt einfach stehen.

Hier die Klasse "Erstellung", in welcher die Tabelle erstellt werden soll:

Java:
import java.sql.Connection;
import java.sql.DriverManager;
import java.util.ArrayList;
import java.sql.*;

public class Erstellung {
   
    public static void erstellung(String relName, int spaltenAnzahl, ArrayList<String> spaltenNamenArray, ArrayList<String> datentypNamenArray) {
          Connection c = null;
          Statement stmt = null;
                                     
          try {
             Class.forName("org.sqlite.JDBC");
             c = DriverManager.getConnection("jdbc:sqlite:test.db");
             System.out.println("Opened database successfully");

             stmt = c.createStatement();
                     
             String sql = "CREATE TABLE " + relName + "(";                            
            
             for(int i = 0; i < (spaltenAnzahl - 1) ; i++)    {
                sql += spaltenNamenArray.get(i) + " " + datentypNamenArray.get(i) + ", ";}
            
             sql += spaltenNamenArray.get(spaltenAnzahl-1) + " " + datentypNamenArray.get(spaltenAnzahl-1);
             sql += ")";
                                
                                
             stmt.executeUpdate(sql);
             stmt.close();
             c.close();
            
          } catch ( Exception e ) {
             System.err.println( e.getClass().getName() + ": " + e.getMessage() );
             System.exit(0);
          }
          System.out.println("Table created successfully");
       }

}

Die einzelnen Variablen kommen aus der Klasse "Verwaltung". Diese kann ich aber richtig sortiert auslesen:

Java:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;

public class Verwaltung {
   
    private static ArrayList<String> spaltenNamenArray= new ArrayList<>();   
    private static ArrayList<String> datentypNamenArray = new ArrayList<>();
    private static int spaltenAnzahl = 0;
    private String erstellName = "";
    private static String spaltenAnzahlString = "";
    private static String relName = "";

    public static void main(String[] args) throws IOException {
       
        //Auslesen.auslesen();
               
       // TabelleLöschen.Löschung();
       
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
       
        System.out.println("Willkommen bei der Mitarbeiterverwaltung.");
       
        System.out.println("Möchte Sie eine Tabelle  erstellen?");
        String input = in.readLine();
       
        if(input.equals("Ja") || input.equals("ja") || input.equals("JA"))    {
           
            System.out.println("Wie soll die Tabelle heißen?");
            relName = in.readLine();
           
            System.out.println("Wie viele Spalten so die Tabelle haben?");
            spaltenAnzahlString = in.readLine();
           
            spaltenAnzahl = Integer.parseInt(spaltenAnzahlString);
           
            for(int i = 1; i <= spaltenAnzahl; i++)    {
               
                System.out.println("Wie soll die " + i + ". heißen?");
                String spaltenName = in.readLine();
                spaltenNamenArray.add(spaltenName);
            }
           
            for(int i = 1; i<= spaltenAnzahl; i++)    {
               
                System.out.println("Was soll der Datentyp der " + i + ". Spalten mit dem Namen " + spaltenNamenArray.get((i-1)) + " sein ");
                String datentypName = in.readLine();
                datentypNamenArray.add(datentypName);
               
            }
           
                   
             /* Tests:
           
            for (int i = 0; i < spaltenNamenArray.size(); i++){
                System.out.println((i+1) + ". " + spaltenNamenArray.get(i));
            }
           
            for (int i = 0; i < datentypNamenArray.size(); i++){
                System.out.println((i+1) + ". " + datentypNamenArray.get(i));
            } */
               
        }
       
               
        else    {
           
            System.out.println("Soll das Programm beendet werden?");
           
            String beenden = in.readLine();
           
            if(beenden.equals("Ja") || beenden.equals("ja") || beenden.equals("JA"))    {
                               
                System.exit(0);
            }
           
            else {
               
                main(args);
            }
           
            Erstellung.erstellung(relName, spaltenAnzahl, spaltenNamenArray, datentypNamenArray);
        }
           
           
           
           
               
    //  TabelleLöschen.Löschung();
    //    Erstellung.erstellung();
    //    Hinzufügen.hinzufügen();
    //    Auslesen.auslesen();
    //    Aktualisieren.aktualisieren();
    //    Auslesen.auslesen();

    }

}

Weiß jemand, warum die Tabelle nicht erstellt wird?

Danke schonmal :)
 

Java xyrse123

Bekanntes Mitglied
Hallo,
ich verstehe nicht ganz was das Problem ist, bei mir sieht das ganze so aus:

Willkommen bei der Mitarbeiterverwaltung.
Möchte Sie eine Tabelle erstellen?
Ja
Wie soll die Tabelle heißen?
Test
Wie viele Spalten so die Tabelle haben?
4
Wie soll die 1. heißen?
...
Da wird doch eine Tabelle erstellt oder ?
 

Fissko

Mitglied
Es wird erstmal alles abgefragt und dann soll mit dem CREATE TABLE (...) Befehl eine Tabelle erstellt werden. Das Programm bleibt dort aber hängen und läuft nicht weiter bis "System.out.println("Table created successfully");" Das keine Tabelle erstellt wurde, erkenne ich auch daran, dass wenn ich die Tabelle auslesen möchte ich "There is no table ..." erhalte.
 

Wurstkopp

Bekanntes Mitglied
Hast du dir das fertige SQL mal angeschaut? Bitte poste das einfach mal. Ohne das jetzt genau zu prüfen könnte da bei den Kommas was nicht stimmen.
 

mrBrown

Super-Moderator
Mitarbeiter
Guck dir doch nochmal an, in welchem if bzw welchem else welche Anweisung steht - bei passender Einrückung sollte einem der Fehler direkt ins Auge springen ;)
 

Fissko

Mitglied
Ich danke euch. Das war wirklich ein absolut dummer Fehler. Jetzt funktioniert alles und ich kann Tabellen erstellen. Vielen Dank, dass du dich durch das Programm gelesen hast @mrBrown :D
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
berserkerdq2 How can I use a 4 bit adder and 4 bit identity to create a 4 bit multiplier that multiplies two 4 bit numbers? Allgemeine Java-Themen 45
V Scheinbar zufällig hin und wieder: Can't create an ImageOutputStream! Allgemeine Java-Themen 8
W JavaCC to create my only syntax Allgemeine Java-Themen 5
M Cannot create a generic array of T Allgemeine Java-Themen 5
J Post: #1could not create the java virtual machine etc Allgemeine Java-Themen 6
S could not create the java virtual machine Allgemeine Java-Themen 3
F ImageIO cant create InputStream Allgemeine Java-Themen 9
K Could not create the Java Virtual Machine Allgemeine Java-Themen 1
T Wie lookup-and-create-on-demand umsetzen? Allgemeine Java-Themen 6
M unable to create new native thread Allgemeine Java-Themen 6
D unable to create new native thread Allgemeine Java-Themen 1
N Validator für einen SQL-Befehl Allgemeine Java-Themen 22
J CMD Befehl in Java Consolenprogramm ausführen Allgemeine Java-Themen 6
T Konsolen-Befehl junk Allgemeine Java-Themen 2
Joker4632 Methoden Befehl an bereits extern geöffnete Programm-spezifische Konsole senden Allgemeine Java-Themen 1
F SQLite mit Java / Probleme beim INSERT Befehl Allgemeine Java-Themen 4
E String in Zahl umwandeln, ohne Befehl Integer.parseInt Allgemeine Java-Themen 3
D Klassenübergreifender Befehl geht nicht Allgemeine Java-Themen 10
T DLL Befehl Funktionsparameter Allgemeine Java-Themen 6
H FTP Befehl/Java Methode für Submit im z/Os (Host) Allgemeine Java-Themen 1
B Zeitmessen Befehl sende und empfagen Allgemeine Java-Themen 10
G Befehl funktioniert in Eclipse allerdings nicht in einer Jar-Datei Allgemeine Java-Themen 3
J java zurück befehl Allgemeine Java-Themen 18
iB0T "goto" Befehl aus Batch in Java und Variablen wert immer wieder neu setzen Allgemeine Java-Themen 4
M Befehl in Runtime ausführen der Eingabe benötigt Allgemeine Java-Themen 3
T Java Programm als Batch Befehl Allgemeine Java-Themen 6
K der Befehl "runas" Allgemeine Java-Themen 13
Jats Programm mit CMD Befehl hängt sich auf oder gibt error = 5 aus Allgemeine Java-Themen 4
B UNIX Shell befehl über JavaCode ausführen Allgemeine Java-Themen 19
D befehl auf mehrere objekte anwenden Allgemeine Java-Themen 7
S Shell-Befehl: mail Allgemeine Java-Themen 6
M String in Befehl umwandeln Allgemeine Java-Themen 10
S Überprüfen, ob ein Shell Befehl existiert! Allgemeine Java-Themen 4
G CMD befehl: BAT erstellen, reinschreiben und starten? Allgemeine Java-Themen 12
S Suche Pendant zu einem VB Befehl Allgemeine Java-Themen 2
P SQL Befehl Allgemeine Java-Themen 15
G Befehl an OS X cmd Allgemeine Java-Themen 7
L mit exec() befehl ausführen ( OS X / Linux) Allgemeine Java-Themen 8
T jar mit Befehl zur Vergrößerung des VM-Speichers Allgemeine Java-Themen 11
S mit welchem befehl kann ich mein programm autom. schließen Allgemeine Java-Themen 3
A Zusammenfassen von zwei Dateien (wie beim DOS-Befehl copy) Allgemeine Java-Themen 6
S String als Befehl interpretieren Allgemeine Java-Themen 2
S GetColor? anderer befehl Allgemeine Java-Themen 13
M Methode x mal ausführen auf Befehl Allgemeine Java-Themen 7
L linux befehl aus java programm starten Allgemeine Java-Themen 7
M Unter MacOS einen Befehl auf Konsole ausführen? Allgemeine Java-Themen 6
G JDK Version - exec Befehl Allgemeine Java-Themen 3
M Befehl unter Win98 ausführen? Allgemeine Java-Themen 3
M Befehl aus Anwendung starten Allgemeine Java-Themen 7
C shell befehl mit java ein- und auslesen Allgemeine Java-Themen 2
B befehl "java" wird nicht gefunden Allgemeine Java-Themen 4

Ähnliche Java Themen

Neue Themen


Oben