2016-06-17 9 views
0
String sql2 = "create table ? (id int not null auto_increment, fullname 
    varchar(30) not null, primary key (id))"; 

    PreparedStatement stmt2 = conn.prepareStatement(sql2); 

    stmt2.setString(1, username); 

    stmt2.execute(); 

    stmt2.close(); 

von oben Anweisungen zu erstellen, ich erhielt Fehlermeldung ('John' als Tabellenname):Wie JDBC Platzhalter in PreparedStatement verwenden MySQL-Tabelle

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: 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 ''john' (id int not null 
auto_increment, fullname varchar(30) not null, primary ' at line 1 

Eclipse sagt der Fehler in dieser Zeile ist:

stmt2.execute(); 

bitte helfen Jungs ... tq

+0

Andere verwandte: http://stackoverflow.com/questions/25176860/how-to-pass-parameter-in-jdbc-query-for -creating-table –

Antwort

1

Sie können keine Parameter für den Tabellennamen in einer CREATE TABLE-Anweisung verwenden.

Statt einfach die SQL-Zeichenfolge mit der Variable bauen:

String sql2 = "create table " + username + " (id int not null auto_increment, fullname 
varchar(30) not null, primary key (id))"; 

Statement stmt2 = conn.createStatement(); 
stmt2.executeUpdate(sql2); 
+0

aber die meisten Leute sagen, dass so ein Weg zur sql-Injektion führen kann und besser vermieden werden ..? – Shahril

+1

@Shahril Ja, wenn Sie diese Anweisung ausführen, ohne die Eingabe zu bereinigen, sind Sie in Schwierigkeiten. Aber trotzdem können Sie nur Parameter verwenden, um Werte zu übergeben, aber keine Namen von Tabellen, Spalten usw. – wero

+0

vielen Dank ... :) Ich bin ein Neuling, also verstehe ich nicht wirklich, als Sie sagten, die Eingabe zu bereinigen. wirklich zu schätzen, wenn du mich ausarbeiten oder wenigstens in die richtige Richtung weisen kannst .. danke nochmal .. :) – Shahril

Verwandte Themen