Я не могу скопировать базу данных SQLite из папки assests в память устройства (пытается на эмуляторе).
У меня есть база данных в папке с оценками моего проекта, в которой есть таблица, содержащая 1000 * существующих строк .
Я собираюсь скопировать существующий файл из папки ресурсов в папку базы данных эмулятора.
Кусок ДЕЯТЕЛЬНОСТИ
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//All views(list,textboxes) are declared.
try {
dbM = new DbManager(this);
dbM.checkDataBase();
try {
dbM.createDataBase();
} catch (Exception e) {
throw new Error(" *** ERROR in DB Access *** " + e.getMessage());
}
dbM.openDB();
symbolarr = dbM.getSymbol();
lv.setAdapter(new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, symbolarr));
} catch (Exception e) {
throw new Error(" *** ERROR in onCreate *** " + e.getMessage());
}
finally {
dbM.close();
}
}
Часть кода из моего класса DbManager:
public boolean checkDataBase() {
String myPath = DATABASE_PATH + DATABASE_NAME;
File f = new File(myPath);
return f.exists();
}
public void createDataBase() {
try {
InputStream myInput = ctx.getAssets().open(DATABASE_NAME);
OutputStream myOutput = new FileOutputStream(DATABASE_PATH
+ DATABASE_NAME);
byte[] buffer = new byte[1024];
int length;
while ((length = myInput.read(buffer)) > 0) {
myOutput.write(buffer, 0, length);
}
myOutput.flush();
myOutput.close();
myInput.close();
} catch (FileNotFoundException e) {
throw new Error("file not found -- " + e.getMessage());
} catch (IOException e) {
throw new Error("io exception " + e.getMessage());
} catch (Exception e) {
throw new Error(" exception " + e.getMessage());
}
}
public DbManager openDB() throws SQLException {
dbmgr = new DbManager(ctx);
mDb = dbmgr.getWritableDatabase();
return this;
}
public String[] getSymbol() {
Cursor cur;
try {
cur = mDb.rawQuery("select symbol,company_name from Scrip", null);
} catch (SQLiteException e) {
throw new Error(" *** ERROR in cursor *** " + e.getMessage());
}
String[] b1 = new String[1326];
int x = 0;
if (cur.moveToFirst()) {
do {
b1[x] = cur.getString(cur.getColumnIndex("symbol"));
x++;
} while (cur.moveToNext());
}
cur.close();
return b1;
}
LogCat
FATAL EXCEPTION: main
java.lang.Error: file not found -- AndroidDB.db
at com.dbexample.DbManager.createDataBase(DbManager.java:113)
at com.dbexample.DataAttach.onCreate(DataAttach.java:83)
at android.app.Activity.performCreate(Activity.java:4465)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1919)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1980)
at android.app.ActivityThread.access$600(ActivityThread.java:122)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1146)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4340)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
at dalvik.system.NativeStart.main(Native Method)
Примечание
1: изменение размера буфера не помогает ..
2: В моей папке ресурсов есть файл AndroidDB.db размером 62 КБ.
3: оба имени базы данных (в моей папке ресурсов и в моем коде) одинаковы, и у меня есть таблица android_metadata в моей БД, которая находится в папке активов ..
4: Когда я не использовал createDataBase()
, база данных создавалась, но моя желаемая таблица, т. Е. Сценарий, не копировалась. Поэтому, когда я пытался извлечь данные из таблицы, я получал исключение, что no such table Scrip
....
Это означает, что мне нужно скопировать таблицу Scrip
из папки ресурсов в базу данных, присутствующую в памяти эмулятора. Когда я пытаюсь сделать то же самое, используя createDataBase()
, я получаю исключение nullPointerException
5 .: Когда я попробовал следующий код в createDatabase ()
AssetManager assetManager = ctx.getAssets();
String[] files = assetManager.list("Files");
for (int i = 0; i < files.length; i++) {
str[i] = "\n=" + " file=" + " :" + i + "=" + " name=" + "> "
+ files[i];
}
Log.v("len=", "" + files.length);
Тогда files.length равен 0
. Это просто означает, что Невозможно обнаружить какие-либо файлы в папке ресурсов.
ЛЮБАЯ ПОМОЩЬ БУДЕТ СБЕРЕЖАТЬ !!!