无法在我的Android应用程序中驻留在SQLite数据库中的表中插入数据

时间:2013-05-10 06:19:40

标签: android sqlite android-sqlite

请注意,我正在设计一个应用程序,它涉及首次运行时创建数据库,并在运行中简单地打开它。所以我在'onCreate()的'MainActiviy'类中按以下方式处理它'方法:

try 
{
    myDataBase=this.openOrCreateDatabase("wishes", MODE_PRIVATE, null);
    myDataBase.execSQL("CREATE TABLE IF NOT EXISTS " + tablename
                 +
                " (_id VARCHAR(15) primary key,Name VARCHAR(20), Message VARCHAR(100),Event VARCHAR(15),Date INT);");

}    //SQLiteDatabase 'myDatabase' is declared as public

现在我有另一个名为'eventdefinition'的类,其中我创建'MainActivity'对象'ma'然后我尝试在按钮点击事件中插入表中的值,如下所示:

              MainActivity ma=new MainActivity();     //line 63
              event=spinner.getSelectedItem().toString();   //line 64
              message=ed1.getText().toString();    //line 65
              ma.myDataBase.openDatabase("/data/data/org.mithil.autowish/databases/wishes", null,ma.myDataBase.OPEN_READWRITE);   //line 66
              ma.myDataBase.execSQL("INSERT INTO " +        
                        ma.tablename +
                        " Values ('"+ finalnumber +"','"+ name +"','"+ message +"','"+ event +"','"+ ldate +"');");

代码给出了NullPointerException,如下所示:

05-10 11:03:30.992: E/AndroidRuntime(602): FATAL EXCEPTION: main 05-10 11:03:30.992: E/AndroidRuntime(602): java.lang.NullPointerException 05-10 11:03:30.992: E/AndroidRuntime(602): at org.mithil.autowish.eventdefinition$2.onClick(eventdefinition.java:67) 05-10 11:03:30.992: E/AndroidRuntime(602): at android.view.View.performClick(View.java:3480) 05-10 11:03:30.992: E/AndroidRuntime(602): at android.view.View$PerformClick.run(View.java:13983) 05-10 11:03:30.992: E/AndroidRuntime(602): at android.os.Handler.handleCallback(Handler.java:605) 05-10 11:03:30.992: E/AndroidRuntime(602): at android.os.Handler.dispatchMessage(Handler.java:92) 05-10 11:03:30.992: E/AndroidRuntime(602): at android.os.Looper.loop(Looper.java:137) 05-10 11:03:30.992: E/AndroidRuntime(602): at android.app.ActivityThread.main(ActivityThread.java:4340) 05-10 11:03:30.992: E/AndroidRuntime(602): at java.lang.reflect.Method.invokeNative(Native Method) 05-10 11:03:30.992: E/AndroidRuntime(602): at java.lang.reflect.Method.invoke(Method.java:511) 05-10 11:03:30.992: E/AndroidRuntime(602): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 05-10 11:03:30.992: E/AndroidRuntime(602): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 05-10 11:03:30.992: E/AndroidRuntime(602): at dalvik.system.NativeStart.main(Native Method)

请让我知道我在哪里做错了。任何帮助都意味着很多。谢谢。

此致

2 个答案:

答案 0 :(得分:0)

要在Android中处理所有与查询相关的数据库,您可以在此处查看此link。它告诉你如何创建/删除表,它还告诉你如何从android数据库迭代/插入/删除/更新数据。

我希望它可以帮到你。

答案 1 :(得分:0)

您需要将其与您的活动分开。最简单的方法是实现扩展SQLiteOpenHelper类的单个dao。

这里有Java doc http://developer.android.com/reference/android/database/sqlite/SQLiteOpenHelper.html

此类内置逻辑以创建新数据库或根据版本更新数据库,因此您不必在活动中重新实现逻辑以创建数据库。

您需要做的就是实现onCreate(db)方法和onUpdate(db,oldVer,newVer)方法。