微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用android studio中的两个活动在sqlite数据库中创建两个表

如何解决如何使用android studio中的两个活动在sqlite数据库中创建两个表

我在 sqlite 数据库 user_data 中创建了两个表 user_table 和 Vehicle_table,我在其中使用两个 .xml 活动接受数据。一个活动页面工作正常,但我用来操作第二个表的页面不起作用。它显示:“应用程序已停止工作”。这里是所有的代码。请帮我找出这里的错误

数据库:user_data_sql.java

package com.example.login;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.sqliteDatabase;
import android.database.sqlite.sqliteOpenHelper;

import androidx.annotation.Nullable;

public class user_data_sql extends sqliteOpenHelper {

    public static final String DATABASE_NAME= "user_data1.db";
    public static final String TABLE_NAME= "user_table";
    public static final String TABLE_NAME2= "vehicle_table";
    public static final String COL_1= "USER_ID";
    public static final String COL_2= "FirsT_NAME";
    public static final String COL_3= "LAST_NAME";
    public static final String COL_4= "PHN_NO";
    public static final String COL_5= "dob";
    public static final String COL_6= "ADHAR_NO";
    public static final String COL_7= "LICENSE_NO";
    public static final String COL_8= "LICENSE_VALIDITY";
    public static final String COLV_1 = "VehicleID";
    public static final String COLV_3 = "RCNumber";
    public static final String COLV_4 = "RCValidity";
    public static final String COLV_5 = "ChassisNumber";
    public static final String COLV_6 = "InsuranceNumber";
    public static final String COLV_7 = "InsuranceValidity";
    public static final String COLV_8 = "PUCValidity";

    public user_data_sql(@Nullable Context context) {
        super(context,DATABASE_NAME,null,1);
        sqliteDatabase db= this.getWritableDatabase();
    }

    @Override
    public void onCreate(sqliteDatabase db) {
        db.execsql("create table "+ TABLE_NAME+"(USER_ID INTEGER PRIMARY KEY AUTOINCREMENT,FirsT_NAME TEXT," +
                "LAST_NAME TEXT,PHN_NO INT,dob TEXT,ADHAR_NO INT,LICENSE_NO TEXT,LICENSE_VALIDITY INT)");
        //recentchanges
        db.execsql("create table "+ TABLE_NAME2+"(VehicleID INTEGER PRIMARY KEY AUTOINCREMENT," +
                "RCNUMBER TEXT,RCValidity Date,ChassisNumber TEXT,InsuranceNumber INTEGER,InsuranceValidity Date," +
                "PUCValidity Date,USER_ID INT,FOREIGN KEY(USER_ID) REFERENCES user_table(USER_ID))");
    }
    @Override
    public void onUpgrade(sqliteDatabase db,int i,int i1) {
        db.execsql("DROP TABLE IF EXISTS "+ TABLE_NAME);
        db.execsql("DROP TABLE IF EXISTS "+ TABLE_NAME2);
        onCreate(db);
    }

    public boolean insertData(String FirsT_NAME,String LAST_NAME,String PHN_NO,String dob,String ADHAR_NO,String LICENSE_NO,String LICENSE_VALIDITY)
    {

        sqliteDatabase db= this.getWritableDatabase();
        ContentValues contentValues = new ContentValues();
        contentValues.put(COL_2,FirsT_NAME);
        contentValues.put(COL_3,LAST_NAME);
        contentValues.put(COL_4,PHN_NO);
        contentValues.put(COL_5,dob);
        contentValues.put(COL_6,ADHAR_NO);
        contentValues.put(COL_7,LICENSE_NO);
        contentValues.put(COL_8,LICENSE_VALIDITY);
        long result = db.insert(TABLE_NAME,contentValues);
        return result != -1;
    }
    public boolean insertData1(String rcNumber,String rcValidity,String chassisNumber,String insuranceNumber,String insuranceValidity,String pucValidity){
        sqliteDatabase db = this.getWritableDatabase();

        ContentValues contentValues1 = new ContentValues();
        contentValues1.put(COLV_3,rcNumber);
        contentValues1.put(COLV_4,rcValidity);
        contentValues1.put(COLV_5,chassisNumber);
        contentValues1.put(COLV_6,insuranceNumber);
        contentValues1.put(COLV_7,insuranceValidity);
        contentValues1.put(COLV_8,pucValidity);

        long result = db.insert(TABLE_NAME2,contentValues1);
        return result != -1;

    }
}

page1:qr2.java

package com.example.login;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.inputmethod.InputMethodManager;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.Toast;

import com.google.zxing.BarcodeFormat;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.WriterException;
import com.google.zxing.common.BitMatrix;
import com.journeyapps.barcodescanner.BarcodeEncoder;

public class QR2 extends AppCompatActivity {
    user_data_sql myDb;
    EditText etFirstName,etLastName,etPhoneNumber,etdob,etAadhar,etLicenseNumber,etLicenseValidity;
    Button Generate2,Save,Next;
    ImageView output;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_q_r2);
        myDb =new user_data_sql(this);

        etFirstName=(EditText) findViewById(R.id.etFirstName);
        etLastName=(EditText) findViewById(R.id.etLastName);
        etPhoneNumber=(EditText) findViewById(R.id.etPhoneNumber);
        etdob=(EditText) findViewById(R.id.etdob);
        etAadhar=(EditText) findViewById(R.id.etAadhar);
        etLicenseNumber=(EditText) findViewById(R.id.etLicenseNumber);
        etLicenseValidity=(EditText) findViewById(R.id.etLicenseValidity);

        Generate2=(Button) findViewById(R.id.btnGenerate2);
        output=(ImageView) findViewById(R.id.Output);
        Save=(Button) findViewById(R.id.btnSave);
        Next=(Button) findViewById(R.id.btnNext);
        AddData();
        Generate2.setonClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                //get input value from edit text
                String data = etFirstName.getText().toString().trim();
                MultiFormatWriter writer=new MultiFormatWriter();
                try {
                    BitMatrix matrix=writer.encode(data,BarcodeFormat.QR_CODE,350,350);
                    //Initialise barcode encoder
                    BarcodeEncoder encoder=new BarcodeEncoder();
                    //Initialise bitmap
                    Bitmap bitmap=encoder.createBitmap(matrix);
                    //set bitmap to image view
                    output.setimageBitmap(bitmap);
                    //initialise input manager
    InputMethodManager manager=(InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
                    //hide soft keyboard
                    manager.hideSoftInputFromWindow(etFirstName.getapplicationwindowToken(),0);
                } catch (WriterException e) {
                    e.printstacktrace();
                }


            }
        });
        Next.setonClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent3 = new Intent(QR2.this,Vehicle_info.class);
                startActivity(intent3);
            }
        });


    }
    public void AddData()
    {
        Save.setonClickListener(
                new OnClickListener(){

                    @Override
                    public void onClick(View v) {
                        boolean isInserted= myDb.insertData(etFirstName.getText().toString(),etLastName.getText().toString(),etPhoneNumber.getText().toString(),etdob.getText().toString(),etAadhar.getText().toString(),etLicenseNumber.getText().toString(),etLicenseValidity.getText().toString());
                        if(isInserted)
                            Toast.makeText(QR2.this,"Data Inserted",Toast.LENGTH_LONG).show();
                        else
                            Toast.makeText(QR2.this,"Data NOT Inserted",Toast.LENGTH_LONG).show();
                    }
                }
        );
    }
}

page2:Vehicle_info.java

package com.example.login;
import androidx.appcompat.app.AppCompatActivity;

import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.inputmethod.InputMethodManager;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.Toast;

public class Vehicle_info extends AppCompatActivity {
    user_data_sql myDb;
    EditText editrcNumber,editrcValidity,editchassisNumber,editinsuranceNumber,editinsuranceValidity,editpucValidity;
    Button btnAddData;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_vehicle_info);
        myDb = new user_data_sql(this);
        editrcNumber = (EditText)findViewById(R.id.etRCNumber);
        editrcValidity = (EditText)findViewById(R.id.etRCValidity);
        editchassisNumber = (EditText)findViewById(R.id.etChassisNumber);
        editinsuranceNumber = (EditText)findViewById(R.id.etInsuranceNumber);
        editinsuranceValidity = (EditText)findViewById(R.id.etInsuranceValidity);
        editpucValidity = (EditText)findViewById(R.id.etPUCValidity);
        btnAddData = (Button)findViewById(R.id.btnSave);
        AddData1();
    }

    public void AddData1()
    {
        btnAddData.setonClickListener(
                new OnClickListener(){

                    @Override
                    public void onClick(View v) {
                        boolean isInserted= myDb.insertData1(editrcNumber.getText().toString(),editrcValidity.getText().toString(),editchassisNumber.getText().toString(),editinsuranceNumber.getText().toString(),editinsuranceValidity.getText().toString(),editpucValidity.getText().toString());
                        if(isInserted)
                            Toast.makeText(Vehicle_info.this,Toast.LENGTH_LONG).show();
                        else
                            Toast.makeText(Vehicle_info.this,Toast.LENGTH_LONG).show();
                    }
                }
        );
    }
}

解决方法

如果没有堆栈跟踪“应用程序停止工作”可能有很多原因。

但是,很可能原因的线索是"//recentchanges"。看起来您可能在运行应用程序后添加了第二个表,但没有正确处理要应用于数据库的更改。

DatabaseHelper 中的 onCreate 方法(即您的 user_data_sql 类)仅在数据库不存在时运行/调用。因此,这可能仅对第一个表运行。

删除和重新创建表的 onUpgrade 方法只会在数据库版本增加时运行。数据库版本是传递给 super 调用的第四个参数。你有:-

super(context,DATABASE_NAME,null,1);

因此,您似乎不允许运行 onUpgrade 方法。

修复 1 将超级调用更改为 :-

super(context,2 /*<<<<<<<<<< INCREASED DATABASE VERSION*/);
  • 在包含的第 4 个参数之后添加注释只是为了突出显示对数据库版本号所做的更改。

应该导致调用 onUpgrade 方法,然后该方法应该删除表然后创建它们(丢失任何现有数据),然后您的代码很可能会起作用,或者至少会进一步发展。

  • 请注意,通常您会将 onUpgrade 方法中运行的代码限制为仅通过使用/检查旧版本(代码中的第二个参数 i)来引入更改所需的步骤和新版本(代码中的第三个参数或 i1)。

修复 2/3 另一种可能更简单的方法是删除数据库,在这种情况下,Databasehelper 的 onCreate 方法将运行,数据库版本号可以保持为 1。删除数据库的最简单方法是卸载应用程序,然后重新运行应用程序。您还可以删除 data/data//databases 文件夹中的文件(例如通过 Android Studio 的设备资源管理器),然后重新运行应用程序。

  • 请注意,如最初所述,这只是对您问题的可能原因的猜测。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?