2013-07-27 8 views
0

sqlite 데이터베이스에 한 번에 여러 레코드를 삽입하려고합니다. DB를 채운 다음 해당 레코드를 사용하여 listview를 채 웁니다. 그래서 두 번째 두 번째 활동 즉, MenuActivity의 oncreate 메소드에서 삽입 쿼리를 실행하려고 생각했습니다. DB를 채울 것이라고 생각하고 필요한 데이터를 검색 할 수있게되었습니다. 하지만 그것은 logcat에 약간의 오류를주고 있습니다. 누구든지이 일을 도울 수 있습니까?데이터베이스 생성시 여러 레코드 삽입

MenuActivity.java

protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     //requestWindowFeature(Window.FEATURE_NO_TITLE); 
     setContentView(R.layout.activity_menu); 

     //setting db environment 
     dbhelper = new ToursOpenHelper(this); 
     sqldb = dbhelper.getWritableDatabase(); 
     sqldb.execSQL("INSERT INTO "+tourEntry.TABLE+ 
" SELECT "+tourEntry.TOURTYPE+" AS 'Tour_type' , "+tourEntry.TOURNAME+" AS 'Tour_name', "+tourEntry.NIGHTS+" AS 'Nights', "+tourEntry.DAYS+" AS 'Day', "+tourEntry.PIC+" AS 'Pic'"+ 
" UNION SELECT '1', '3', 'Delhi Tour', '1', '2', 'img/mini-vacation/lotus.png'"+ 
" UNION SELECT '2', '3', 'Taj Mahal Tour By Train (Same Day Return)', '1', '1', 'img/mini-vacations/taj-train.jpg"+ 
" UNION SELECT '3', '3', 'Taj Mahal Trip By Car (Same Day Return)', '1', '1', 'img/mini-vacations/'"+ 
" UNION SELECT '4', '3', 'Taj Mahal Trip', '1', '2', 'img/mini-vacations/noimg.png'"+ 
" UNION SELECT '5', '3', 'Pink City Tour (Same Day Return)', '1', '1', 'img/mini-vacations/noimg.png'"); 

로그 캣 :

07-28 11:54:37.064: E/OpenGLRenderer(4396): OpenGLRenderer is out of memory! 
07-28 11:54:41.869: E/AndroidRuntime(4396): FATAL EXCEPTION: main 
07-28 11:54:41.869: E/AndroidRuntime(4396): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.travelplanner/com.example.travelplanner.MenuActivity}: android.database.sqlite.SQLiteException: near "3": syntax error: , while compiling: INSERT INTO tour SELECT tour_type AS 'Tour_type' , tour_name AS 'Tour_name', nights AS 'Nights', days AS 'Day', pic AS 'Pic' UNION SELECT '1', '3', 'Delhi Tour', '1', '2', 'img/mini-vacation/lotus.png' UNION SELECT '2', '3', 'Taj Mahal Tour By Train (Same Day Return)', '1', '1', 'img/mini-vacations/taj-train.jpg UNION SELECT '3', '3', 'Taj Mahal Trip By Car (Same Day Return)', '1', '1', 'img/mini-vacations/' UNION SELECT '4', '3', 'Taj Mahal Trip', '1', '2', 'img/mini-vacations/noimg.png' UNION SELECT '5', '3', 'Pink City Tour (Same Day Return)', '1', '1', 'img/mini-vacations/noimg.png' 
07-28 11:54:41.869: E/AndroidRuntime(4396):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1967) 
07-28 11:54:41.869: E/AndroidRuntime(4396):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1992) 
07-28 11:54:41.869: E/AndroidRuntime(4396):  at android.app.ActivityThread.access$600(ActivityThread.java:127) 
07-28 11:54:41.869: E/AndroidRuntime(4396):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1158) 
07-28 11:54:41.869: E/AndroidRuntime(4396):  at android.os.Handler.dispatchMessage(Handler.java:99) 
07-28 11:54:41.869: E/AndroidRuntime(4396):  at android.os.Looper.loop(Looper.java:137) 
07-28 11:54:41.869: E/AndroidRuntime(4396):  at android.app.ActivityThread.main(ActivityThread.java:4448) 
07-28 11:54:41.869: E/AndroidRuntime(4396):  at java.lang.reflect.Method.invokeNative(Native Method) 
07-28 11:54:41.869: E/AndroidRuntime(4396):  at java.lang.reflect.Method.invoke(Method.java:511) 
07-28 11:54:41.869: E/AndroidRuntime(4396):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:823) 
07-28 11:54:41.869: E/AndroidRuntime(4396):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:590) 
07-28 11:54:41.869: E/AndroidRuntime(4396):  at dalvik.system.NativeStart.main(Native Method) 
07-28 11:54:41.869: E/AndroidRuntime(4396): Caused by: android.database.sqlite.SQLiteException: near "3": syntax error: , while compiling: INSERT INTO tour SELECT tour_type AS 'Tour_type' , tour_name AS 'Tour_name', nights AS 'Nights', days AS 'Day', pic AS 'Pic' UNION SELECT '1', '3', 'Delhi Tour', '1', '2', 'img/mini-vacation/lotus.png' UNION SELECT '2', '3', 'Taj Mahal Tour By Train (Same Day Return)', '1', '1', 'img/mini-vacations/taj-train.jpg UNION SELECT '3', '3', 'Taj Mahal Trip By Car (Same Day Return)', '1', '1', 'img/mini-vacations/' UNION SELECT '4', '3', 'Taj Mahal Trip', '1', '2', 'img/mini-vacations/noimg.png' UNION SELECT '5', '3', 'Pink City Tour (Same Day Return)', '1', '1', 'img/mini-vacations/noimg.png' 
07-28 11:54:41.869: E/AndroidRuntime(4396):  at android.database.sqlite.SQLiteCompiledSql.native_compile(Native Method) 
07-28 11:54:41.869: E/AndroidRuntime(4396):  at android.database.sqlite.SQLiteCompiledSql.<init>(SQLiteCompiledSql.java:68) 
07-28 11:54:41.869: E/AndroidRuntime(4396):  at android.database.sqlite.SQLiteProgram.compileSql(SQLiteProgram.java:143) 
07-28 11:54:41.869: E/AndroidRuntime(4396):  at android.database.sqlite.SQLiteProgram.compileAndbindAllArgs(SQLiteProgram.java:361) 
07-28 11:54:41.869: E/AndroidRuntime(4396):  at android.database.sqlite.SQLiteStatement.acquireAndLock(SQLiteStatement.java:266) 
07-28 11:54:41.869: E/AndroidRuntime(4396):  at android.database.sqlite.SQLiteStatement.executeUpdateDelete(SQLiteStatement.java:88) 
07-28 11:54:41.869: E/AndroidRuntime(4396):  at android.database.sqlite.SQLiteDatabase.executeSql(SQLiteDatabase.java:1905) 
07-28 11:54:41.869: E/AndroidRuntime(4396):  at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1845) 
07-28 11:54:41.869: E/AndroidRuntime(4396):  at com.example.travelplanner.MenuActivity.onCreate(MenuActivity.java:54) 
07-28 11:54:41.869: E/AndroidRuntime(4396):  at android.app.Activity.performCreate(Activity.java:4465) 
07-28 11:54:41.869: E/AndroidRuntime(4396):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049) 
07-28 11:54:41.869: E/AndroidRuntime(4396):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1931) 
07-28 11:54:41.869: E/AndroidRuntime(4396):  ... 11 more 

답변

0

내가 사용하지 않을는에서 onCreate 방법에 만 데이터베이스 방식과 다른 아무것도를 만들기 위해 사용되어야로 그렇게. 가장 좋은 방법은 databaseAdapter 또는 완전히 새로운 클래스의 모든 삽입 작업을 수행하고 응용 프로그램 사이클의 어느 곳에서나 onCreate 메서드를 호출 한 후에 호출하는 다른 메서드를 만드는 것입니다.

+0

한 가지 더 ... 여러 레코드를 삽입하는 제 코드가 올바른가요? – divyang7

+0

일반적으로 유니온 대신 유니온 올 키워드와 함께 사용하지만 작동해야합니다. –

+0

그리고 insert 메서드를 사용하는 것이 적절한 곳이면, 데이터를 listView로 표시해야하는 Activity에이 메서드를 작성해야합니다. 말하자면, 액티비티에서 ListView에 DB 값을 채워야하기 때문에 동일한 활동에서 위와 같이 여러 삽입 쿼리로 DB를 채울 수 있습니까? – divyang7

관련 문제