2012-02-06 80 views
0

我似乎遇到了一个简单的数据库插入语句的困难。 我将一些东西插入到数据库中,然后(出于调试原因)检查行数。对于第一个例子,这不起作用。对于第二个“rawQuery”它有。我可以忽略简单的事情吗?我已经使用过这种方法,而且没有问题!简单的插入语句不起作用。 SqLite

这不起作用:

contentValues = new ContentValues(); 
contentValues.put("classId", cursor.getString(0)); 
contentValues.put("to_do", toDo); 
contentValues.put("date", date); 
out("SIZE OF TODO+"+fetchCount());//returns 105 
db.insert("toDo", null, contentValues); 
out("NEW SIZE OF TODO+"+fetchCount());//still returns 105! 

这样做:

out("SIZE OF TODO+"+fetchCount()); //returns 105 
db.execSQL("insert into toDo values(null, "+cursor.getString(0)+", '"+toDo+"', '"+date+"')"); 
out("NEW SIZE OF TODO+"+fetchCount());//returns 106 

什么错?

+0

第一种方法的日志是什么? – waqaslam 2012-02-06 20:30:37

+0

我在Eclipse中看不到任何相关日志,无论是哪一种方法栏,我自己生成的是读取'02-06 20:32:56.996:错误/ DDD(15179):TODO的大小= 106 02-06 20 :32:59.090:错误/ DDD(15179):TODO的新大小= 106 ' – jason 2012-02-06 20:39:34

+0

您需要添加并使用LogCat视图选项卡,如下所示:窗口|显示视图|其他... | logcat的。这应该包括记录插入的确切内容。 – 2012-02-06 20:46:01

回答

0

我是这样一个白痴,@罗布的建议看着我的创建表让我意识到,我指的是错误的列名。我从来没有想到,像这样的更新声明可能会默默地失败!谢谢@Rob

1

猜测:第3行和第4行不是将字符串插入到ContentValues集合中,而是将原始对象插入到ContentValues集合中。之后,某些类型转换失败。在你的参数上调用toString()。

在第二个摘录中,您隐式强制转换为字符串。

+0

那么,我正在定义'String date =“”;'和'for(String toDo:toDoArray)'所以当然我不必将它们改写为字符串? – jason 2012-02-06 20:57:17

+0

在SqLite中是'date'保留字吗?这是否可能导致问题? – jason 2012-02-06 21:02:52

+0

在这种情况下,不,很正确。你可以发布你的创建SQL吗?例如CREATE TABLE ... 如果日期是保留的,那么通过权限创建也应该失败,因此您的第二个摘录也会失败。 – 2012-02-06 21:03:57