当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《在Android上的SQLite中查询和使用游标》经验,为你挑选了1个好方法。

不确定我是否是唯一感受到这一点的人......

我发现在android中使用sqlite api完全痛苦的屁股和漂亮的灵魂摧毁.有没有人有任何提示/助手让我的生活更轻松?

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

//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查询创建简单客户对象的简单例子; 我的一些代码比这更糟糕.以这种方式手工制作查询会导致我在运行时之前找不到的各种错误.

任何提示都很有用!

好了以下提示我现在有了这个:

  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)

啊,我感觉好多了:)

干杯四



1> CommonsWare..:

    如果不需要,请不要使用模型对象.我得出结论,除非有重要的业务逻辑只能通过模型​​对象表示,否则它们比移动平台中的价值更麻烦.

    假设你遇到模型对象,让它们自己加载Cursor,而不是试图传递无数的参数.

    query()rawQuery()如果你知道SQL,那么比有限的附加值要冗长得多.

    CREATE TABLE通过连接来组装你的子句是自我强加的痛苦,不是SQLite或Android强制要求的.

    不要使用getColumnIndexOrThrow()自定义编写的代码.您编写了查询,因此您知道列将返回的顺序.仅使用类似于getColumnIndexOrThrow()创建一些不知道给定Cursor细节的抽象库的内容.

    String继承自CharSequence,所以所有这些演员都可以被删除.


几个星期前你在我为自己想出这一切之前在哪里?很高兴能够确认我已经怀疑过的内容,但遗憾的是所有的Google文档似乎都遵循这条极其错综复杂的路线.
推荐阅读
mobiledu2402851373
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有