在Android上使用SQLite查询和使用游标

不知道我是唯一一个觉得这样的人吗?

我发现使用sqlite api在android中完全痛苦的屁股和漂亮的灵魂被摧毁。有人有任何技巧/帮助者让我的生活更轻松吗?

这是我正在谈论的一个例子。

//create code

db.execSQL("CREATE TABLE " + CUSTOMER_TABLE_NAME + " ("
                        + GENERIC_ID_KEY+ " INTEGER PRIMARY KEY NOT NULL, " 
                        + PHONE_KEY + " INTEGER NOT NULL, "
                        + CUSTOMER_NAME_KEY+ " TEXT NOT NULL, "
                        + EMAIL_KEY + " TEXT NOT NULL, "
                        + ADDRESS_KEY +" TEXT);");


//get code
    Cursor mCursor = mDb.query(true, CUSTOMER_TABLE_NAME, new String[] {GENERIC_ID_KEY,
                        ADDRESS_KEY, PHONE_KEY, EMAIL_KEY,CUSTOMER_NAME_KEY}, GENERIC_ID_KEY + "=" + customerDbId, null,
                                null, null, null, null);

        Customer customer = new Customer (customerDbId, (CharSequence)mCursor.getString(mCursor.getColumnIndexOrThrow(CUSTOMER_NAME_KEY)),
                            (CharSequence)mCursor.getString(mCursor.getColumnIndexOrThrow(PHONE_KEY)),
                            (CharSequence)mCursor.getString(mCursor.getColumnIndexOrThrow(EMAIL_KEY)),
                            (CharSequence)mCursor.getString(mCursor.getColumnIndexOrThrow(ADDRESS_KEY)));

这是从数据库查询创建简单客户对象的简单示例;我的一些代码比这更糟糕。以这种方式手工制作查询会导致在运行时之前找不到所有类型的错误。

任何提示非常惊喜!

确定以下提示后,我现在有这样的:

  db.execSQL("CREATE TABLE customer (_id INTEGER PRIMARY KEY NOT NULL, " 
                        + "phone_number INTEGER NOT NULL, "
                        + "name TEXT NOT NULL, "
                        + "email TEXT NOT NULL, "
                        + "address TEXT);");


    //get code
String q = "SELECT * FROM customer WHERE _id = " + customerDbId +";"
        Cursor mCursor = mDb.rawQuery(q, null);

        Customer customer = new Customer (mCursor);

在客户端,我访问这样的字段

mName = cursor.getString(2)

啊,我感觉好多了:)

干杯

>如果不需要,不要使用模型对象。我得出结论,除非有重要的业务逻辑只能通过模型​​对象来表示,他们比在移动平台中值得的更麻烦。
假设你被模型对象卡住,让它们自己从光标中加载,而不是尝试传递umpt参数。
如果你知道SQL,那么query()比rawQuery()更有限的增加值。
>通过连接组装您的CREATE TABLE子句是自我强加的痛苦,而不是由SQLite或Android强制执行。
>不要使用定制代码中的getColumnIndexOrThrow()。你写了这个查询,所以你知道这些列返回的顺序。如果你正在创建一些不知道它给出的Cursor的细节的抽象库,只能使用像getColumnIndexOrThrow()这样的东西。
> String继承自CharSequence,所以所有这些转换都可以被删除。
http://stackoverflow.com/questions/1122679/querying-and-working-with-cursors-in-sqlite-on-android

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:在Android上使用SQLite查询和使用游标