java-从android中的sqlite数据库检索数据时出现RuntimeError

java-从android中的sqlite数据库检索数据时出现RuntimeError,第1张

概述我正在尝试使用sqlite在eclipse中从数据中插入和检索数据,但是它显示了RuntimeError.我创建了一个包含三个编辑文本和一个按钮的布局,用于从中创建简单信息,但是什么也没有创建.我使用以下代码创建Java数据库:packagecom.example.databasetest;importandroid.content.Cont

我正在尝试使用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所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1093162.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-28
下一篇 2022-05-28

发表评论

登录后才能评论

评论列表(0条)

保存