我试图通过Java创建一个变量表名。
我的代码是:
public void createTable(String tableName){
try {
Statement stmt = con.createStatement();
stmt.executeUpdate("CREATE TABLE '"+tableName+"'" +
"(id INTEGER not NULL, " +
" username VARCHAR(255), " +
" pass VARCHAR(255), " +
" age INTEGER, " +
" PRIMARY KEY ( id ))");
}
catch (SQLException e){
e.printStackTrace();
}
}
它给我一个语法错误说:
'VariableTableNameIChose'附近的语法不正确。
有没有人有任何想法?
答案 0 :(得分:1)
它可能是两件事之一,也可能是两者的结合。
表名周围的单引号可能在您的数据库中无效。所以这样做:
stmt.executeUpdate("CREATE TABLE "+tableName+" " +
"(id INTEGER not NULL, " +
" username VARCHAR(255), " +
" pass VARCHAR(255), " +
" age INTEGER, " +
" PRIMARY KEY ( id ))");
或者您可能需要在表名和(
后面的空格:
Statement stmt = con.createStatement();
// v this one was missing
stmt.executeUpdate("CREATE TABLE '"+tableName+"' " +
"(id INTEGER not NULL, " +
" username VARCHAR(255), " +
" pass VARCHAR(255), " +
" age INTEGER, " +
" PRIMARY KEY ( id ))");
答案 1 :(得分:1)
表名是标识符。标识符不使用单引号(在标准SQL中)。
"CREATE TABLE '"+tableName+"' "
将导致
CREATE TABLE 'foobar'
这是无效的SQL。您需要删除单引号:
"CREATE TABLE "+tableName+" " + ...
由于表名显然是用户输入,您实际上可能想要使用带引号的标识符(尽管这通常是一个坏主意)。使用SQL标准中的双引号引用标识符:
"CREATE TABLE \""+tableName+"\" " + ...