Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/178.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SQLite数据库-无此类表(SQLiteException)_Java_Android_Mysql_Sqlite - Fatal编程技术网

Java SQLite数据库-无此类表(SQLiteException)

Java SQLite数据库-无此类表(SQLiteException),java,android,mysql,sqlite,Java,Android,Mysql,Sqlite,首先,我想说的是,我已经阅读了关于同一问题的大多数(如果不是全部的话)其他主题,并尝试了尽可能多的解决方案,但都没有用 我正在尝试创建一个包含3个表的SQLDatabase。第一个表及其关联的方法都可以正常工作(insertData、getAllData、deleteRow)。然而,第二个表就是问题所在,每当我尝试插入一行时,它就会抛出“无此类表异常” 下面是创建我的表的代码 private static final String DATABASE_NAME = "Information

首先,我想说的是,我已经阅读了关于同一问题的大多数(如果不是全部的话)其他主题,并尝试了尽可能多的解决方案,但都没有用

我正在尝试创建一个包含3个表的SQLDatabase。第一个表及其关联的方法都可以正常工作(insertData、getAllData、deleteRow)。然而,第二个表就是问题所在,每当我尝试插入一行时,它就会抛出“无此类表异常”

下面是创建我的表的代码

    private static final String DATABASE_NAME = "Information";
    private static final int DATABASE_VERSION = 2;

    //Allergy Table
    private static final String TABLE_NAME_A = "AllergyTable";
    private static final String NAME = "Allergy";
    private static final String UIDA = "_id";
    private static final String CREATE_TABLE_A = "CREATE TABLE " + TABLE_NAME_A + "(" + UIDA + " INTEGER PRIMARY KEY AUTOINCREMENT, " + NAME + " VARCHAR(255));";
    private static final String DROP_TABLE_A = "DROP TABLE IF EXISTS " + TABLE_NAME_A;


    //Medication Table
    private static final String TABLE_NAME_M = "MedicationsTable";
    private static final String MEDICATION = "Medication";
    private static final String DOSAGE = "Dosage";
    private static final String UIDM = "_id";
    private static final String CREATE_TABLE_M = "CREATE TABLE " + TABLE_NAME_M + "(" + UIDM + " INTEGER PRIMARY KEY AUTOINCREMENT, " + MEDICATION + " VARCHAR(255)), " + DOSAGE + " VARCHAR(255));";
    private static final String DROP_TABLE_M = "DROP TABLE IF EXISTS " + TABLE_NAME_M;

    //Conditions Table
    private static final String TABLE_NAME_C = "ConditionsTable";
    private static final String CONDITION = "Condition";
    private static final String INFO = "Info";
    private static final String UIDC = "_id";
    private static final String CREATE_TABLE_C = "CREATE TABLE " + TABLE_NAME_C + "(" + UIDC + " INTEGER PRIMARY KEY AUTOINCREMENT, " + CONDITION + " VARCHAR(255)), " + INFO + " VARCHAR(255));";
    private static final String DROP_TABLE_C = "DROP TABLE IF EXISTS " + TABLE_NAME_C;
以下是我的onCreate和onUpgrade方法:

    @Override
    public void onCreate(SQLiteDatabase db) {
        try {
            db.execSQL(CREATE_TABLE_A);
            db.execSQL(CREATE_TABLE_M);
            db.execSQL(CREATE_TABLE_C);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

        try {
            db.execSQL(DROP_TABLE_A);
            db.execSQL(DROP_TABLE_M);
            db.execSQL(DROP_TABLE_C);
            onCreate(db);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
这是我正在使用的插入方法:

//Medication Table
public long insertDataMeds(String meds, String dosage) {
    if(meds.length() > 0) {
        SQLiteDatabase db = sqlHelper.getWritableDatabase();
        ContentValues cv = new ContentValues();
        cv.put(sqlHelper.MEDICATION, meds);
        cv.put(sqlHelper.DOSAGE, dosage);
        long id = db.insert(sqlHelper.TABLE_NAME_M, null, cv);
        return id;
    }
    return -1;
}
下面是我的日志文件

FATAL EXCEPTION: main
android.database.sqlite.SQLiteException: no such table: MedicationsTable (code 1): , while compiling: SELECT Medication, Dosage FROM MedicationsTable
at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:882)
at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:493)
at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:37)
at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:44)
at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1314)
at android.database.sqlite.SQLiteDatabase.queryWithFactory(SQLiteDatabase.java:1161)
at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1032)
at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1200)
at com.medinfo.database.SQLDataBaseAdapter.getAllDataMeds(SQLDataBaseAdapter.java:73)
at com.medinfo.main.EditMedication.onClick(EditMedication.java:46)
at android.view.View.performClick(View.java:4204)
at android.view.View$PerformClick.run(View.java:17355)
at android.os.Handler.handleCallback(Handler.java:725)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5041)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
at dalvik.system.NativeStart.main(Native Method)
致命异常:main
android.database.sqlite.SQLiteException:没有这样的表:MedicationsTable(代码1):,编译时:从MedicationsTable中选择药物、剂量
位于android.database.sqlite.SQLiteConnection.nativePrepareStatement(本机方法)
位于android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:882)
位于android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:493)
位于android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
位于android.database.sqlite.SQLiteProgram.(SQLiteProgram.java:58)
位于android.database.sqlite.SQLiteQuery(SQLiteQuery.java:37)
位于android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:44)
位于android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1314)
位于android.database.sqlite.SQLiteDatabase.queryWithFactory(SQLiteDatabase.java:1161)
位于android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1032)
位于android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1200)
位于com.medinfo.database.SQLDataBaseAdapter.getAllDataMeds(SQLDataBaseAdapter.java:73)
在com.medinfo.main.editMedicing.onClick(editMedicing.java:46)上
在android.view.view.performClick上(view.java:4204)
在android.view.view$PerformClick.run(view.java:17355)
位于android.os.Handler.handleCallback(Handler.java:725)
位于android.os.Handler.dispatchMessage(Handler.java:92)
位于android.os.Looper.loop(Looper.java:137)
位于android.app.ActivityThread.main(ActivityThread.java:5041)
位于java.lang.reflect.Method.Invokenactive(本机方法)
位于java.lang.reflect.Method.invoke(Method.java:511)
在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)上
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
在dalvik.system.NativeStart.main(本机方法)

我曾尝试在模拟器和物理设备上运行该应用程序,我曾尝试对该应用程序进行干净的重建,我还卸载并重新安装了该应用程序。我还增加了数据库版本号。似乎什么都不管用。我不知道为什么第一个表及其方法都能正常工作。

在CREATE语句的
+“VARCHAR(255)),“+
部分中有一个额外的
。在上一张表格的CREATE语句中也是如此。哇,我觉得自己错过了这么简单的事情,真是个十足的白痴。谢谢你指出这一点,我真的很感激。我不应该在这么晚的时候编码:/。你不应该在你的
onCreate()
onUpgrade()
中有
try
-
catch
,这只会隐藏任何问题。哦,好吧,这很有趣。我将移除那些try-catch循环:)。非常感谢。