Worklight Cordova存储NaN值

时间:2013-10-28 10:26:41

标签: cordova ibm-mobilefirst nan web-sql

由于我的应用程序数据库,我开始变得疯狂。在这topic中,我解释了它的第一个问题。现在我有另一个问题:当我存储从localhost db检索的数据时,在几列字符串类型(varchartext)中,我得到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
.  ...     ...     ...     ...

结构的表格可以在我在这篇文章的顶部提到的主题中看到。

2 个答案:

答案 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)。确保模式显示字符串值而不是整数。