【发布时间】:2010-11-10 11:54:31
【问题描述】:
不知道是不是只有我一个人有这种感觉……
我发现在 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.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)
啊,我感觉好多了:)
干杯 硅
【问题讨论】:
-
好吧,无意冒犯,有时您实际上必须编写一些代码 :) 移动平台不提供与桌面操作系统相同的抽象。
-
啊,那
getColumnIndexOrThrow的东西让我快要死了...他们不能创建一个直接采用列名的getString重载吗???