MySql syntax error beim erstellen eines Tabel


tom23

Mitglied
Guten Tag
Ich schreibe gerade an einem Java Programm zum erstellen von Listen und muss dazu individuel bennante Tabel erstellen dabei erhalte ich allerdings immer Folgende Exception : java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''test'

Hier mein Code:
Java:
String CT1 = ("CREATE TABLE IF NOT EXISTS ´namensliste´.? (? id int NOT NULL AUTO_INCREMENT, name varchar(255), PRIMARY KEY(id))");
        try {
            Connection con = getconnection();
            PreparedStatement create = con.prepareStatement(CT1);
            create.setString(1,ln);//eingegebner Listen Name´
            create.setString(2, ln);
            create.executeUpdate();
        }
Für Hilfe wäre ich sehr Dankbar
 

Yaslaw

n/a
Moderator
An sich schon ein falsches Datenmodel. Soweas sollte alles in eine Tabelle mit einem Feld, in dem der "Listenname" steht.

zudem hast du ein Feld mit dem Namen "name". Mach das nicht. Name ist in fast allen Sprachen ein Attribut oder sogar eine Funktion.

Was ist das zweite ? vor der ID? Warum ist das da?

Zudem glaube ich mich zu erinnern, dass du mit ? keine Namen sondern nur Werte übergeben kannst. Ein Tabellenname muss glaub auscodiert sein. Can I parameterize the table name in a prepared statement?
 

Fragenfrager

Erfahrenes Mitglied
Zudem was Yaslaw schon schrieb:
Ich gehe davon aus, dass die ID eineindeutig sein soll (da primary key).
Der von Dir gewählte Variablentyp INT (integer) ist daher ungünstig, da er von -2.147.483.648 bis 2.147.483.647 geht. Ich habe in den letzten 15 Jahren noch keine Datenbank gesehen, die mit negativen IDs arbeitet, also verschenkst Du die Hälfte des möglichen Bereiches. Nutze statt dessen INT UNSIGNED, dann kommst Du bis 4.294.967.295. Das sollte i.d.R reichen.
Sollte das zu viel sein, nutze MEDIUMINT UNSIGNED (max.16.777.215) oder sogar nur SMALLINT UNSIGNED (max. 65.535).
Warum? Es macht Deine DB schmaler und schneller.
Nachtrag: Speicherbedarf der einzelnen Typen:
SMALLINT: 2 Byte
MEDIUMINT: 3 Byte
INTEGER: 4 Byte
 

tom23

Mitglied
Danke für die Infos.
ist dieser Tabel hier:
SQL:
CREATE TABLE `liste` (
  `idListe` char(100) NOT NULL,
  PRIMARY KEY (`idListe`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
auch mist weil wenn ja muss ich mit denn Datenbanken nochmal ganz von vorne anfange.
Hättet ihr in diesem Fall einen Tipp wo ich Anfänger geignete Informationen finde?
 

tom23

Mitglied
Danke Für die Hilfe
Ich nutzen nun Folgendes Statment Code :
Java:
String CT1 = ("CREATE TABLE IF NOT EXISTS "+ln+"(\r\n" + // aus MySql work bench rauskopierter Befehl "+ln+" ist eine Java String addition die keine Fehlermeldungen Verursacht stand : 13.1.2020
                "  `idListe` char(100) NOT NULL,\r\n" +
                "  PRIMARY KEY (`idListe`)\r\n" +
                ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci");
Dadurch werden keine Exceptions mehr ausgelöst.