1

你好Stackoverflowers!

我像这样创建了一个简单的 sqlite 数据库。

//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 列和 event 列的表。

在事件列中,我存储了一个转换为字符串的 JSONObject,我想以 FIFO(先进先出)的顺序从表中检索该字符串,这样如果我的应用程序崩溃,我可以在下次发送我存储的 JSONObjects应用程序已打开。

我可以使用以下方法毫无问题地插入表格:

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" + ")";

现在您可以使用 orderby Id 以升序查询数据库

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();

这可以防止强制关闭,因为它检查光标是否为空(其中没有任何内容)并且光标移动到第一个元素

于 2012-06-19T17:38:37.227 回答
2

您还可以有另一个名为“last_updated”的字段,它在插入期间以毫秒为单位插入时间戳。当您查询游标时,您可以按此字段排序。

于 2012-06-19T17:52:11.320 回答