Проблема с SQLiteOpenHelper на Android 2.X и 3.X

Поэтому я сделал большую ошибку при тестировании моего кода на Android 4.0 + и думал, что он будет отлично работать в других версиях. Но я столкнулся с проблемами с 2.X и 3.X с помощью SQLiteOpenHelper.

Сначала код:

public class HelperDB extends SQLiteOpenHelper implements BaseColumns { public static final int DATABASE_VERSION = 2; public static final String DATABASE_NAME = "MYDB.db"; public static final String TABLE_NAME = "MYtable"; public static final String TABLE_NAME_LOGO = "MYLogos"; public static final String COLUMN_NAME_1 = "xxxxx"; public static final String COLUMN_NAME_2 = "yyyy"; public static final String COLUMN_NAME_3 = "zzzz"; public static final String COLUMN_NAME_4 = "aaaa"; public static final String COLUMN_NAME_LOGO = "logo"; public static final String COLUMN_NAME_5 = "3333"; public static final String COLUMN_NAME_6 = "fffff"; public static final String COLUMN_NAME_7= "Abc"; public HelperDB(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } @Override public void onCreate(SQLiteDatabase db){ db.execSQL("CREATE TABLE " + TABLE_NAME + "(" + _ID + " INTEGER PRIMARY KEY autoincrement," + COLUMN_NAME_1 + " TEXT not null," + COLUMN_NAME_2 + " TEXT not null," + COLUMN_NAME_3 + " TEXT not null," + COLUMN_NAME_4 + " LONG not null," + COLUMN_NAME_5 + " INT DEFAULT 99," + COLUMN_NAME_6 +" INT DEFAULT 99);"); db.execSQL("CREATE TABLE " + TABLE_NAME_LOGO + "(" + _ID + " INTEGER PRIMARY KEY autoincrement," + COLUMN_NAME_6 + " TEXT not null," + COLUMN_NAME_7 + " INTERGET not null);"); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { } } ****************************************************************************** public class MatchesDB { private HelperDB dbHelper; private SQLiteDatabase dbw, dbr; public static int id; public MatchesDB(Context context){ dbHelper = new HelperDB(context); dbw = dbHelper.getWritableDatabase(); dbr = dbHelper.getReadableDatabase(); } public void fillinfotable(){} And all other functions to query the database and delete etc 

Создание БД путем вызова

  MatchesDB newdb = new MatchesDB(context); newdb.fillinfotable(); 

Все это отлично работает на всех 4.0 + устройствах. Однако при попытке запустить на устройствах 2.x я получаю следующую ошибку:

 07-14 21:29:14.890: E/Database(22231): CREATE TABLE android_metadata failed 07-14 21:29:14.898: E/Database(22231): CREATE TABLE android_metadata failed 07-14 21:29:15.640: E/Database(22231): Failed to setLocale() when constructing, closing the database 07-14 21:29:15.640: E/Database(22231): android.database.sqlite.SQLiteException: database is locked 07-14 21:29:15.640: E/Database(22231): at android.database.sqlite.SQLiteDatabase.native_setLocale(Native Method) 07-14 21:29:15.640: E/Database(22231): at android.database.sqlite.SQLiteDatabase.setLocale(SQLiteDatabase.java:2000) 07-14 21:29:15.640: E/Database(22231): at android.database.sqlite.SQLiteDatabase. <init>(SQLiteDatabase.java:1857) 07-14 21:29:15.640: E/Database(22231): at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:822) 07-14 21:29:15.640: E/Database(22231): at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:856) 07-14 21:29:15.640: E/Database(22231): at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:849) 07-14 21:29:15.640: E/Database(22231): at android.app.ContextImpl.openOrCreateDatabase(ContextImpl.java:556) 07-14 21:29:15.640: E/Database(22231): at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:203) 07-14 21:29:15.640: E/Database(22231): at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:118) 

Любая помощь высоко ценится !! Действительно хочу быстро исправить, поскольку приложение уже находится в магазине воспроизведения, и мне нужно опубликовать обновление

Не уверен, что это своего рода «лучшая практика», но в моем приложении я никогда не держу db открытым. Я открываю и закрываю его до / после почти каждого действия CRUD. Он работает на Android 2.2.

Проблема заключалась в том, что я делал эти операции с базой данных из виджета, используя asyntasks. Хотя это отлично работает на устройствах Android 4.0 +, однако для более мелких версий андроида я должен был сначала создать активность и сделать все создание базы данных и заполнение таблиц в приложении, а затем получить виджет и отобразить эти данные.