2013-05-11 30 views
2

很明显,我不明白Android中的ContentValues的概念。如何保证插入语句如database.insert(TABLE,null,contentValues);以正确的顺序获得contentValues的所有值,因为ContentValues是一个集合?Android ContentValues:插入时值是否有错误?

假设TABLE有3个字符串列。如果我写了下面......

contentValues.put("col1", valueCol1); 
contentValues.put("col2", valueCol2); 
contentValues.put("col3", valueCol3); 

...它不能保证database.insert插入顺序值,或者我才明白什么了吗?

使用database.insert而不是db.execSQL有什么好处(除了在Android中更好的视图处理)?

回答

2

因为ContentValues是一个集合吗?

ContentValues更类似于Map。这是键值存储,由字符串键入。

它不能保证database.insert以这个顺序插入值,或者我理解错误吗?

INSERT将同时插入这些值,方式INSERT语句在任何兼容SQL的数据库,在过去几十年的工作。

要使用你的例子,如果我们insert()ContentValues到一个名为foo表,其结果将是等效于以下内容:

db.execSQL("INSERT INTO foo (col3, col1, col2) VALUES (?, ?, ?)", args); 

其中argsString[]valueCol3valueCol1valueCol2

什么是使用database.insert代替db.execSQL所有

好处它涉及到一个有点少打字,你不必你的价值观转化为String阵列。

(在Android中更好的视图处理除外)?

恕我直言,insert()SQLiteDatabase不提供“更好的查看处理”比不上SQLiteDatabaseexecSQL(),虽然也许你在想的,我失去了一些东西。

+0

好的抱歉,这是一个愚蠢的问题。稍微休息一下后,我很清楚。 Map本身的键是列,所以框架知道在哪里插入值。 – Bevor 2013-05-11 17:26:03

+0

@Bevor:正确。尽管如此,这确实限制了你简单的CRUD风格的INSERT语句。如果你想做一个'INSERT INTO ... SELECT FROM ...'语句,你必须通过'execSQL()'来完成。而且,当然,如果您愿意,欢迎您通过'execSQL()'完成所有插入操作。 – CommonsWare 2013-05-11 17:29:30