2

ドキュメントこの投稿から、データを返す他のSQLステートメントexecSQL() ではない単一のSQLステートメントを実行する ことがわかりました。挿入には使用しないことSELECTも記載されています。execSQL()

しかし、私はexecSQL()次のように挿入するために使用しています:

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

これは私にとっては完全に機能しています(これSELECTに関する記述はありません)が、ここでINSERTはこれを使用しないように言われました。

だから、私の質問は、ステートメントが添付されていなくてもINSERTステートメントは値を返すのでしょうか?SELECT

4

3 に答える 3

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...

そこにある重要な言葉は「励まされた」です。任意のSQLコマンドに使用できますexecSQLが、プロセスに関するフィードバックが得られないため、フィードバックを受け取る必要がある場所に使用するのはかなり危険です(挿入が失敗したか、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代わりに関数を使用することはお勧めできません。さらに、引用された説明は、挿入によって一部のデータが返される可能性があることを意味するため、せいぜい混乱を招きます。execSQLrowid

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.blazin.in/2016/02/understanding-sqlite-database-in-android.htmlのリンクを参照してください。

于 2016-02-29T13:37:37.860 に答える