1

我尝试创建一个表,然后在其中添加一堆新列。它是由Javascript实现的(我认为使用的数据库是websql中的SQLite):

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 中是否允许使用问号,还是有其他问题?

[9 月 20 日更新]:我尝试了不同的语法,例如“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);
});

这次我得到了错误:

未捕获的错误:TYPE_MISMATCH_ERR:DOM 异常 17

4

1 回答 1

0

这是ALTER TABLE ... 添加列。此外,第二个参数必须是一个数组。

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)');
    });
}
于 2012-09-19T15:41:51.010 回答