안드로이드 개발 질문/답변
(글 수 45,052)
코드에서 이와같이 DB를 사용했는데.. 맨아랫줄에서 쿼리를 날리면 에러가 발생해 버리는군요..
데이터베이스조차 생성이 안되는 걸까요?
passdb클래스의 생성자에 진입은 하고 super명령어까지 수행을 하는데
passdb클래스의 onCreate에는 들어가지 않고 있습니다.
DB파일이 생성되는지는 잘 모르겠습니다.
무엇이 원인일까요... 몇시간째 이러고 있으니 답답합니다..
도와주세요..ㅠㅠ
private passdb mDB;
mDB = new passdb(this);
SQLiteDatabase db=mDB.getReadableDatabase();
Cursor cursor = db.query(TABLE_NAME, null , "title=aaaaaaaaaaaaaaaaa", null,null,null,null); <- 이 부분이 27번째 행입니다.
아래는 passdb 클래스입니다..
public class passdb extends SQLiteOpenHelper{
private static final String DATABASE_NAME="passroid.db";
private static final int DATABASE_VERSION=1;
public passdb(Context ctx){
super(ctx, DATABASE_NAME,null,DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db)
{
Log.d("aaa","create table");
db.execSQL("CREATE TABLE passroid (" + _ID + " INTEGER PRIMARY KEY AUTOINCREMENT, TITLE char(20), TYPE char(20), CONT char(200), MEMO text);");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion){
db.execSQL("DROP TABLE IF EXISTS passroid");
onCreate(db);
}
}
에러 내용입니다..
08-15 16:41:54.418: ERROR/AndroidRuntime(2022): Uncaught handler: thread main exiting due to uncaught exception
08-15 16:41:54.448: ERROR/AndroidRuntime(2022): java.lang.RuntimeException: Unable to start activity ComponentInfo{ys.util.passroid/ys.util.passroid.Passroid}: android.database.sqlite.SQLiteException: no such table: passroid: , while compiling: SELECT * FROM passroid WHERE title=aaaaaaaaaaaaaaaaa
08-15 16:41:54.448: ERROR/AndroidRuntime(2022): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2268)
08-15 16:41:54.448: ERROR/AndroidRuntime(2022): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2284)
08-15 16:41:54.448: ERROR/AndroidRuntime(2022): at android.app.ActivityThread.access$1800(ActivityThread.java:112)
08-15 16:41:54.448: ERROR/AndroidRuntime(2022): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1692)
08-15 16:41:54.448: ERROR/AndroidRuntime(2022): at android.os.Handler.dispatchMessage(Handler.java:99)
08-15 16:41:54.448: ERROR/AndroidRuntime(2022): at android.os.Looper.loop(Looper.java:123)
08-15 16:41:54.448: ERROR/AndroidRuntime(2022): at android.app.ActivityThread.main(ActivityThread.java:3948)
08-15 16:41:54.448: ERROR/AndroidRuntime(2022): at java.lang.reflect.Method.invokeNative(Native Method)
08-15 16:41:54.448: ERROR/AndroidRuntime(2022): at java.lang.reflect.Method.invoke(Method.java:521)
08-15 16:41:54.448: ERROR/AndroidRuntime(2022): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:782)
08-15 16:41:54.448: ERROR/AndroidRuntime(2022): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:540)
08-15 16:41:54.448: ERROR/AndroidRuntime(2022): at dalvik.system.NativeStart.main(Native Method)
08-15 16:41:54.448: ERROR/AndroidRuntime(2022): Caused by: android.database.sqlite.SQLiteException: no such table: passroid: , while compiling: SELECT * FROM passroid WHERE title=aaaaaaaaaaaaaaaaa
08-15 16:41:54.448: ERROR/AndroidRuntime(2022): at android.database.sqlite.SQLiteProgram.native_compile(Native Method)
08-15 16:41:54.448: ERROR/AndroidRuntime(2022): at android.database.sqlite.SQLiteProgram.compile(SQLiteProgram.java:110)
08-15 16:41:54.448: ERROR/AndroidRuntime(2022): at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:59)
08-15 16:41:54.448: ERROR/AndroidRuntime(2022): at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:49)
08-15 16:41:54.448: ERROR/AndroidRuntime(2022): at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:49)
08-15 16:41:54.448: ERROR/AndroidRuntime(2022): at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1118)
08-15 16:41:54.448: ERROR/AndroidRuntime(2022): at android.database.sqlite.SQLiteDatabase.queryWithFactory(SQLiteDatabase.java:1006)
08-15 16:41:54.448: ERROR/AndroidRuntime(2022): at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:964)
08-15 16:41:54.448: ERROR/AndroidRuntime(2022): at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1041)
08-15 16:41:54.448: ERROR/AndroidRuntime(2022): at ys.util.passroid.Passroid.onCreate(Passroid.java:27)
08-15 16:41:54.448: ERROR/AndroidRuntime(2022): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1123)
08-15 16:41:54.448: ERROR/AndroidRuntime(2022): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2231)
08-15 16:41:54.448: ERROR/AndroidRuntime(2022): ... 11 more
테이블이 제대로 생성되지 않은 것이 원인이네요. 이전에 생성해놓은 db파일이 있는 경우 onCreate가 불리지 않아서 table이 생성되지 않았을수도 있습니다. 혹은 테이블 쿼리자체가 잘못되었을수도 있구요. 확인해보시기 바랍니다.