안드로이드 개발 질문/답변
(글 수 45,052)
테이블 2개를 join 해서 조건에 맞는 레코드만 추출하려고 하는데요
join을 하려면 rawQuery() 사용하는게 맞는거죠??
근데 아래 소스에 7번째 부분에서 에러가 발생하는 것 같습니다..
sql 문과 똑같이 sqlite3로 실행해보면 제대로 실행되서 결과가 보이거든요..??
근데 직접 코드로 넣어서 추출하려니 되지 않네요..
error ---------------------------------------------------------------------------------------------------------
11-26 04:16:02.541: ERROR/AndroidRuntime(586): Uncaught handler: thread main exiting due to uncaught exception
11-26 04:16:02.572: ERROR/AndroidRuntime(586): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.android.dbtest2/com.android.dbtest2.DBTest2}: android.database.sqlite.SQLiteException: bind or column index out of range: handle 0x12a1d0
11-26 04:16:02.572: ERROR/AndroidRuntime(586): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2454)
11-26 04:16:02.572: ERROR/AndroidRuntime(586): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2470)
11-26 04:16:02.572: ERROR/AndroidRuntime(586): at android.app.ActivityThread.access$2200(ActivityThread.java:119)
11-26 04:16:02.572: ERROR/AndroidRuntime(586): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1821)
11-26 04:16:02.572: ERROR/AndroidRuntime(586): at android.os.Handler.dispatchMessage(Handler.java:99)
11-26 04:16:02.572: ERROR/AndroidRuntime(586): at android.os.Looper.loop(Looper.java:123)
11-26 04:16:02.572: ERROR/AndroidRuntime(586): at android.app.ActivityThread.main(ActivityThread.java:4310)
11-26 04:16:02.572: ERROR/AndroidRuntime(586): at java.lang.reflect.Method.invokeNative(Native Method)
11-26 04:16:02.572: ERROR/AndroidRuntime(586): at java.lang.reflect.Method.invoke(Method.java:521)
11-26 04:16:02.572: ERROR/AndroidRuntime(586): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
11-26 04:16:02.572: ERROR/AndroidRuntime(586): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
11-26 04:16:02.572: ERROR/AndroidRuntime(586): at dalvik.system.NativeStart.main(Native Method)
11-26 04:16:02.572: ERROR/AndroidRuntime(586): Caused by: android.database.sqlite.SQLiteException: bind or column index out of range: handle 0x12a1d0
11-26 04:16:02.572: ERROR/AndroidRuntime(586): at android.database.sqlite.SQLiteProgram.native_bind_string(Native Method)
11-26 04:16:02.572: ERROR/AndroidRuntime(586): at android.database.sqlite.SQLiteProgram.bindString(SQLiteProgram.java:178)
11-26 04:16:02.572: ERROR/AndroidRuntime(586): at android.database.sqlite.SQLiteQuery.bindString(SQLiteQuery.java:190)
11-26 04:16:02.572: ERROR/AndroidRuntime(586): at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:55)
11-26 04:16:02.572: ERROR/AndroidRuntime(586): at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1220)
11-26 04:16:02.572: ERROR/AndroidRuntime(586): at android.database.sqlite.SQLiteDatabase.rawQuery(SQLiteDatabase.java:1193)
11-26 04:16:02.572: ERROR/AndroidRuntime(586): at com.android.dbtest2.MyDBAdapter.searchJoinLocation(MyDBAdapter.java:103)
11-26 04:16:02.572: ERROR/AndroidRuntime(586): at com.android.dbtest2.DBTest2.fillListData(DBTest2.java:42)
11-26 04:16:02.572: ERROR/AndroidRuntime(586): at com.android.dbtest2.DBTest2.onCreate(DBTest2.java:20)
11-26 04:16:02.572: ERROR/AndroidRuntime(586): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
11-26 04:16:02.572: ERROR/AndroidRuntime(586): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2417)
11-26 04:16:02.572: ERROR/AndroidRuntime(586): ... 11 more
error ---------------------------------------------------------------------------------------------------------
table은 cominfo,maninfo가 있고요 column은 아래처럼 구성되있습니다..
cominfo = _company, location
maninfo = _id,name,company
안드로이드 버전은 2.0 사용하고 있고, 공지사항은 읽었습니다... 도와주세요 ㅜ.ㅜ
join을 하려면 rawQuery() 사용하는게 맞는거죠??
근데 아래 소스에 7번째 부분에서 에러가 발생하는 것 같습니다..
sql 문과 똑같이 sqlite3로 실행해보면 제대로 실행되서 결과가 보이거든요..??
근데 직접 코드로 넣어서 추출하려니 되지 않네요..
public Cursor searchJoinLocation(String loc){ String sql; String column = "maninfo._id,maninfo.name,maninfo.company,cominfo.location"; String valse[] = {column,loc}; sql=("SELECT ? FROM maninfo LEFT OUTER JOIN cominfo " + "ON maninfo.company=cominfo._company WHERE cominfo.location='?'"); Cursor resCursor = mDb.rawQuery(sql,valse); resCursor.moveToFirst(); return resCursor; }
error ---------------------------------------------------------------------------------------------------------
11-26 04:16:02.541: ERROR/AndroidRuntime(586): Uncaught handler: thread main exiting due to uncaught exception
11-26 04:16:02.572: ERROR/AndroidRuntime(586): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.android.dbtest2/com.android.dbtest2.DBTest2}: android.database.sqlite.SQLiteException: bind or column index out of range: handle 0x12a1d0
11-26 04:16:02.572: ERROR/AndroidRuntime(586): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2454)
11-26 04:16:02.572: ERROR/AndroidRuntime(586): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2470)
11-26 04:16:02.572: ERROR/AndroidRuntime(586): at android.app.ActivityThread.access$2200(ActivityThread.java:119)
11-26 04:16:02.572: ERROR/AndroidRuntime(586): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1821)
11-26 04:16:02.572: ERROR/AndroidRuntime(586): at android.os.Handler.dispatchMessage(Handler.java:99)
11-26 04:16:02.572: ERROR/AndroidRuntime(586): at android.os.Looper.loop(Looper.java:123)
11-26 04:16:02.572: ERROR/AndroidRuntime(586): at android.app.ActivityThread.main(ActivityThread.java:4310)
11-26 04:16:02.572: ERROR/AndroidRuntime(586): at java.lang.reflect.Method.invokeNative(Native Method)
11-26 04:16:02.572: ERROR/AndroidRuntime(586): at java.lang.reflect.Method.invoke(Method.java:521)
11-26 04:16:02.572: ERROR/AndroidRuntime(586): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
11-26 04:16:02.572: ERROR/AndroidRuntime(586): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
11-26 04:16:02.572: ERROR/AndroidRuntime(586): at dalvik.system.NativeStart.main(Native Method)
11-26 04:16:02.572: ERROR/AndroidRuntime(586): Caused by: android.database.sqlite.SQLiteException: bind or column index out of range: handle 0x12a1d0
11-26 04:16:02.572: ERROR/AndroidRuntime(586): at android.database.sqlite.SQLiteProgram.native_bind_string(Native Method)
11-26 04:16:02.572: ERROR/AndroidRuntime(586): at android.database.sqlite.SQLiteProgram.bindString(SQLiteProgram.java:178)
11-26 04:16:02.572: ERROR/AndroidRuntime(586): at android.database.sqlite.SQLiteQuery.bindString(SQLiteQuery.java:190)
11-26 04:16:02.572: ERROR/AndroidRuntime(586): at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:55)
11-26 04:16:02.572: ERROR/AndroidRuntime(586): at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1220)
11-26 04:16:02.572: ERROR/AndroidRuntime(586): at android.database.sqlite.SQLiteDatabase.rawQuery(SQLiteDatabase.java:1193)
11-26 04:16:02.572: ERROR/AndroidRuntime(586): at com.android.dbtest2.MyDBAdapter.searchJoinLocation(MyDBAdapter.java:103)
11-26 04:16:02.572: ERROR/AndroidRuntime(586): at com.android.dbtest2.DBTest2.fillListData(DBTest2.java:42)
11-26 04:16:02.572: ERROR/AndroidRuntime(586): at com.android.dbtest2.DBTest2.onCreate(DBTest2.java:20)
11-26 04:16:02.572: ERROR/AndroidRuntime(586): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
11-26 04:16:02.572: ERROR/AndroidRuntime(586): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2417)
11-26 04:16:02.572: ERROR/AndroidRuntime(586): ... 11 more
error ---------------------------------------------------------------------------------------------------------
table은 cominfo,maninfo가 있고요 column은 아래처럼 구성되있습니다..
cominfo = _company, location
maninfo = _id,name,company
안드로이드 버전은 2.0 사용하고 있고, 공지사항은 읽었습니다... 도와주세요 ㅜ.ㅜ
사용하셨는데 ? 가 문자열을 단순 대치하는 것이 아닙니다. 저도 테스트해보지 않고 답변드려 확신하지는 못하는데. column 부분에 ?를 사용하지 말고 직접 넣어보시구요. 뒤의 '?' 는 ?로 바꿔주어 보세요.