在Android SQLite中使用execSQL进行INSERT操作

时间:2012-05-09 15:30:08

标签: android database sqlite

the documentationthis post我知道execSQL()执行一个不是SELECT的SQL语句或任何其他返回数据的SQL语句。还提到execSQL()不应该用于插入。

但我正在使用execSQL()进行插入,如:

db.execSQL("INSERT INTO LIST VALUES('খবর');"); //where LIST is a table

这对我来说非常合适(此SELECT没有INSERT声明),但我被告知不要使用此here

所以,我的问题是: INSERT语句是否会返回一个值,即使没有附加SELECT语句?

3 个答案:

答案 0 :(得分:4)

您可以使用它,因为您不会收到任何可能由DB生成的信息,所以不推荐使用它。您应该使用返回代码/光标/其他信息的方法让您知道发生了什么,以便在出现问题时可以处理它们。

关键是execSQL文档中的这一行:

It has no means to return any data (such as the number of affected rows). Instead, you're encouraged to use insert...

重要的一句是鼓励"。你可以使用execSQL来获取任何SQL命令,但是你没有得到关于这个过程的反馈,这使得你应该获得反馈的东西相当危险(除非你不要这样做)。 t care比插入失败,或者5个记录中只有2个得到更新)。

答案 1 :(得分:0)

INSERT语句不返回结果集,至少不在Sqlite中。

Android文档说明execSQL

  

执行一个非SELECT或任何其他SQL的SQL语句   返回数据的语句。它无法返回任何数据(例如   作为受影响的行数)。相反,您鼓励使用   insert(String,String,ContentValues),update(String,ContentValues,   String,String [])等,如果可能的话。

我不是Android程序员,但我肯定不会鼓励使用insert函数而不是execSQL除了,如果我想要检索{{ 3}}插入的记录。此外,引用的解释充其量是混乱的,因为它意味着插入可以返回一些数据。

请注意,有些副作用可能会使insert成为比execSQL更好的选择,或者“最佳做法”要求您使用insert

答案 2 :(得分:0)

插入操作可以按照以下方式完成

 SQLiteDatabase db = this.getWritableDatabase();

    ContentValues values = new ContentValues();
    values.put(KEY_NAME, contact.getName()); // Contact Name
    values.put(KEY_PH_NO, contact.getPhoneNumber()); // Contact Phone

    // Inserting Row
    db.insert(TABLE_CONTACTS, null, values);
    //2nd argument is String containing nullColumnHack
    db.close(); // Closing database connection

有关更多信息,请参阅链接和代码 http://www.blazin.in/2016/02/understanding-sqlite-database-in-android.html