0

由于我的应用程序数据库,我开始发疯。在本主题中,我解释了它的第一个问题。现在我有另一个问题:当我存储从 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
.  ...     ...     ...     ...

如果我插入 in 的值,columnA反之亦然columnB,我会得到:

id columnA columnB columnC columnD
1  mymy    NaN     NaN     NaN
2  ohoh    NaN     20      NaN
.  ...     ...     ...     ...

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

4

2 回答 2

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以满足您的本地存储需求。

于 2013-10-28T16:00:10.967 回答
1

似乎这些列被标记为整数值,因此它正在尝试解析数字字符串,并且由于它们不是(C列的第二个值中的 20 除外),它给你 Not a Number (NaN) . 确保架构说的是字符串值而不是整数。

于 2013-10-28T14:58:03.243 回答