【发布时间】:2015-06-04 16:26:03
【问题描述】:
我通过执行 rm /data/data/app/databases/database 删除了 android 数据库。删除它后,我尝试再次运行该应用程序,但由于尚未创建表,因此出现异常。我得到的异常是 E/AndroidRuntime: FATAL EXCEPTION: main java.lang.RuntimeException:无法创建服务wificontroller.WifiControllerService: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 或 On Upgrade 都没有被调用。很抱歉,我无法发布它们是专有的查询,但我知道它们编译正确,因为这已经工作了很长时间。
我尝试重新安装应用程序并删除所有用户数据,但没有任何效果。关于为什么我突然不能再查询我的数据库的任何想法。
【问题讨论】: