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

问题描述:

我想通过Java创建一个变量表名。通过Java在SQL中创建变量表名称?

我的代码是:

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

'表名+ “'”“ - 空间在这里失踪。 – Maroun 2014-12-07 13:27:36

它可能是两件事之一或两者的组合。

也许表名周围的单引号在数据库中无效。所以这样做:

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

非常感谢!这工作! (第一种解决方案) – Jbv2 2014-12-07 14:38:59

表名是一个标识符。标识符不使用单引号(在标准SQL中)。

"CREATE TABLE '"+tableName+"' " 

会导致

CREATE TABLE 'foobar' 

这是无效的SQL。您需要删除单引号:

"CREATE TABLE "+tableName+" " + ... 

表名显然是用户输入,你可能真的要使用带引号的标识符(虽然这是一般一个坏主意)。标识符使用双引号在SQL标准中引用:

"CREATE TABLE \""+tableName+"\" " + ... 
+0

非常感谢!这也工作 – Jbv2 2014-12-07 14:40:08