【问题标题】:Using execSQL for INSERT operation in Android SQLite在 Android SQLite 中使用 execSQL 进行 INSERT 操作
【发布时间】:2012-05-09 15:30:08
【问题描述】:

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

但我使用execSQL() 插入类似:

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

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

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

【问题讨论】:

标签: android database sqlite


【解决方案1】:

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

关键是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 条被更新)。

【讨论】:

    【解决方案2】:

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

    Android 文档中提到了 execSQL

    执行不是 SELECT 或任何其他 SQL 的单个 SQL 语句 返回数据的语句。它无法返回任何数据(例如 作为受影响的行数)。相反,您鼓励使用 插入(字符串,字符串,内容值),更新(字符串,内容值, String、String[]) 等,如果可能的话。

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

    请注意,可能会有一些副作用使insertexecSQL 更好,或者“最佳实践”要求您使用insert

    【讨论】:

    • 是否包含如下 SELECT 语句的 INSERT 语句:INSERT INTO suppliers (supplier_id, supplier_name) SELECT account_no, name FROM customers WHERE city = 'Newark'; 返回值?
    • 否; “INSERT INTO .. SELECT ...”是一个 INSERT 语句,就像“INSERT INTO ... VALUES ...”一样。
    • 我认为 SELECT 语句返回的值被 INSERT 语句恕我直言使用。
    • 您询问了INSERT 语句:“INSERT 语句...返回值吗?”
    • 没有。 INSERT 语句不返回值
    【解决方案3】:

    插入操作可以通过以下方式进行

     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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-07
      • 1970-01-01
      • 2013-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多