有关上下文,请参见
post
根据yock提供的awsome建议,我将数据库设计更改为使用外键。您可以在此检查整个数据库设计
邮递
.
所以我有两张桌子。
TABLE(1) TABLE (2)
+--------------------------------------+ +-----------+
| SURVEYS TABLE | | ICONS |
+----+------+-------------+------------+ +----+------+
| ID | name | description | iconID | | ID | ICON |
+----+------+-------------+------------+ +----+------+
| | | | FOREIGN KEY|
+--------------------------------------+
我用这两个表构造了一个视图。
public static final String VIEW_SURVEYS = "surveysview";
public static final String VIEW_SURVEYS_CREATE =
"CREATE VIEW " + VIEW_SURVEYS +
" AS SELECT " + TABLE_SURVEYS + "." + KEY_ROWID + " AS _id, " +
TABLE_SURVEYS + "." + KEY_NAME + ", " +
TABLE_SURVEYS + "." + KEY_DESCRIPTION + ", " +
TABLE_ICONS + "." + KEY_ICON + " " +
"FROM " + TABLE_SURVEYS + " JOIN " + TABLE_ICONS +
" ON " + TABLE_SURVEYS + "." + KEY_ICONID + " = " +
TABLE_ICONS + "." + KEY_ROWID;
在适配器构造函数中调用表和视图。
private static class DatabaseHelper extends SQLiteOpenHelper
{
DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
// TABLES
db.execSQL(TABLE_ICONS_CREATE);
db.execSQL(TABLE_SURVEYS_CREATE);
// VIEWS
db.execSQL(VIEW_SURVEYS_CREATE);
}
这是用来查询视图的方法。
public Cursor getSurveys() {
return db.query(VIEW_SURVEYS, new String[] {
KEY_ROWID, KEY_NAME, KEY_DESCRIPTION, KEY_ICON},
null, null, null, null, null);
}
在我的活动中通过光标调用
DBAdapter db = new DBAdapter(this);
db.open(); // Opens db session
Cursor survey_cursor = db.getSurveys();
startManagingCursor(survey_cursor);
问题是当我尝试运行上面的代码时,我的程序崩溃了。崩溃的行是Cursor survey_Cursor=db.getSurveys();
和Catlog秀
11-25 16:19:42.324: ERROR/AndroidRuntime(6146): Caused by: android.database.sqlite.SQLiteException: no such table: surveysview: , while compiling: SELECT _id, name, description, icon FROM surveysview
我无数次地重读代码,但没有发现任何错误。我错过了什么?
这是sqlite_master中SELECT*的输出
table|android_metadata|android_metadata|3|CREATE TABLE android_metadata (locale TEXT)
table|fieldtype|fieldtype|4|CREATE TABLE fieldtype (_id integer primary key autoincrement, type text not null)
table|sqlite_sequence|sqlite_sequence|5|CREATE TABLE sqlite_sequence(name,seq)
table|editicons|editicons|6|CREATE TABLE editicons (_id integer primary key autoincrement, icon text not null)
table|surveys|surveys|7|CREATE TABLE surveys (_id integer primary key autoincrement, name text not null, description text, editableid integer not null, FOREIGN KEY(editableid) REFERENCES editicons(_id))
table|questions|questions|8|CREATE TABLE questions (_id integer primary key autoincrement, field text not null, typeid text not null, survey_id integer not null, FOREIGN KEY(typeid) REFERENCES fieldtype(_id)FOREIGN KEY(survey_id) REFERENCES surveys(_id))
table|choices|choices|9|CREATE TABLE choices (choice text, question_id integer not null, FOREIGN KEY(question_id) REFERENCES questions(_id))
table|answers|answers|10|CREATE TABLE answers (choice_id integer not null, FOREIGN KEY(choice_id) REFERENCES choices(_id))
view|surveysview|surveysview|0|CREATE VIEW surveysview AS SELECT surveys._id AS _id, surveys.name AS name, surveys.description AS description, editicons.icon AS icon FROM surveys JOIN editicons ON surveys.editableid = editicons._id
(此输出反映了我对代码所做的一些更改,因为我在每一列后添加了“AS”)