Номер версии для SQLite DB

Я работаю над sqlite в своем приложении для Android.

Я делаю db.getVersion() чтобы получить текущую версию моей базы данных.

Он показывает 3 в logcat.

Даже в конструкторе i установите номер 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()); } 

Solutions Collecting From Web of "Номер версии для SQLite DB"

Вы проверяете номер версии в функции onCreate, почему? Функцию OnCreate следует вызывать только в первый раз, когда база данных создается с нуля, в этом случае она должна построить БД, поскольку вам нужно установить версию, которую вы используете.

Можете ли вы попробовать проверить версию БД после создания БД, и вы попросите получить его читаемый или записываемый экземпляр?

 SQLiteDatabase db = new Helper(context).getWritableDatabase(); db.getVersion(); // what value do you get here? 

Проверьте исходный код android 4.1.1 SQLiteOpenHelper, здесь кажется, что версия db должна быть 0 внутри функции onCreate, я предполагаю, что она может быть реализована по-другому в версии, которую вы тестируете. http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.1.1_r1/android/database/sqlite/SQLiteOpenHelper.java#242

Похоже, что db уже создан предыдущей версией вашего кода, попробуйте удалить приложение с устройства, на котором вы тестируете, а затем переустановите. Это должно дать вам версию = 4

Вы должны отбросить таблицу в базе данных 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

или это

Как обновить базу данных SQLite и НЕ потерять все существующие данные?

Я думаю, что вы предоставляете неправильный конструктор для своего класса 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 } 

ОБРАЩАТЬ ЭТУ ВОПРОСУ ОДИН РАЗ И ДЛЯ ВСЕХ:

  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(); } } ... } 

SOURCE: открытый конечный класс SQLiteDatabase