Доступ к базе SQLite расположенной в assets
Доступ к базе SQLite расположенной в assets
Собственно сабж...
Как открыть на чтение базу вложенную в assets. в инете нашел только способ который копирует базу от туда в каталог приложения и от туда работаем... тогда получается что база существует 2 раза, что не есть хорошо...
Как открыть на чтение базу вложенную в assets. в инете нашел только способ который копирует базу от туда в каталог приложения и от туда работаем... тогда получается что база существует 2 раза, что не есть хорошо...
Re: Доступ к базе SQLite расположенной в assets
Если бы было можно, то так бы и поступали.
Ресурсы приложения включая assets находятся в apk приложения и прямого доступа к ним нет (только посредством AssetManager и других инструментов работы с ресурсами OS), а обращение к SQLite базе предполагает прямой доступ к файлу базы, даже если она открывается только для чтения.
Ресурсы приложения включая assets находятся в apk приложения и прямого доступа к ним нет (только посредством AssetManager и других инструментов работы с ресурсами OS), а обращение к SQLite базе предполагает прямой доступ к файлу базы, даже если она открывается только для чтения.
Re: Доступ к базе SQLite расположенной в assets
Спасибо за помощь... Буду искать другой путь решения проблемы.
Re: Доступ к базе SQLite расположенной в assets
Ребята, есть примеры с уже существующей базой данных? Поделитесь пожалуйста, не могу разобраться.
Re: Доступ к базе SQLite расположенной в assets
Код: Выделить всё
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import android.app.Activity;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
public class MainActivity extends Activity {
private static final String DB_NAME = "mydb.db";// Имя БД в Assets
private String DB_PATH; // Полный путь к БД, включая имя в месте хранения БД
// приложения.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
DB_PATH = getDatabasePath(DB_NAME).getAbsolutePath();
if (!isDBexists(DB_PATH)) {
try {
copyDB();
} catch (IOException e) {
// IOException
}
}
}
// Проверка наличия скопированной из Assets БД
private boolean isDBexists(String db_path) {
File dbFile = new File(db_path);
return dbFile.exists();
}
// Копирование БД из Assets
private void copyDB() throws IOException {
SQLiteDatabase sqlDB = openOrCreateDatabase(DB_NAME,
SQLiteDatabase.OPEN_READONLY, null);
sqlDB.close();
InputStream mInput = getAssets().open(DB_NAME);
OutputStream mOutput = new FileOutputStream(DB_PATH);
byte[] mBuffer = new byte[1024];
int mLength;
while ((mLength = mInput.read(mBuffer)) > 0) {
mOutput.write(mBuffer, 0, mLength);
}
mOutput.flush();
mOutput.close();
mInput.close();
}
}
Re: Доступ к базе SQLite расположенной в assets
Андрей а как связать инфу с вьюхами в другом классе можешь показать? Меня интересует адаптер, но только нужно вывести не в список а просто на страничку..Вобще что бы ты представлял,тема примерно такая. Есть база, в ней одна таблица с двумя столбцами id и description, Нужно достать значение description по id c и связать с опеределенной вьюхой на экране.
Последний раз редактировалось Oskar 03 дек 2012, 15:05, всего редактировалось 1 раз.
Re: Доступ к базе SQLite расположенной в assets
Кстати большое спасибо за ответ, очень полезный код.
Re: Доступ к базе SQLite расположенной в assets
В любом случае все запросы к БД SQLite возвращают курсор, страшного ничего не будет, если он будет содержать значение единственного поля и один столбец.
Открывайте БД, делайте запрос по id, получайте курсор с одним столбцом description и из курсора получите значение, которое поместите во вьюху.
Можно сразу считать всю ВД в курсор (оба столбца и все записи), а из курсора потом получать значения, но нужно будет перебирать записи, получать id, при нахождении нужного id считать description из той же позиции.
Открывайте БД, делайте запрос по id, получайте курсор с одним столбцом description и из курсора получите значение, которое поместите во вьюху.
Можно сразу считать всю ВД в курсор (оба столбца и все записи), а из курсора потом получать значения, но нужно будет перебирать записи, получать id, при нахождении нужного id считать description из той же позиции.
Re: Доступ к базе SQLite расположенной в assets
Андрей,всё это конечно красиво...Но нужен пример, их есть у тебя ???AndreyI писал(а):В любом случае все запросы к БД SQLite возвращают курсор, страшного ничего не будет, если он будет содержать значение единственного поля и один столбец.
Открывайте БД, делайте запрос по id, получайте курсор с одним столбцом description и из курсора получите значение, которое поместите во вьюху.
Можно сразу считать всю ВД в курсор (оба столбца и все записи), а из курсора потом получать значения, но нужно будет перебирать записи, получать id, при нахождении нужного id считать description из той же позиции.
Я новичок еще в этой теме, и мне не особо понятно что где использовать(допустим методы query или rawQuery p.s скорее всего второй).
Если тебе не сложно подскажи.Буду очень благодарен.
Re: Доступ к базе SQLite расположенной в assets
Попробуйте хотябы выполнить уроки по SQLite на этом сайте. Я уже почти на крыле в Индию, сейчас нет особо времени во что-то углубляться.