通过Java在SQL中创建变量表名?

时间:2014-12-07 13:26:06

标签: java sql

我试图通过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'附近的语法不正确。

有没有人有任何想法?

2 个答案:

答案 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+"\" " + ...