2012-09-19 65 views
1

我試着創建一個表格,然後在其中添加一堆新的列。它是通過Javascript實現的(使用的數據庫是我認爲的websql中的SQLite):我可以在ALTER查詢中使用問號嗎?

var FFFNames = ["DEFAULTY", "LAGACY", "MATADATA"]; 

db.transaction(function (tx){ 
    tx.executeSql('CREATE TABLE IF NOT EXISTS ProjSetsT (ProjId unique)'); 
}); 

for (var i = 0; i < FFFNames.length; i++){ 
    db.transaction(function (tx){ 
     tx.executeSql('ALTER TABLE ProjSetsT ADD ? TINYINT(1)', FFFNames[i]); 
    }); 
} 

那麼它沒有工作。表已創建,但未添加列。 ALTER中允許使用問號還是還有其他問題?

[Updated on 20th Sep]:我嘗試了不同的語法,比如「ALTER TABLE tablename ADD COLUMN?datatype」,但它仍然不起作用。

我也試過這樣的代碼:

db.transaction(function (tx){ 
    tx.executeSql('ALTER TABLE ProjSetsT ADD COLUMN ? TINYINT(1)', "TEST"); 
}); 

沒有警告,但只是不工作。

我也試過:

var AAA = "TEST"; 
db.transaction(function (tx){ 
    tx.executeSql('ALTER TABLE ProjSetsT ADD COLUMN ? TINYINT(1)', AAA); 
}); 

這一次我得到了錯誤:

Uncaught Error: TYPE_MISMATCH_ERR: DOM Exception 17

回答

0

這是ALTER TABLE ... ADD COLUMN。另外,第二個參數必須是一個數組。

for (var i = 0; i < FFFNames.length; i++){ 
    db.transaction(function (tx){ 
     tx.executeSql('ALTER TABLE ProjSetsT ADD COLUMN ? TINYINT(1)', [FFFNames[i]]); 
    }); 
} 

(更新):顯然,上述查詢將不起作用因爲每個列名的將被視爲'text',由此產生一誤差。這是你可以做的查詢工作:

for (var i = 0; i < FFFNames.length; i++){ 
    db.transaction(function (tx){ 
     tx.executeSql('ALTER TABLE ProjSetsT ADD COLUMN '+FFFNames[i]+' TINYINT(1)'); 
    }); 
} 
+0

我會給一個去看看。但通過書看來,我們應該使用ADD(不列)和DROP COLUMN。嘿...也許它是依賴於產品的。 –

+0

請在上面查看我的更新。看起來這不是根本原因。 –

+0

我現在看到錯誤 - 很抱歉,我第一次沒有注意到其他錯誤。即使只有一個參數,第二個參數也必須是一個數組。所以確保你用方括號括住第二個參數。 – rationalboss

相關問題