从android中的sqlite数据库检索数据时出现运行时错误

2023-12-06

我正在尝试使用 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 VM
05-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: main
05-08 02:54:06.189: E/AndroidRuntime(922): java.lang.NullPointerException
05-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$1.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 的引用。活动是一个子类Context,并且通常this足够。在 Fragment 中,您可以检索Activity托管片段getActivity()

Chante

 DBHelper DB=new DBHelper(ctxx);

with

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"
                + ");");
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从android中的sqlite数据库检索数据时出现运行时错误 的相关文章

随机推荐

  • git rebase 和 git push:非快进,为什么使用?

    我有一个分支应该可供其他贡献者使用 并且应该不断与主版本保持同步 不幸的是 每次我执行 git rebase 然后尝试推送时 都会导致 非快进 消息并中止推送 推到这里的唯一方法是使用 force 这是否意味着如果我的分支公开并且其他人正在
  • 在 scipy.signal.fftconvolve 中模拟“axes”参数的紧凑方法?

    scipy signal fftconvolve似乎没有axes参数例如numpy fft fftn 意味着开箱即用 它将一起卷积all axes 我正在寻找最轻松的方法 让它只沿着给定的轴子集进行卷积 有谁知道解决方法或捷径 None
  • 如何使用掩蔽层来掩蔽 LSTM 自动编码器中的输入/输出?

    我正在尝试使用 LSTM 自动编码器以可变长度的序列作为输入进行序列到序列学习 使用以下代码 inputs Input shape None input dim masked input Masking mask value 0 0 inp
  • asp.net 中的 w3c 验证错误

    我是 W3c 验证的新手 我正在尝试修复此错误 但它没有发生 错误如下 字符 是分隔符的第一个字符 但作为数据出现 我正在使用 DataList Control 绑定数据 这是发生 w3c 验证错误的行
  • 对一列矩阵进行子集化删除行名称[重复]

    这个问题在这里已经有答案了 当我尝试按行名称对 1 列矩阵进行子集化时 子集化有效 但会返回数字向量 你能以某种方式阻止这种行为并保留行名称吗 M lt as matrix rnorm 5 rownames M lt LETTERS 1 5
  • 父母向孩子发送消息

    我有从 Parent 类继承的 Child 类 我想要的是将消息发送给孩子 孩子已经实现了该消息 所以这就像从父级调用纯虚函数一样 如果我现在从家长发送消息 我会收到警告 家长可能不会回复此消息 这是真的 因为只有 Child 实现了它 基
  • PHP SQLite JSON 数据重复

    我有以下 PHP 代码 testMessage TESTMESSAGE db new SQLite3 messages sq3 db gt exec CREATE TABLE messages id INTEGER PRIMARY KEY
  • 控制流的例外情况

    有这里有一个有趣的帖子关于这一点 与跨应用程序控制流有关 嗯 最近 我遇到了一个有趣的问题 在潜在 实际上 无限递归序列中生成第 n 个值 这个特定的算法在成功时将至少处于 10 15 个堆栈引用深度 我的第一个想法是抛出一个如下所示的 S
  • 我的 ngmodel 没有重新加载,绑定不起作用

    实际上 这段代码来自 ionic 我正在处理通过照片捕获获得的图像 一切正常 我得到了斑点 但由于某种原因我的图像没有显示在模板中 我认为角度绑定没有更新 我能做什么来强制它 myblob any null takePhoto const
  • 当数据库发生变化时前端实时更新

    当数据库记录更新或更改时如何更新前端ui 例子 推特 Twitter 帖子的点赞数动态增加 这种实时更新我们要用什么技术 方式是什么 另一个例子 firebase 当 firebase 记录中有更新时 自动前端 UI 更新 请有人帮我解决这
  • Perl 读取文件,从列中打印唯一值

    我是 Perl 新手 我想用 Perl 实现以下目标 我有一个包含以下数据的文件 dev hda1 boot ext3 rw 0 0 dev hda1 boot ext3 rw 0 0 我想从文件中提取第二个字段并仅打印唯一值 我想要的这个
  • 如何将 Rexx 程序作为批处理作业运行?

    我有一个 Rexx 程序 我想将其作为批处理作业运行 我怎样才能做到这一点 这是我的程序 Rexx HELLO Write Hello World Say hello World 该计划定位为会员HELLO in the PDS ME US
  • 在 Woocommerce 3 中获取自定义订单项元数据

    我正在使用 Woocommerce 最新版本 3 4 2 如何获取一些订单项元数据并为其分配自定义值 我使用公共数组获取元数据 item product data array 我需要获得一定的值 对产品进行额外的修改 并分配自定义 sku
  • TypeScript 能否在子静态方法中正确推断出“this”值?

    我有一个场景 我需要一个带有静态方法的基类来实例化该类 这个基类预计会被一些子类继承 以拥有自己的一组额外成员 下面是一个最小的 JavaScript 工作示例 class A static create value return new
  • C# 中的 Punycode 转换器

    我需要一个 Silverlight 的 punycode 转换器 对于WPF来说 标准库中有这样的机会 我需要一个现成的库或函数代码 punycode 编码和解码 C Silverlight 我不确定 Silverlight 是否可以访问这
  • 如何将多个值作为参数传递给 C 中的线程?

    在C中 如何将多个参数传递给一个线程 通常 我会这样做 pthread create th NULL dosomething void connfd void dosomething void connfd Doing something
  • Bash 变量赋值中出现命令未找到错误

    我有一个名为 test sh 的脚本 bin bash STR Hello World echo STR 当我跑步时sh test sh我明白了 test sh line 2 STR command not found 我究竟做错了什么 我
  • 会话时 Fancybox 弹出一次

    我有一个带有 fancybox 的弹出窗口 出现在加载页面上 如果用户更改页面并返回弹出窗口的页面不会再次显示 我需要一次显示弹出窗口 我读过可以使用 cookie 插件 https github com carhartl jquery c
  • 尽管我有外部临时地址,但 gcloud 计算地址列表返回 0 结果

    我的项目中有一个带有外部 IP 的 google 计算实例 实例上的描述命令向我显示 networkInterfaces accessConfigs kind compute accessConfig name External NAT n
  • 从android中的sqlite数据库检索数据时出现运行时错误

    我正在尝试使用 sqlite 在 eclipse 中从数据库插入和检索数据 但它显示了RuntimeError 我创建了一个布局 其中包含三个编辑文本和一个按钮来创建简单信息 但没有创建任何内容 我使用以下代码创建java数据库 packa