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

不知道我是否是唯一一个觉得这个…

我发现在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查询创build一个简单的客户对象的简单例子; 我的一些代码比这更糟糕。 用这种方式手工制作查询会导致我在运行时才发现的各种错误。

任何提示大大appreiciated!

下面的提示后,我现在有这个:

  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) 

啊,我感觉好多了:)

干杯

Solutions Collecting From Web of "在Android上查询和使用SQLite中的游标"

  1. 如果不需要,请不要使用模型对象。 我已经断定,除非只有通过模型对象表示的重要的业务逻辑,否则在移动平台上它们比在其中值得的更麻烦。
  2. 假设你被困在模型对象中,让它们自己加载一个Cursor ,而不是试图传入很多参数。
  3. 如果你知道SQL,那么query()rawQuery()更加详细。
  4. 通过串联来组装你的CREATE TABLE子句是自我强加的痛苦,而不是由SQLite或Android强制执行。
  5. 不要使用自定义编写的代码中的getColumnIndexOrThrow() 。 你编写了查询,所以你知道列返回的顺序。如果你正在创build一些抽象的库,不知道它给出的Cursor的细节,只能使用类似getColumnIndexOrThrow()东西。
  6. StringCharSequenceinheritance,所以所有的转换都可以被删除。

在将SQLite复制到string之前,我在SQLite中testing了很多SQL。 当我可以直接与命令行进行交互时,debugging更容易。

我使用的另一种技术是保存尽可能多的查询string常量或string资源。

你也不需要SQL,比如INTEGER NOT NULL因为SQLite使用鸭子打字/清单input。 它确实帮助types亲和力..