我正在尝试使用sqlite在eclipse中从数据库中插入和检索数据,但是它显示了RuntimeError.我创建了一个包含三个编辑文本和一个按钮的布局,用于从中创建简单信息,但是什么也没有创建.我使用以下代码创建Java数据库:
package com.example.databasetest;import androID.content.ContentValues;import androID.content.Context;import androID.database.sqlException;import androID.database.sqlite.sqliteDatabase;import androID.database.sqlite.sqliteOpenHelper;import androID.util.Log;public class DBHelper extends sqliteOpenHelper{ private static final int DATABASE_VERSION = 1; private static final String DATABASE_name = "teacher"; private static final String table_name = "teacher_table"; private static final String name = "teacher_name"; private static final String FATHER_name = "father_name"; private static final String MOTHER_name = "mother_name"; sqliteDatabase data=this.getWritableDatabase(); Context ctx; public DBHelper(Context context) { super(context, DATABASE_name, null, DATABASE_VERSION); ctx=context; Log.d("DATABASE OPERATION", "DATABASE CREATED"); } @OverrIDe public voID onCreate(sqliteDatabase db) { data=db; db.execsql("CREATE table " + table_name + " (" + name + " TEXT," + FATHER_name + " TEXT," + MOTHER_name + " INTEGER," + ");"); Log.d("DATABASE OPERATION", "table CREATED"); } public voID open() throws sqlException { DBHelper db1 = new DBHelper(ctx); data = db1.getWritableDatabase(); } public voID close() { data.close(); } @OverrIDe public voID onUpgrade(sqliteDatabase db, int oldVersion, int newVersion) { db.execsql("DROP table IF EXCEPTION EXISTS"); onCreate(db); } public voID onInsert(DBHelper db,String name,String f_name, String m_name) { sqliteDatabase sql= db.getWritableDatabase(); ContentValues cv=new ContentValues(); cv.put("teacher_name",name); cv.put("father_name", f_name); cv.put("mother_name", m_name); sql.insert(table_name, null, cv); Log.d("DATABASE OPERATION", "ONE ROW INSERTED....."); }}
和java文件为…
package com.example.databasetest;import androID.app.Activity;import androID.content.Context;import androID.os.Bundle;import androID.vIEw.VIEw;import androID.vIEw.VIEw.OnClickListener;import androID.Widget.button;import androID.Widget.EditText;import androID.Widget.Toast;public class MainActivity extends Activity { EditText name,FATHER,MOTHER,ID; String name,father,mother,ID; int i=1; button save; Context ctxx; @OverrIDe protected voID onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentVIEw(R.layout.activity_main); name=(EditText)findVIEwByID(R.ID.name); FATHER=(EditText)findVIEwByID(R.ID.father_name); MOTHER=(EditText)findVIEwByID(R.ID.mother_name); ID=(EditText)findVIEwByID(R.ID.emp_ID); save=(button)findVIEwByID(R.ID.submit); save.setonClickListener(new OnClickListener() { @OverrIDe public voID onClick(VIEw v) { ID=ID.getText().toString(); name=name.getText().toString(); father=FATHER.getText().toString(); mother=MOTHER.getText().toString(); if(ID.equals(i)) { Toast.makeText(getBaseContext(), "not allow insertion", Toast.LENGTH_LONG).show(); } else { DBHelper DB=new DBHelper(ctxx); DB.open(); DB.onInsert(DB, name, father, mother); Toast.makeText(getBaseContext(), "insertion sucessful", Toast.LENGTH_LONG).show(); finish(); } } }); }}
当我单击日志猫中的按钮时,它及其显示运行时错误..
05-08 02:54:05.932: D/AndroIDRuntime(922): Shutting down VM05-08 02:54:05.999: W/dalvikvm(922): threadID=1: thread exiting with uncaught exception (group=0x41465700)05-08 02:54:06.189: E/AndroIDRuntime(922): FATAL EXCEPTION: main05-08 02:54:06.189: E/AndroIDRuntime(922): java.lang.NullPointerException05-08 02:54:06.189: E/AndroIDRuntime(922): at androID.database.sqlite.sqliteOpenHelper.getDatabaseLocked(sqliteOpenHelper.java:224)05-08 02:54:06.189: E/AndroIDRuntime(922): at androID.database.sqlite.sqliteOpenHelper.getWritableDatabase(sqliteOpenHelper.java:164)05-08 02:54:06.189: E/AndroIDRuntime(922): at com.example.databasetest.DBHelper.<init>(DBHelper.java:22)05-08 02:54:06.189: E/AndroIDRuntime(922): at com.example.databasetest.MainActivity.onClick(MainActivity.java:49)05-08 02:54:06.189: E/AndroIDRuntime(922): at androID.vIEw.VIEw.performClick(VIEw.java:4240)05-08 02:54:06.189: E/AndroIDRuntime(922): at androID.vIEw.VIEw$PerformClick.run(VIEw.java:17721)05-08 02:54:06.189: E/AndroIDRuntime(922): at androID.os.Handler.handleCallback(Handler.java:730)05-08 02:54:06.189: E/AndroIDRuntime(922): at androID.os.Handler.dispatchMessage(Handler.java:92)05-08 02:54:06.189: E/AndroIDRuntime(922): at androID.os.Looper.loop(Looper.java:137)05-08 02:54:06.189: E/AndroIDRuntime(922): at androID.app.ActivityThread.main(ActivityThread.java:5103)05-08 02:54:06.189: E/AndroIDRuntime(922): at java.lang.reflect.Method.invokeNative(Native Method)05-08 02:54:06.189: E/AndroIDRuntime(922): at java.lang.reflect.Method.invoke(Method.java:525)05-08 02:54:06.189: E/AndroIDRuntime(922): at com.androID.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)05-08 02:54:06.189: E/AndroIDRuntime(922): at com.androID.internal.os.ZygoteInit.main(ZygoteInit.java:553)05-08 02:54:06.189: E/AndroIDRuntime(922): at dalvik.system.NativeStart.main(Native Method)05-08 02:54:09.589: I/Process(922): Sending signal. PID: 922 SIG: 9
解决方法:
ctxx不会被初始化,这可能是崩溃的原因.一般来说,当您处理Activity和Fragment子类时,几乎不需要保留对Context的引用.活动是上下文的子类,通常就足够了.在Fragment中,您可以使用getActivity()检索托管Fragment的Activity的上下文
CHANTE
DBHelper DB=new DBHelper(ctxx);
同
DBHelper DB=new DBHelper(MainActivity.this);
正如@DerGolem所指出的,您正在将INTEGER类型用于MOTHER_name列.可能您想使用TEXT,并且还需要一个主键“ _ID”
db.execsql("CREATE table " + table_name + " (" + BaseColumns._ID + " INTEGER PRIMARY KEY autoINCREMENT, " + name + " TEXT," + FATHER_name + " TEXT," + MOTHER_name + " TEXT" + ");");
总结 以上是内存溢出为你收集整理的java-从android中的sqlite数据库检索数据时出现RuntimeError全部内容,希望文章能够帮你解决java-从android中的sqlite数据库检索数据时出现RuntimeError所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)