1

こんにちはStackoverflowers!

私はそのような単純なsqliteDBを作成しました。

//event table name
private static final String TABLE_EVENTS = "events";

//event table columns names
private static final String KEY_ID = "id";
private static final String KEY_EVENT = "event";

@Override
public void onCreate(SQLiteDatabase db) 
{
//String to define our database
String CREATE_EVENT_TABLE = "CREATE TABLE " + TABLE_EVENTS + "("
+ KEY_ID + " INTEGER PRIMARY KEY," + KEY_EVENT + " TEXT" + ")";

//create our database
db.execSQL(CREATE_EVENT_TABLE);
}

これは、id列とイベント列を持つテーブルであると理解しています。

イベント列に、FIFO(先入れ先出し)の順序でテーブルから取得したい文字列に変換されたJSONObjectを保存しているので、アプリケーションがクラッシュした場合に、次に保存したJSONObjectを送信できます。アプリが開きます。

以下を使用して問題なくテーブルに挿入できます。

public void addEvent(JSONObject event)
{
    //get our database so we can add to it
    SQLiteDatabase db = this.getWritableDatabase();

    //define content values to store our values
    ContentValues values = new ContentValues();

    //add our event to the ContentValues
    values.put(KEY_EVENT, event.toString());

    //insert a row
    db.insert(TABLE_EVENTS, null, values);

    //close the database connection
    db.close();
}

特定の行またはイベントのクエリとデータベースからのイベントの取得に問題があります。また、FIFOの順序でイベントを引き出すことができるように、イベントが挿入された順序を追跡するための優れた方法があります。

サンプルコードは、クエリを実行しようとすると構文エラーが発生し、SQLiteにあまり詳しくないため、特に役立ちます。

どんな助けでも大歓迎です!お時間をいただきありがとうございます。

4

3 に答える 3

7

こんにちはVinC最善のアプローチは、IDを自動インクリメントすることです。これは、主キーであるため、次の方法で実行できます。

String CREATE_EVENT_TABLE = "CREATE TABLE " + TABLE_EVENTS + "("
+ KEY_ID + " INTEGER PRIMARY KEY AUTOINCREMENT," + KEY_EVENT + " TEXT" + ")";

これで、orderbyIdを昇順でデータベースにクエリできます。

database.query("TABLE_EVENTS", new String[]{"KEY_EVENT"},null,null, null, null,"KEY_ID ASC");
于 2012-06-19T17:41:49.170 に答える
2

通常、挿入される最初の行はテーブルの一番上にあるため、クエリでFIFOを使用してテーブル全体をクエリする場合は、並べ替え順序を行IDの昇順に設定できます。つまり、最新の行が下と上で最も古い

getContentLoader().query(DATABASENAME,new String[] {ID,EVENT},null,null,ID+" COLLATE LOCALIZED ASC");

そうすれば、カーソルをステップスルーすると、リストが希望の順序で表示され、好きなように実行できます。

編集

あなたが得ているエラーに関しては、これを行う必要があります

if(cursor != null && cursor.moveToFirst()){
    do{
         String event = cursor.getString(0);
         //loops through all the elements in the cursor 
    }while(cursor.moveTONext());
}
cursor.close();

これにより、カーソルがnull(何もない)かどうかがチェックされ、カーソルが最初の要素に移動するため、強制終了が防止されます。

于 2012-06-19T17:38:37.227 に答える
2

挿入中にミリ秒単位でタイムスタンプを挿入する「last_updated」という別のフィールドを作成することもできます。カーソルを照会すると、このフィールドで並べ替えることができます。

于 2012-06-19T17:52:11.320 に答える