У меня есть база данных sqlite db в папке с ресурсами, и для первого запуска моего приложения я копирую его на путь «данные/данные/базы данных».Android: скопируйте sqlite из активов до Gingerbread
Это прекрасно работает на всех устройствах от Gingerbread, но для более старых версий я получаю исключение таблицы, которое не найдено, когда я запрашиваю db. Фактически папка db в базах данных пуста. Он содержит только таблицу android_metadata.
Вот эти два метода, которые я использую, чтобы скопировать БД:
public static void copyDBInMemoryIfNeeded(Context ctx, String pkgName) {
try {
String destPath = ctx.getFilesDir().getParentFile().getPath() + "/databases";
File f = new File(destPath);
if (!f.exists()) {
f.mkdirs();
f.createNewFile();
copyDBInMemory(ctx.getAssets().open("mydb.sqlite"),
new FileOutputStream(destPath));
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
private static void copyDBInMemory(InputStream inputStream, OutputStream outputStream)
throws IOException {
// ---copy 1K bytes at a time---
byte[] buffer = new byte[1024];
int length;
while ((length = inputStream.read(buffer)) > 0) {
outputStream.write(buffer, 0, length);
}
inputStream.close();
outputStream.close();
}
и вот мой класс DBAdapter:
public class DBAdapter {
final Context context;
DatabaseHelper DBHelper;
SQLiteDatabase db;
public DBAdapter(Context ctx) {
this.context = ctx;
DBHelper= new DatabaseHelper(context);
}
private static class DatabaseHelper extends SQLiteOpenHelper {
DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Log.w(TAG, "Upgrading database from version " + oldVersion + " to " + newVersion
+ ", which will destroy all old data");
db.execSQL("DROP TABLE IF EXISTS contacts");
onCreate(db);
}
}
public DBAdapter open() throws SQLException {
db = DBHelper.getWritableDatabase();
return this;
}
public void close() {
DBHelper.close();
} }
Насколько велик ваш файл sql в папке с ресурсами? – hardartcore
это 4.7 мегабайт – TheModularMind