请注意,我正在设计一个应用程序,它涉及首次运行时创建数据库,并在运行中简单地打开它。所以我在'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)
请让我知道我在哪里做错了。任何帮助都意味着很多。谢谢。
此致
答案 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)方法。