我在我的Android应用程序中处理sqlite。
我正在db.getVersion()
获取我的数据库的当前版本。
它在logcat中显示3
。
即使在构造函数中,我也将4
设置为版本号。
public Helper(Context context)
{
super(context, DATABASE_NAME, null,4);
}
我正在给4
它应该4
作为版本号。
但它不像这样。它显示3
作为版本号。
请提出任何建议。
更新: -
public class Helper extends SQLiteOpenHelper {
public static final String DATABASE_NAME = "helper.db";
public static final String TITLE = "title";
public static final String AUTHOR = "author";
public static final String ISBN = "isbn";
public Helper(Context context)
{
super(context, DATABASE_NAME, null,4);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL( "CREATE TABLE book1(_id INTEGER PRIMARY KEY AUTOINCREMENT,title TEXT, author TEXT,isbn INTEGER);");
Log.v("Create Table", "CREATE TABLE book1(_id INTEGER PRIMARY KEY AUTOINCREMENT,title TEXT, author TEXT,isbn INTEGER);");
Log.v("version ", "Version number is "+db.getVersion());
}
答案 0 :(得分:18)
您正在检查onCreate函数中的版本号,为什么?只应在第一次从头创建数据库时调用OnCreate函数,在这种情况下,它应该根据您所需的版本构建数据库。
您是否可以在创建数据库后尝试检查数据库版本,并要求获取可读或可写的实例?
SQLiteDatabase db = new Helper(context).getWritableDatabase();
db.getVersion(); // what value do you get here?
查看android 4.1.1 SQLiteOpenHelper的源代码,这里似乎db版本应该是onCreate函数中的0,我想它可能会在你正在测试的版本上以另一种方式实现。 http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.1.1_r1/android/database/sqlite/SQLiteOpenHelper.java#242
答案 1 :(得分:6)
似乎数据库已经由以前版本的代码创建,尝试从您正在测试的设备上卸载应用程序,然后重新安装。这应该给你版本= 4
答案 2 :(得分:3)
您必须将表格放在oldversion数据库中,覆盖此函数
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS book1");
onCreate(db);
}
应该是它。
避免数据丢失请参阅本教程
http://denverdroid.blogspot.com/2010/04/how-to-non-destructibly-upgrade-your.html
或者
How to update an SQLite Database and NOT lose all existing data?
答案 3 :(得分:1)
我认为你为Helper类提供了错误的构造函数。试试这个:
public Helper(Context context, String name, CursorFactory factory, int version) {
super(context, name, factory, version);
}
您当前的构造函数告诉Android它已经是版本4,并且无需升级它。
此外,您还需要提供onUpgrade方法。
@Override
public void onUpgrade(SQLiteDatabase database, int oldVersion, int newVersion) {
// upgrade code
}
答案 4 :(得分:1)
private SQLiteDatabase getDatabaseLocked(boolean writable) {
...
db.beginTransaction();
try {
if (version == 0) {
--------> onCreate(db); <---- YOUR QUERY ON VERSION IS HERE !!!
} else {
if (version > mNewVersion) {
onDowngrade(db, version, mNewVersion);
} else {
onUpgrade(db, version, mNewVersion);
}
}
--------> db.setVersion(mNewVersion); <---- NEW VERSION IS SET HERE !!!
db.setTransactionSuccessful();
} finally {
db.endTransaction();
}
}
...
}