如何转换ContentValues对象以在execSQL()调用中使用?

时间:2012-07-14 17:58:26

标签: android sqlite

我希望能够获取ContentValues对象并在sqlite语句中使用它。

ContentValues cv;
cv.put( "id", 1 );
cv.put( "name", "Bob" );
cv.put( "isCEO", true );

通常情况下,我会对请求进行硬编码:

db.execSQL( "Insert or replace into Employee (id, name, isCEO) values (1, 'Bob', true)" );

将cv转换为字符串“(id,name,isCEO)值(1,'Bob',true)”的最佳方法是什么?另外,在这种情况下,有没有办法恢复sqlite操作的成功/失败状态?

2 个答案:

答案 0 :(得分:1)

使用SQLiteDatabase的'replace'方法。 e.g。

ContentValues cv;
cv.put( "id", 1 );
cv.put( "name", "Bob" );
cv.put( "isCEO", true );
db.replace(TABLE_NAME, null, cv);

要使其正常工作,'id'列必须是表格中的PRIMARY键列。

'replace'方法的响应是一个很长的值:

the row ID of the newly inserted row, or -1 if an error occurred 

答案 1 :(得分:0)

不要将ContentValues转换为字符串,而是让框架为您完成。

db.insertWitOnConflict(“Employee”,null,cv,CONFLICT_REPLACE);

有关更多详细信息,请参阅此处:

http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html#insertWithOnConflict(java.lang.String,java.lang.String,android.content.ContentValues,int)