Использование execSQL для операции INSERT в Android SQLite

Отдокументация а такжеэта почта  я знаюexecSQL()  выполняет один оператор SQL, который не являетсяSELECT или любой другой оператор SQL, который возвращает данные. Также упоминается, чтоexecSQL() не должен использоваться для вставки.

Но я используюexecSQL() для вставки как:

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

Это работает идеально для меня (нетSELECT заявление с этимINSERT), но мне сказали не использовать этоВот.

Итак, мой вопрос:does the INSERT statement return a value even though there is no SELECT statement attached to it?

 Bhushan Shirsath29 февр. 2016 г., 14:38
попробуйте этот пример с кодомblazin.in/2016/02/understanding-sqlite-database-in-android.html
 Bhavin09 мая 2012 г., 17:34
Попробуйте добавить двойную кавычку (& quot; & # x996; & # x9AC; & # x9B0; & quot;)

Ответы на вопрос(3)

Решение Вопроса

Вы можете использовать его, просто это не рекомендуется, потому что вы не получите никакой информации, которая может быть сгенерирована БД. Методы, которые вы, как предполагается, должны использовать коды возврата / курсоры / другую информацию, чтобы сообщить вам, что произошло, чтобы вы могли справиться с ними в случае возникновения проблемы.

Ключ этой строки вexecSQL документы:

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

Важное слово "поощряется". Выcan использованиеexecSQL для любой команды SQL, но вы не получаете обратной связи о процессе, что делает довольно опасным использование чего-либо, где вы должны получить обратную связь (если вас не заботит не вставка, или обновление только 2 из 5 записей).

INSERT операторы не возвращают наборы результатов, по крайней мере, не в Sqlite.

Документы Android говорят об этомexecSQL:

Execute a single SQL statement that is NOT a SELECT or any other SQL statement that returns data. It has no means to return any data (such as the number of affected rows). Instead, you're encouraged to use insert(String, String, ContentValues), update(String, ContentValues, String, String[]), et al, when possible.

Я не программист на Android, но мне, конечно, не рекомендуется использоватьinsert функция вместоexecSQL, except если я хочу получитьrowid вставленной записи. Кроме того, цитируемое объяснение в лучшем случае сбивает с толку, поскольку подразумевает, что вставка может вернуть некоторые данные.

Обратите внимание, что возможно наличие некоторого побочного эффекта, которыйinsert лучший выбор, чемexecSQLили это "лучшие практики" диктовать вам использоватьinsert.

 Imran Rana09 мая 2012 г., 18:23
Я думаю, что оператор SELECT возвращает значение, которое используется оператором INSERT IMHO.
 09 мая 2012 г., 18:16
Нет; & quot; INSERT INTO .. SELECT ... & quot; является оператором INSERT так же, как & INSERT INTO ... VALUES ... & quot; является.
 09 мая 2012 г., 18:26
Вы спрашивали оINSERT оператор: & quot; оператор INSERT ... возвращает значение? & quot;
 Imran Rana09 мая 2012 г., 18:14
делает оператор INSERT, который содержит оператор SELECT, например:INSERT INTO suppliers (supplier_id, supplier_name) SELECT account_no, name FROM customers WHERE city = 'Newark'; возвращает значение?
 29 апр. 2013 г., 12:01
Нет. Инструкция INSERT не возвращает значение

Операция вставки может быть выполнена следующим образом

 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

Ваш ответ на вопрос