我通过执行rm / data / data / app / databases / database删除了android数据库.删除它后,我尝试再次运行该应用程序,但由于未创建表而引发异常.我得到的例外是E / AndroidRuntime:致命异常: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);}@OverrIDepublic 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); }}@OverrIDepublic 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 EXCEPTIONtry { 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一次失败,则必须从手机中完全删除该应用程序,然后重试.
总结以上是内存溢出为你收集整理的java-删除android数据库后,getReadableDatabase()将不会创建新数据库全部内容,希望文章能够帮你解决java-删除android数据库后,getReadableDatabase()将不会创建新数据库所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)