2

文档这篇文章中 ,我知道execSQL() 执行单个 SQL 语句,该SELECT语句不是返回数据的 SQL 语句或任何其他 SQL 语句。还提到execSQL()不应该用于插入。

但我execSQL()用于插入如下:

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

这对我来说非常有效(没有SELECT关于 this的声明INSERT),但有人告诉我不要在这里使用它。

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

4

3 回答 3

4

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

关键是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 命令,但您不会收到有关该过程的反馈,这使得用于您应该获得反馈的事情变得相当危险(除非您不在乎插入失败,或者只有 5 条记录中的 2 条得到了更新)。

于 2012-05-09T15:42:56.350 回答
1

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

Android 文档这样说execSQL

执行不是 SELECT 的单个 SQL 语句或任何其他返回数据的 SQL 语句。它无法返回任何数据(例如受影响的行数)。相反,我们鼓励您尽可能使用 insert(String, String, ContentValues), update(String, ContentValues, String, String[]) 等。

我不是 Android 程序员,但我当然不会被鼓励使用该insert函数而不是execSQL除非我想检索rowid插入记录的 。此外,引用的解释充其量是令人困惑的,因为它暗示插入可能会返回一些数据。

请注意,可能有一些副作用会做出insert比 更好的选择execSQL,或者“最佳实践”要求您使用insert.

于 2012-05-09T15:43:08.547 回答
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.blatin.in/2016/02/understanding-sqlite-database-in-android.html

于 2016-02-29T13:37:37.860 回答