6 개의 테이블이있는 데이터베이스가 있습니다. 이러한 테이블은 콘텐츠 공급자 및 데이터베이스 도우미의 도움으로 만들어집니다. 이 6 개의 테이블로 앱을 실행하면 앱이 작동하고 모든 테이블이 만들어지고 테이블을 쿼리하고 데이터를 잘 삽입 할 수 있습니다.테이블 작성 문 앞에 실행 된 create 문보기
그러나 내 데이터베이스 도우미의 onCreate 메서드에 sqlite 뷰를 추가하려고하면 응용 프로그램이 중단됩니다.
내가 이해할 수있는 것으로부터, 뷰의 onCreate 메소드는 View join에 사용 된 테이블 onCreate 메소드보다 먼저 호출되는 모든 이유 때문입니다.
내가 알아야 할 것은 databaseHelper가 먼저 테이블을 만든 다음보기를 만드는 방법입니다.
질문의 성격 때문에 ("보기"라는 단어는 다른 단어를 나타 내기 위해 사용됨) 솔루션을 찾으려고 힘듭니다.
이
뷰 생성하는 코드입니다 :public static final String TABLE_NAME = "recent_listens";
public static final String TIMESTAMP_ID = timestampTable.TIMESTAMP_ID;
public static final String TRACK_NAME = trackTable.TRACK_NAME;
public static final String TRACK_MBID = trackTable.TRACK_MBID;
public static final String ALBUM_NAME = albumTable.ALBUM_NAME;
public static final String ALBUM_MBID = albumTable.ALBUM_MBID;
public static final String ARTIST_NAME = artistTable.ARTIST_NAME;
public static final String ARTIST_MBID = artistTable.ARTIST_MBID;
public static final String TIMESTAMP_VALUE = timestampTable.TIMESTAMP_VALUE;
public static final String IMAGE_ID = albumTable.ALBUM_IMG_ID;
private static final String LISTEN_VIEW_CREATE = ""
+ "CREATE VIEW " + TABLE_NAME + " AS "
+ "SELECT "
+ timestampTable.TABLE_TIMESTAMP + "." + timestampTable.TIMESTAMP_ID + " AS " + TIMESTAMP_ID + ", "
+ trackTable.TRACK_NAME + " AS " + TRACK_NAME + ", "
+ trackTable.TRACK_MBID + " AS " + TRACK_MBID + ", "
+ albumTable.ALBUM_NAME + " AS " + ALBUM_NAME + ", "
+ albumTable.ALBUM_MBID + " AS " + ALBUM_MBID + ", "
+ artistTable.ARTIST_NAME + " AS " + ARTIST_NAME + ", "
+ artistTable.ARTIST_MBID + " AS " + ARTIST_MBID + ", "
+ timestampTable.TIMESTAMP_VALUE + " AS " + TIMESTAMP_VALUE + ", "
+ albumTable.ALBUM_IMG_ID + " AS " + IMAGE_ID
+ " FROM "
+ timestampTable.TABLE_TIMESTAMP
+ " INNER JOIN " + trackTable.TABLE_TRACK + " ON "
+ timestampTable.TABLE_TIMESTAMP + "." + timestampTable.TIMESTAMP_CON_TRACK_ID + " = "
+ trackTable.TABLE_TRACK + "." + trackTable.TRACK_ID
+ " INNER JOIN " + albumTable.TABLE_ALBUM + " ON "
+ timestampTable.TABLE_TIMESTAMP + "." + timestampTable.TIMESTAMP_CON_ALBUM_ID + " = "
+ albumTable.TABLE_ALBUM + "." + albumTable.ALBUM_ID;
public static synchronized void onCreate(SQLiteDatabase database) {
database.execSQL(LISTEN_VIEW_CREATE);
을 그리고 이것은 내가 오류입니다 :
을에 의해 발생 : android.database.sqlite.SQLiteException : 그런 칼럼 : ARTIST_NAME (코드 1) : 컴파일 중 : CREATE VIEW recent_listens AS SELECT timestamps_table._id AS _id, track_name AS track_name, track_mbid AS track_mbid, album_name AS album_mbid AS album_mbid, artist_name AS artist_name, artist_mbid AS artist_mbid, timestamp AS timestamp, album_img_id AS album_img_id FROM timestamps_table INNER JOIN은 timestamps_t를 추적합니다. able.track_id = tracks._id INNER는 timestamps_table.album_id = albums._id 여기
내 databaseHelper 클래스입니다 ON 앨범 가입 : 이것은 내 사용자 지정 콘텐츠 공급자에
을
public class databaseHelper extends SQLiteOpenHelper {
private static final String DATABASE_NAME = "userData.db";
private static final int DATABASE_VERSION = 10;
public databaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase database) {
artistTable.onCreate(database);
albumTable.onCreate(database);
trackTable.onCreate(database);
tagTable.onCreate(database);
similarTable.onCreate(database);
timestampTable.onCreate(database);
listenView.onCreate(database);
}
@Override
public void onUpgrade(SQLiteDatabase database, int oldVersion, int newVersion) {
artistTable.onUpgrade(database, oldVersion, newVersion);
albumTable.onUpgrade(database, oldVersion, newVersion);
trackTable.onUpgrade(database, oldVersion, newVersion);
tagTable.onUpgrade(database, oldVersion, newVersion);
similarTable.onUpgrade(database, oldVersion, newVersion);
timestampTable.onUpgrade(database, oldVersion, newVersion);
listenView.onUpgrade(database, oldVersion, newVersion);
}
을}라고에서 onCreate 방법.
@Override
public boolean onCreate() {
database = new databaseHelper(getContext());
return false;
}
BTW 이유를 다음과 같이 함께 검색어 패치? 정말 고통스럽지 않니? 한 조각으로 작성하십시오. –
표시되지 않은 아티스트 테이블 코드에 문제가 있습니다. –
@CL 문제는 내가 아티스트 테이블을 가입에 포함시키지 않았다고 생각합니다.그 경우인지 확인하고 있습니다. – somethingRandom