【发布时间】:2009-12-31 04:12:04
【问题描述】:
我有以下 JSON 结构,它定义了一个表及其数据。
变量 arrTable = [{“表”:“tblConfig”, “定义”: [{“列”:“属性”,“类型”:“文本不为空”}, {“列”:“值”,“类型”:“文本不为空”}], “数据”: [{“属性”:“版本号”,“值”:“1.0”}, {“属性”:“发布日期”,“价值”:“2010-01-01”}] }]代码描述了一个名为“tblConfig”的表,它有两列,“Property”和“Value”都是“TEXT NOT NULL”类型。该表有两行数据。
属性_______价值____ 版本号 1.0 发布日期 2010-01-01
下面是我创建和填充表格的 Javascript 代码。它可以很好地构建创建表 SQL,但我在填充函数时遇到了问题。
dbController.updateDatabase = function () {
this.db.transaction(函数(事务){
//加载数据.json
var dbDefs = dbController.jsonObject(url + "data.json")
//解析数组“表”
评估(dbDefs);
for(arrTables 中的变量 i){
createTable(arrTables[i].table, arrTables[i].def, arrTables[i].data);
}
//创建表
函数创建表(表,arrDef,arrData){
var arrColumns = [];
var strSQL = "创建表 " + 表 + " (";
for (arrDef 中的变量 j) {
arrColumns.push(arrDef[j].column);
strSQL += arrDef[j].column + " " + arrDef[j].type + ", ";
}
strSQL = strSQL.substring(0, strSQL.lastIndexOf(",")) + ")";
transaction.executeSql(strSQL, [],
功能 () {
console.log(table + "created.");
填充表(表,arrData);
返回;
},
dbController.errorHandler
);
}
//填充表
函数填充表(表,arrData){
...
}
});
};
我希望能够从“数据”对象中获取列名(“属性”和“值”)并在插入 SQL 字符串中使用它们。我认为这样的事情会奏效。
//填充表格
函数填充表(表,arrColumns,arrData){
变量 strVal;
变量 arrVal;
for (arrData 中的变量 k) {
strVal = "?,";
arrVal.push(arrData[k]. ~~ 键值名称 ~~ )
}
var strSQL =“插入”+表+“(”+strCol+“)”;
strSQL += "值 (" + strVal.lastIndexOf(",") + ");";
transaction.executeSql(strSQL, arrVal, null, dbController.errorHandler);
console.log(" " + table + "填充。");
}
问题在于 粗体 语句。我尝试在 arrData 上使用 .hasOwnProperty() ,但它只返回 0 和 1,而不是“属性”和“值”这两个词。我不想使用“arrData[k].Property”表示法,因为架构中有更多的表,我不想为每个表编写创建和插入语句。
非常感谢任何帮助。
由于我的深夜帖子,感谢大家的帮助和令人头疼的问题。我使用这个函数的目的是拥有一个定义多个表并保存表数据的 JSON 对象。由于没有一个表具有相同数量的列或列名,因此我必须设计一种方法,在不使用
object.member 语法的情况下从“数据”中获取数据。我忘记了 object["member"] 语法。这是解决方案。
dbController.updateDatabase = function (a) {
this.db.transaction(函数(事务){
//加载数据.json
var dbDefs = dbController.jsonObject(dbController.dbFolder + "data.json")
//解析数组“表”
评估(dbDefs);
for(arrTables 中的变量 i){
createTable(arrTables[i].table, arrTables[i].def, arrTables[i].data);
}
//创建表
函数创建表(表,arrDef,arrData){
var arrColumns = [];
var strSQL = "创建表" + 表 + " (";
for(arrDef 中的变量 j){
arrColumns.push(arrDef[j].column);
strSQL += arrDef[j].column + " " + arrDef[j].type + ", ";
}
strSQL = strSQL.substring(0, strSQL.lastIndexOf(",")) + ")";
transaction.executeSql(strSQL, [],
功能() {
console.log(table + "created.");
填充表(表,arrColumns,arrData);
返回;
},
dbController.errorHandler
);
}
//填充表格
函数填充表(表,arrColumns,arrData){
for (arrData 中的变量 k) {
var arrVal = [];
var strVal = "";
for (var l = 0; l
【问题讨论】:
-
您的
transaction.executeSQL是否需要一个平面数组(只有 1 条记录)或一个数组数组,每个数组代表一条记录?
标签: javascript database json html