2014-12-07 67 views
2

我想通過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

回答

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

非常感謝!這工作! (第一種解決方案) – Jbv2 2014-12-07 14:38:59

1

表名是一個標識符。標識符不使用單引號(在標準SQL中)。

"CREATE TABLE '"+tableName+"' " 

會導致

CREATE TABLE 'foobar' 

這是無效的SQL。您需要刪除單引號:

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

表名顯然是用戶輸入,你可能真的要使用帶引號的標識符(雖然這是一般一個壞主意)。標識符使用雙引號在SQL標準中引用:

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

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