Android-向数据库添加更多表的SQLite问题

问题描述 投票:0回答:1

首先,我创建了我的处方表,该方法起作用了。然后,我尝试将第二个表添加到名为Patient_table的数据库中。但是我收到此错误“

Error Code : 1 (SQLITE_ERROR)
    Caused By : SQL(query) error or missing database.
        (no such table: patient_table (code 1): , while compiling: INSERT INTO patient_table(PPS,CARINGID,DOB,ADDRESS,SNAME,PATIENTTYPE,PATIENTMEDCON,FNAME) VALUES (?,?,?,?,?,?,?,?))

我尝试将数据库版本号从1更改为2,但这使我的应用程序崩溃。我也试图从我的android设备上卸载该应用程序,但是它仍然给我同样的错误。

任何帮助将不胜感激。

package com.example.medicationmanagementsystem.DAO;
//code below is based on AndroidSQLite Tutorial Android CRUD Tutorial with SQLite (Create, Read, Update, Delete), ProgrammingKnowledge, https://www.youtube.com/watch?v=kDZES1wtKUY
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

public class DatabaseHelper extends SQLiteOpenHelper {

    //Create Database
    public static final String DATABASE_NAME = "ManagementSystem.db";
    //Create patient table
    public static final String TABLE_PATIENT = "patient_table";
    public static final String COL_PATIENT_PATIENTID = "PATID";
    public static final String COL_PATIENT_FNAME = "FNAME";
    public static final String COL_PATIENT_SNAME = "SNAME";
    public static final String COL_PATIENT_PPS = "PPS";
    public static final String COL_PATIENT_DOB = "DOB";
    public static final String COL_PATIENT_ADDRESS = "ADDRESS";
    public static final String COL_PATIENT_TYPE = "PATIENTTYPE";
    public static final String COL_PATIENT_MEDCOND = "PATIENTMEDCON";
    public static final String COL_PATIENT_CARINGID = "CARINGID";

    //Create prescription table
    public static final String TABLE_PRESCRIPTION = "prescription_table";
    public static final String COL_PRESCRIPTION_ID = "PRESCRIPTIONID";
    public static final String COL_PRESCRIPTION__PATIENTID = "PATIENTID";
    public static final String COL_PRESCRIPTION__DATE = "DATE";
    public static final String COL_PRESCRIPTION__DRUGNAME = "DRUGNAME";
    public static final String COL_PRESCRIPTION__CONCENTRATION = "CONCENTRATION";
    public static final String COL_PRESCRIPTION__DOSAGE = "DOSAGE";
    public static final String COL_PRESCRIPTION__PREPARATION = "PREPARATION";
    public static final String COL_PRESCRIPTION__STARTDATE = "STARTDATE";
    public static final String COL_PRESCRIPTION__ENDDATE = "ENDDATE";
    public static final String COL_PRESCRIPTION__DOCTORID = "DOCTORID";



    public DatabaseHelper(Context context) {
        super(context, DATABASE_NAME, null, 1);

    }
    @Override
    public void onCreate (SQLiteDatabase db) {
        String patienttable = "CREATE TABLE " + TABLE_PATIENT + "(PATID INTEGER PRIMARY KEY AUTOINCREMENT, FNAME TEXT, SNAME TEXT, PPS TEXT, DOB TEXT, ADDRESS TEXT, PATIENTTYPE TEXT, PATIENTMEDCON TEXT, CARINGID INTEGER)";
        String prescriptiontable = "CREATE TABLE " + TABLE_PRESCRIPTION + "(PRESCRIPTIONID INTEGER PRIMARY KEY AUTOINCREMENT, PATIENTID INTEGER, DATE TEXT, DRUGNAME TEXT, CONCENTRATION TEXT, DOSAGE TEXT, PREPARATION TEXT, STARTDATE TEXT, ENDDATE TEXT, DOCTORID INTEGER)";
        db.execSQL(patienttable);
        db.execSQL(prescriptiontable);
        this.getReadableDatabase();
        this.getWritableDatabase();
    }
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS "+ TABLE_PATIENT);
        db.execSQL("DROP TABLE IF EXISTS "+ TABLE_PRESCRIPTION);
        onCreate(db);
    }
    //insert patient data
    public boolean insertPatientData(String fname, String sname, String pps, String dob, String address, String patienttype, String patientmedcon, String caringid) {
        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues contentValues1 = new ContentValues();
        contentValues1.put(COL_PATIENT_FNAME, fname);
        contentValues1.put(COL_PATIENT_SNAME, sname);
        contentValues1.put(COL_PATIENT_PPS, pps);
        contentValues1.put(COL_PATIENT_DOB, dob);
        contentValues1.put(COL_PATIENT_ADDRESS, address);
        contentValues1.put(COL_PATIENT_TYPE, patienttype);
        contentValues1.put(COL_PATIENT_MEDCOND,patientmedcon);
        contentValues1.put(COL_PATIENT_CARINGID, caringid);
        long result= db.insert(TABLE_PATIENT,null, contentValues1);
        if (result == 1)
            return false;
        else
            return true;
    }
    //insert prescription data
    public boolean insertData(String patientid, String date, String drugname, String concentration,String dosage, String preparation, String startdate, String enddate, String doctorid) {
        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues contentValues2 = new ContentValues();
        contentValues2.put(COL_PRESCRIPTION__PATIENTID, patientid);
        contentValues2.put(COL_PRESCRIPTION__DATE, date);
        contentValues2.put(COL_PRESCRIPTION__DRUGNAME, drugname);
        contentValues2.put(COL_PRESCRIPTION__CONCENTRATION, concentration);
        contentValues2.put(COL_PRESCRIPTION__DOSAGE, dosage);
        contentValues2.put(COL_PRESCRIPTION__PREPARATION, preparation);
        contentValues2.put(COL_PRESCRIPTION__STARTDATE, startdate);
        contentValues2.put(COL_PRESCRIPTION__ENDDATE, enddate);
        contentValues2.put(COL_PRESCRIPTION__DOCTORID, doctorid);
        long result= db.insert(TABLE_PRESCRIPTION,null, contentValues2);
        if (result == 1)
            return false;
        else
            return true;
        //END

    }

    //Coding with mitch tutorial
    public Cursor getListContents() {
        SQLiteDatabase db = this.getWritableDatabase();
        Cursor data = db.rawQuery("SELECT * FROM " + TABLE_PRESCRIPTION, null);
        return data;
    }
}
java android database sqlite appsettings
1个回答
0
投票

您不应该尝试使用onCreate方法中的数据库(使用此。获取java.lang.IllegalStateException:getDatabase递归调用即,当您获得DatabaseHelper的实例时,不会创建或打开数据库。直到您调用getWritableDatabase(隐式地(例如,通过插入)或显式地)时,才尝试打开数据库并创建数据库(如果尚不存在)。因此,调用get ???? ableDatabase将是一个递归,因为它已经在获取数据库。因此将

onCreate

方法更改为:-

@Override public void onCreate (SQLiteDatabase db) { String patienttable = "CREATE TABLE " + TABLE_PATIENT + "(PATID INTEGER PRIMARY KEY AUTOINCREMENT, FNAME TEXT, SNAME TEXT, PPS TEXT, DOB TEXT, ADDRESS TEXT, PATIENTTYPE TEXT, PATIENTMEDCON TEXT, CARINGID INTEGER)"; String prescriptiontable = "CREATE TABLE " + TABLE_PRESCRIPTION + "(PRESCRIPTIONID INTEGER PRIMARY KEY AUTOINCREMENT, PATIENTID INTEGER, DATE TEXT, DRUGNAME TEXT, CONCENTRATION TEXT, DOSAGE TEXT, PREPARATION TEXT, STARTDATE TEXT, ENDDATE TEXT, DOCTORID INTEGER)"; db.execSQL(patienttable); db.execSQL(prescriptiontable); //this.getReadableDatabase(); //<<<<< MUST NOT BE USED In onCreate //this.getWritableDatabase(); //<<<<< MUST NOT BE USED in onCreate }

当然,您可能会删除这些行而不是将它们注释掉。

    运行该应用程序之前,最好先卸载该应用程序。
© www.soinside.com 2019 - 2024. All rights reserved.