Для контекста см. post
Следуя удивительному предложению yock, я изменил свой дизайн базы данных, чтобы использовать внешние ключи.Вы можете проверить общий дизайн базы данных в этом сообщении .
Итак, у меня есть 2 таблицы.
TABLE(1) TABLE (2)
+--------------------------------------+ +-----------+
| SURVEYS TABLE | | ICONS |
+----+------+-------------+------------+ +----+------+
| ID | name | description | iconID | | ID | ICON |
+----+------+-------------+------------+ +----+------+
| | | | FOREIGN KEY|
+--------------------------------------+
Я создал VIEW, используя две таблицы.
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 show
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
Я перечитываю код бесчисленное количество раз и не могу найти ничего неправильногоЧего мне не хватает?
Вот вывод для SELECT * FROM sqlite_master
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» после каждого столбца)