Я разрабатываю приложение на android, используя встроенную базу данных sqlite, которую я предварительно создала. При развертывании приложения на моем устройстве (Wildfire от HTC) я извлекаю существующую базу данных из папки активов и считываю данные в базе данных. На данный момент все в порядке. Проблема, с которой я столкнулась, связана с тем, что вся работа, которую я делаю в базе данных, например Add, Edit или Remove, не работает. Кажется, что база данных находится в режиме readonly, но операция select работает нормально, и я получаю свой список. Пожалуйста, мне нужна ваша консультация!Невозможно прочитать базу данных SQLite, развернутую на устройстве
Смотрите ниже код, я использую для создания базы данных:
public class DatabaseHelper extends SQLiteOpenHelper {
private static final String DATABASE_NAME = "mydb.sqlite";
private static final int DATABASE_VERSION = 1;
private static String DATABASE_PATH = "";
public DatabaseHelper(Context context) {
super(context,DATABASE_NAME,null,DATABASE_VERSION);
try {
copyDataBase(context);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
DATABASE_PATH = context.getDatabasePath(DATABASE_NAME).getAbsolutePath();
}
private void copyDataBase(Context context) throws IOException{
//Open your local db as the input stream
InputStream input = context.getAssets().open(DATABASE_NAME);
//Open the empty db as the output stream
OutputStream output = new FileOutputStream(DATABASE_PATH);
//transfer bytes from the input file to the output file
byte[] buffer = new byte[1024];
int length;
while ((length = input.read(buffer))>0){
output.write(buffer, 0, length);
}
//Close the streams
output.flush();
output.close();
input.close();
}
@Override
public void onCreate(SQLiteDatabase db) {
db = SQLiteDatabase.openDatabase(DATABASE_PATH, null, SQLiteDatabase.OPEN_READWRITE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Log.w(DatabaseHelper.class.getName(), "New version : " + newVersion);
db.execSQL("DROP TABLE IF EXISTS person");
db.execSQL("DROP TABLE IF EXISTS destiny");
db.execSQL("DROP TABLE IF EXISTS intention");
db.execSQL("DROP TABLE IF EXISTS innerself");
onCreate(db);
}
}
С уважением.
любые ошибки? можете ли вы продемонстрировать, как получить экземпляр базы данных? используете ли вы getWritableDatabase() или getReadableDatabase()? – hovanessyan
Я использую функцию getWritableDatabase(). –