android-SQLiteException:无法将只读数据库从版本1升级到版本2
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了android-SQLiteException:无法将只读数据库从版本1升级到版本2,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2908字,纯文字阅读大概需要5分钟。
内容图文
在数据库的第一个版本中,我有三行.扩展SQLiteOpenHelper的类中包含以下方法.
@Override
public void onCreate(SQLiteDatabase database) {
database.execSQL("CREATE TABLE " + DATABASENAME + " (name TEXT, latitude REAL, longitude REAL);");
}
现在,我将版本号从1更改为2,并添加了新行:
@Override
public void onCreate(SQLiteDatabase database) {
database.execSQL("CREATE TABLE " + DATABASENAME + " (name TEXT, latitude REAL, longitude REAL, country TEXT);");
}
我不在乎旧数据库是否丢失,因此我在升级时使用它:
@Override
public void onUpgrade(SQLiteDatabase db, int arg1, int arg2) {
db.delete(DATABASENAME, null, null);
onCreate(db);
}
现在,当我调用方法getReadableDatabase()时,应用程序崩溃,并出现logcat错误
Caused by: android.database.sqlite.SQLiteException: Can’t upgrade
read-only database from version 1 to 2:
/data/data/com.myapp.app/databases/mydb
我该如何预防?
编辑
全班:
public class StationsOpenHelper extends SQLiteOpenHelper {
private static final String DATABASENAME = "stations";
private static final int DATABASEVERSION = 2;
public StationsOpenHelper(Context context) {
super(context, DATABASENAME, null, DATABASEVERSION);
}
@Override
public void onCreate(SQLiteDatabase database) {
database.execSQL("CREATE TABLE " + DATABASENAME + " (name TEXT, latitude REAL, longitude REAL, country TEXT);");
}
@Override
public void onUpgrade(SQLiteDatabase db, int arg1, int arg2) {
db.delete(DATABASENAME, null, null);
onCreate(db);
}
public ArrayList<Station> getStations() {
Logger.log("Trying to read stations from database");
ArrayList<Station> result = new ArrayList<Station>();
SQLiteDatabase database = getReadableDatabase();
Cursor cursor = database.rawQuery("SELECT * FROM " + DATABASENAME, null);
String name, country;
double lat, lon;
Station s;
cursor.moveToFirst();
while (!cursor.isAfterLast()) {
s = new Station();
name = cursor.getString(0);
lat = cursor.getDouble(1);
lon = cursor.getDouble(2);
country = cursor.getString(3);
s.setName(name);
s.setLatitude(lat);
s.setLongitude(lon);
s.setCountry(country);
result.add(s);
cursor.moveToNext();
}
cursor.close();
database.close();
if (result.isEmpty()) {
Logger.log("Reading stations from database failed");
result = null;
} else {
Logger.log("Reading stations from database succeeded");
}
return result;
}
public void storeStations(ArrayList<Station> stations) {
Logger.log("Storing stations in database");
ContentValues values = new ContentValues();
SQLiteDatabase db = getWritableDatabase();
db.delete(DATABASENAME, null, null);
for (int i = 0; i < stations.size(); i++) {
values.put("name", stations.get(i).getName());
values.put("latitude", stations.get(i).getLatitude());
values.put("longitude", stations.get(i).getLongitude());
values.put("country", stations.get(i).getCountry());
db.insert(DATABASENAME, null, values);
}
db.close();
Logger.log("Storing stations in database succeeded");
}
}
解决方法:
好的,这是我建议的解决方案,将db.delete替换为:
db.execSQL("DROP TABLE IF EXISTS " + DATABASENAME);
我有一种奇怪的感觉会起作用;)
内容总结
以上是互联网集市为您收集整理的android-SQLiteException:无法将只读数据库从版本1升级到版本2全部内容,希望文章能够帮你解决android-SQLiteException:无法将只读数据库从版本1升级到版本2所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。