Android 创建数据库时插入多条记录

Android 创建数据库时插入多条记录,android,android-sqlite,sqliteopenhelper,Android,Android Sqlite,Sqliteopenhelper,我试图在sqlite数据库中同时插入多条记录。我想填充数据库,然后使用这些记录填充listview。所以我想在我的第二个活动中执行insert查询,即MenuActivity的oncreate方法。我认为它将填充数据库,然后我将能够根据需要检索数据。但它在logcat中给出了一些错误。有人能帮忙吗 MenuActivity.java protected void onCreate(Bundle savedInstanceState) { super.onCreate(sa

我试图在sqlite数据库中同时插入多条记录。我想填充数据库,然后使用这些记录填充listview。所以我想在我的第二个活动中执行insert查询,即MenuActivity的oncreate方法。我认为它将填充数据库,然后我将能够根据需要检索数据。但它在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
07-28 11:54:37.064:E/OpenGLRenderer(4396):OpenGLRenderer内存不足!
07-28 11:54:41.869:E/AndroidRuntime(4396):致命异常:主
07-28 11:54:41.869:E/AndroidRuntime(4396):java.lang.RuntimeException:无法启动活动组件信息{com.example.travelplanner/com.example.travelplanner.MenuActivity}:android.database.sqlite.SQLiteException:接近“3”:语法错误:,编译时:插入到tour中选择tour类型为“tour类型”,tour名称为“tour名称”,夜为“夜”,日为“日”,pic为“pic”UNION选择“1”、“3”、“德里之旅”、“1”、“2”、“img/迷你度假/lotus.png”UNION选择“2”、“3”、“泰姬陵火车之旅(当天返回)”、“1”、“1”、“img/迷你度假/Taj-Train.jpg UNION选择“3”、“3”、“泰姬陵汽车之旅(当天返回)”、“1”、“1”,‘img/mini vacations/‘UNION SELECT’4’、‘3’、‘泰姬陵之旅’、‘1’、‘2’、‘img/mini vacations/noimg.png‘UNION SELECT’5’、‘3’、‘粉红城市之旅(当天返回)’、‘1’、‘img/mini vacations/noimg.png’
07-28 11:54:41.869:E/AndroidRuntime(4396):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1967)
07-28 11:54:41.869:E/AndroidRuntime(4396):在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1992)
07-28 11:54:41.869:E/AndroidRuntime(4396):在android.app.ActivityThread.access$600(ActivityThread.java:127)
07-28 11:54:41.869:E/AndroidRuntime(4396):在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1158)
07-28 11:54:41.869:E/AndroidRuntime(4396):在android.os.Handler.dispatchMessage(Handler.java:99)上
07-28 11:54:41.869:E/AndroidRuntime(4396):在android.os.Looper.loop(Looper.java:137)上
07-28 11:54:41.869:E/AndroidRuntime(4396):位于android.app.ActivityThread.main(ActivityThread.java:4448)
07-28 11:54:41.869:E/AndroidRuntime(4396):位于java.lang.reflect.Method.Invokenactive(本机方法)
07-28 11:54:41.869:E/AndroidRuntime(4396):位于java.lang.reflect.Method.invoke(Method.java:511)
07-28 11:54:41.869:E/AndroidRuntime(4396):在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:823)
07-28 11:54:41.869:E/AndroidRuntime(4396):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:590)
2007-28 11:54:41.869:E/AndroidRuntime(4396):在dalvik.system.NativeStart.main(本机方法)
07-28 11:54:41.869:E/AndroidRuntime(4396):原因:android.database.sqlite.SQLiteException:near“3”:语法错误:,编译时:在tour中插入选择tour类型为“tour类型”,tour名称为“tour名称”,nights为“nights”,days为“Day”,pic为“pic”联合选择“1”,“3”,“德里tour”,“1”,“2”,‘img/mini-vacations/lotus.png’UNION-SELECT‘2’、‘3’、‘泰姬陵火车之旅(当天返回)’、‘1’、‘img/mini-vacations/Taj-Train.jpg UNION-SELECT‘3’、‘泰姬陵汽车之旅(当天返回)’、‘1’、‘1’、‘img/mini-vacations/noimg.png’UNION-SELECT‘5’、‘3’、‘3’、‘noimg’等,“粉红城市之旅(当天返回)”、“1”、“1”、“img/mini vacations/noimg.png”
07-28 11:54:41.869:E/AndroidRuntime(4396):在android.database.sqlite.SQLiteCompiledSql.native_编译(本机方法)
07-28 11:54:41.869:E/AndroidRuntime(4396):在android.database.sqlite.SQLiteCompiledSql。(SQLiteCompiledSql.java:68)
07-28 11:54:41.869:E/AndroidRuntime(4396):位于android.database.sqlite.SQLiteProgram.compileSql(SQLiteProgram.java:143)
07-28 11:54:41.869:E/AndroidRuntime(4396):在android.database.sqlite.SQLiteProgram.compileAndbindAllArgs(SQLiteProgram.java:361)
07-28 11:54:41.869:E/AndroidRuntime(4396):位于android.database.sqlite.SQLiteStatement.acquiredandlock(SQLiteStatement.java:266)
07-28 11:54:41.869:E/AndroidRuntime(4396):位于android.database.sqlite.SQLiteStatement.executeUpdateDelete(SQLiteStatement.java:88)
07-28 11:54:41.869:E/AndroidRuntime(4396):在android.database.sqlite.SQLiteDatabase.executeSql(SQLiteDatabase.java:1905)
07-28 11:54:41.869:E/AndroidRuntime(4396):在android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1845)
07-28 11:54:41.869:E/AndroidRuntime(4396):在com.example.travelplanner.MenuActivity.onCreate(MenuActivity.java:54)
07-28 11:54:41.869:E/AndroidRuntime(4396):在android.app.Activity.performCreate(Activity.java:4465)上
07-28 11:54:41.869:E/AndroidRuntime(4396):在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)上
07-28 11:54:41.869:E/AndroidRuntime(4396):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1931)
2007-28 11:54:41.869:E/AndroidRuntime(4396):。。。还有11个

我不会在onCreate方法中使用它,因为它只应用于创建数据库方案,而不应用于其他目的。最好的方法是创建另一个方法,该方法将在databaseAdapter或全新类中执行所有插入操作,并在我调用应用程序周期中任何位置的onCreate方法后调用它。

还有一件事…我插入多条记录的代码正确吗..?我通常将其与Union all关键字一起使用,而不是Union,但它应该正确如果适合使用insert方法,我是否应该将其写入需要将数据显示为listView的活动中。比如说,在一个活动中,我需要用DB值填充一个ListView,那么我可以在同一个活动中通过上面的多次插入查询填充DB吗?