Java 删除android数据库后,getReadableDatabase()赢得';不要创建新数据库

Java 删除android数据库后,getReadableDatabase()赢得';不要创建新数据库,java,android,sqlite,Java,Android,Sqlite,我通过执行rm/data/data/app/databases/database删除了android数据库。在我删除它后,我再次尝试运行该应用程序,但它出现异常,因为尚未创建表。我得到的例外是E/AndroidRuntime﹕ 致命异常:主 java.lang.RuntimeException:无法创建服务wificontroller.wificontroller服务:android.database.sqlite.SQLiteException:没有这样的表: 我在中创建表 public cl

我通过执行rm/data/data/app/databases/database删除了android数据库。在我删除它后,我再次尝试运行该应用程序,但它出现异常,因为尚未创建表。我得到的例外是E/AndroidRuntime﹕ 致命异常:主 java.lang.RuntimeException:无法创建服务wificontroller.wificontroller服务:android.database.sqlite.SQLiteException:没有这样的表:

我在中创建表

public class DataStore extends SQLiteOpenHelper{

private static final String TAG = "Database";
private static final String DatabaseName = "Database";
private static final String NICKNAME_TABLE_NAME = "nicknames";
private static final String SCAN_TABLE_NAME = "scans";
private static final int Version = 2;

private static final String NICKNAME_TABLE_CREATE = "Query I cant show"

private static final String SCAN_TABLE_CREATE = "Query I cant show"

public DataStore(Context context) {
    super(context, DatabaseName , null, Version);
}

@Override
public void onCreate(SQLiteDatabase db) {
    Log.d(TAG, "Creating database");

    try {
        db.execSQL(NICKNAME_TABLE_CREATE);
        db.execSQL(SCAN_TABLE_CREATE);
    }
    catch (Exception e){
        Log.e(TAG, "Could not create database", e);
        Log.e(TAG, "Query 1: " + NICKNAME_TABLE_CREATE);
        Log.e(TAG, "Query 2: " + SCAN_TABLE_CREATE);
    }

}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    Log.w(TAG, "On Upgrade called");
}
public String[] getScanColumns(){
    return new String[]{"accessPoints", "clients", "status","timeOfStartScan", "packetsFound"};
}
public String getDatabaseName(){
    return DatabaseName;
}
public String getScanTableName(){
    return SCAN_TABLE_NAME;
}
调用数据库的方法是

SQLiteDatabase database = dbHelper.getReadableDatabase();

Cursor mCursor = database.rawQuery("SELECT QUERY", null); //THIS IS THE LINE THAT THROWS THE EXCEPTION

try {
    if (mCursor != null) {
        mCursor.moveToFirst();

        Log.w(Tag, "Packets found on last scan = " + mCursor.getString(mCursor.getColumnIndex("packetsFound")));

        Log.i(Tag, "Successfully loaded database scan");
     } else {
        Log.w(Tag, "Could not retrieve scan from database");
     }
 }
 catch (Exception e){
    Log.w(Tag, "Could not retrieve scan data from database probably because it doesn't exist");
}
finally {
        mCursor.close();
}
我已经验证了无论是在创建还是在升级时都没有被调用。我很抱歉,我不能张贴查询,他们是合适的,但我知道他们编译正确,因为这已经工作了很长时间


我尝试重新安装应用程序并删除所有用户数据,但没有任何效果。有没有想过为什么我会突然不能再查询我的数据库了。

你必须增加版本

试一试


以防其他人也遇到这个问题。我的最初失败是因为数据库不知道数据库发生了变化,我需要增加版本,就像上面所说的,但是我的on create在尝试执行所有查询之前失败了,我遇到了一个非常类似的问题。其中一个查询是错误的,我第一次执行它时它失败了,但每次之后它都没有重试调用Create。简言之,如果Oncreate失败一次,则您必须从手机中完全删除该应用程序,然后重试

这将导致在升级时调用,但为什么不在创建时调用。我也需要它来创建新的数据库。你可以:1。从升级或2调用创建函数。从设置->应用程序管理删除应用程序,然后重新安装应用程序。这为我修复了它。我没有意识到,当你删除数据库时,它不会再次调用Create。您对此有什么解释吗?或者只是不在
onCreate()
中捕获异常,以防止创建损坏的数据库。这是我首先应该做的。但这会导致有趣的行为,所以我想如果用户来到同一个地方,我会尽力帮助他们。>简言之,如果Oncreate失败一次,那么您必须从手机上完全删除>应用程序,然后重试。这不是一个适当的解决办法。如果我们想要进行更新,那么我们会删除数据库并再次尝试创建。所以有错误。而且我们不能告诉用户从手机上删除应用程序并重新安装!!!!!
private static final int Version = 3;