由于我的应用程序数据库,我开始变得疯狂。在这topic中,我解释了它的第一个问题。现在我有另一个问题:当我存储从localhost db检索的数据时,在几列字符串类型(varchar
或text
)中,我得到NaN
值。我试图反转插入(例如我在columnA
中插入了columnB
的值,反之亦然),似乎这可能是表结构的问题。我还注意到具有NaN值的列是连续的。这里有一个例子:
INSERT INTO table(columnA,columnB,columnC,columnD)
VALUES('blabla','mymy','20,21','sometext');
INSERT INTO table(columnA,columnB,columnC,columnD)
VALUES('word','ohoh','20','sometextother');
id columnA columnB columnC columnD
1 blabla NaN NaN NaN
2 word NaN 20 NaN
. ... ... ... ...
如果我在columnA
中插入columnB
的值,反之亦然,我得到这个:
id columnA columnB columnC columnD
1 mymy NaN NaN NaN
2 ohoh NaN 20 NaN
. ... ... ... ...
结构的表格可以在我在这篇文章的顶部提到的主题中看到。
答案 0 :(得分:2)
错误在您的插入语句中:
for(var i=0;i<item.invocationResult.resultSet.length;i++){
WL.Logger.debug(i+")Sto inserendo " + item.invocationResult.resultSet[i].titolo + "," + item.invocationResult.resultSet[i].autore + "," + item.invocationResult.resultSet[i].id_categoria);
tx.executeSql("INSERT INTO canti(titolo,autore,id_categoria,testo) " +
"VALUES('"+item.invocationResult.resultSet[i].titolo+"','" +
+item.invocationResult.resultSet[i].autore+"','" +
+item.invocationResult.resultSet[i].id_categoria+"','" +
+item.invocationResult.resultSet[i].testo+"')");
}
请注意以下几行:
+item.invocationResult.resultSet[i].titolo+"','" +
+item.invocationResult.resultSet[i].autore+"','" +
+item.invocationResult.resultSet[i].id_categoria+"','" +
+item.invocationResult.resultSet[i].testo+
您在每行的开头和前一行的末尾添加了一个“+”。第一个'+'将用作字符串连接,但第二个'+'将被javascript解释为'转换为整数'。
例如,如果您在javascript调试器中键入以下内容:
+"54"
结果将是'54',因为这是说“将字符串'54'转换为整数”
但是如果你输入:
+"hello"
结果将是NaN,因为“hello”不能转换为整数。
所以解决方案就是改用它:
for(var i=0;i<item.invocationResult.resultSet.length;i++){
WL.Logger.debug(i+")Sto inserendo " + item.invocationResult.resultSet[i].titolo + "," + item.invocationResult.resultSet[i].autore + "," + item.invocationResult.resultSet[i].id_categoria);
tx.executeSql("INSERT INTO canti(titolo,autore,id_categoria,testo) " +
"VALUES('"item.invocationResult.resultSet[i].titolo+"','" +
item.invocationResult.resultSet[i].autore+"','" +
item.invocationResult.resultSet[i].id_categoria+"','" +
item.invocationResult.resultSet[i].testo+"')");
}
未经测试,但您明白了。
此外,由于您在此问题上标记了Worklight,因此我强烈建议您根据本地存储需求调查JSONStore。
答案 1 :(得分:1)
似乎这些列被标记为整数值,因此它试图解析数字的字符串,并且因为它们不是(除了C列的第二个值中的20),它给出的不是数字(NAN)。确保模式显示字符串值而不是整数。