Так что я сделал большую ошибку при тестировании моего кода на Android 4.0 + и думал, что он отлично работает на других версиях. Но я столкнулся с проблемами с 2.X и 3.X с помощью SQLiteOpenHelper.Проблема с SQLiteOpenHelper на android 2.X и 3.X
Первый код:
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)
Любая помощь очень ценится !! действительно хочу быстро исправить, поскольку приложение уже находится в магазине воспроизведения, и мне нужно опубликовать обновление.
Не уверен в самой ошибке, но, пожалуйста, поймите, что 'dbw' и' dbr' будут указывать на один и тот же объект '' SQLiteDatabase', и поэтому вам не нужны оба. Вызов 'getWritableDatabase()' просто разблокирует уже открытую читаемую базу данных (если она есть). – CommonsWare
нормально, но даже если я удалю dbr, я все еще получаю ошибку и этого не происходит на Android 4.0 +, пожалуйста, помогите! – user1492955
Похоже, вы испытываете такой же вопрос, как указано здесь: [http://stackoverflow.com/a/9503044/1432239][1] [1]: HTTP: // StackOverflow. com/a/9503044/1432239 – maclir