Чтение файла sqlite из папки с данными
Я разрабатываю приложение, в котором я хочу прочитать файл базы данных sqlite
из папки ресурсов проекта. я искал в Интернете, но ничего не нашел полезным. пожалуйста помогите.
Спасибо.
Ответы
Ответ 1
Вы не можете напрямую открывать файлы из папки с данными. Вместо этого вам нужно скопировать базу данных sqlite вашей папки с данными во внутреннюю/внешнюю память и затем использовать путь к файлу для открытия файла. Попробуйте ниже код, чтобы прочитать базу данных sqlite из конкурсов и скопировать ее на SD-карту, чтобы использовать ее.
public class DataBaseHelper extends SQLiteOpenHelper {
private Context mycontext;
private static String DB_NAME = "(datbasename).sqlite";
private static String DB_PATH ="/data/data/"+BuildConfig.APPLICATION_ID+"/databases/";
public SQLiteDatabase myDataBase;
public DataBaseHelper(Context context) throws IOException {
super(context,DB_NAME,null,1);
this.mycontext=context;
boolean dbexist = checkdatabase();
if (dbexist) {
System.out.println("Database exists");
opendatabase();
} else {
System.out.println("Database doesn't exist");
createdatabase();
}
}
public void createdatabase() throws IOException {
boolean dbexist = checkdatabase();
if(dbexist) {
System.out.println(" Database exists.");
} else {
this.getReadableDatabase();
try {
copydatabase();
} catch(IOException e) {
throw new Error("Error copying database");
}
}
}
private boolean checkdatabase() {
boolean checkdb = false;
try {
String myPath = DB_PATH + DB_NAME;
File dbfile = new File(myPath);
checkdb = dbfile.exists();
} catch(SQLiteException e) {
System.out.println("Database doesn't exist");
}
return checkdb;
}
private void copydatabase() throws IOException {
//Open your local db as the input stream
InputStream myinput = mycontext.getAssets().open(DB_NAME);
// Path to the just created empty db
String outfilename = DB_PATH + DB_NAME;
//Open the empty db as the output stream
OutputStream myoutput = new FileOutputStream(outfilename);
// transfer byte to inputfile to outputfile
byte[] buffer = new byte[1024];
int length;
while ((length = myinput.read(buffer))>0) {
myoutput.write(buffer,0,length);
}
//Close the streams
myoutput.flush();
myoutput.close();
myinput.close();
}
public void opendatabase() throws SQLException {
//Open the database
String mypath = DB_PATH + DB_NAME;
myDataBase = SQLiteDatabase.openDatabase(mypath, null, SQLiteDatabase.OPEN_READWRITE);
}
public synchronized void close() {
if(myDataBase != null) {
myDataBase.close();
}
super.close();
}
}
Ответ 2
Пожалуйста, использовать SQLiteAssetHelper
, который имеет весь код, необходимый для установки предварительно упакованной базы данных при первом запуске вашего приложения.
Ответ 3
В принципе вы можете получить InputStream (из функции открытия AssetManager) для имени файла и записать его в OutputStream.
InputStream inputStream = getAssets().open(fileName);
Если вы создаете свою базу данных с помощью openOrCreateDatabase, вы можете поместить базу данных в папку баз данных...
String fileName = "MySQLiteDB.db";
File file = getDatabasePath(fileName );
if (!file.exists()) {
if (!file.getParentFile().exists()) {
file.getParentFile().mkdir();
}
InputStream inputStream = getAssets().open(DATABASE_NAME);
OutputStream outputStream = new FileOutputStream(file);
byte[] buffer = new byte[1024 * 8];
int numOfBytesToRead;
while((numOfBytesToRead = inputStream.read(buffer)) > 0)
outputStream.write(buffer, 0, numOfBytesToRead);
inputStream.close();
outputStream.close();
}
db = SQLiteDatabase.openOrCreateDatabase(file, null);
Ответ 4
1. Make the SQLite database file.
If you don't have a sqlite manager I recommend you to download the opensource SQLite Database Browser available for Win/Linux/Mac. Make database file.
2. Use this database in your Android application.
Now put your database file in the "assets" folder of your project and create a Database Helper class by extending the SQLiteOpenHelper class
//Constructor
public Databasehelper(Context context)
{
super(context, DATABASE_NAME, null, DATABASE_VERSION);
this.myContext = context;
}
//Create a empty database on the system
public void createDatabase() throws IOException
{
boolean dbExist = checkDataBase();
if(dbExist)
{
Log.v("DB Exists", "db exists");
// By calling this method here onUpgrade will be called on a
// writeable database, but only if the version number has been
// bumped
//onUpgrade(myDataBase, DATABASE_VERSION_old, DATABASE_VERSION);
}
boolean dbExist1 = checkDataBase();
if(!dbExist1)
{
this.getReadableDatabase();
try
{
this.close();
copyDataBase();
}
catch (IOException e)
{
throw new Error("Error copying database");
}
}
}
//Check database already exist or not
private boolean checkDataBase()
{
boolean checkDB = false;
try
{
String myPath = DATABASE_PATH + DATABASE_NAME;
File dbfile = new File(myPath);
checkDB = dbfile.exists();
}
catch(SQLiteException e)
{
}
return checkDB;
}
//Copies your database from your local assets-folder to the just created empty database in the system folder
private void copyDataBase() throws IOException
{
String outFileName = DATABASE_PATH + DATABASE_NAME;
OutputStream myOutput = new FileOutputStream(outFileName);
InputStream myInput = myContext.getAssets().open(DATABASE_NAME);
byte[] buffer = new byte[1024];
int length;
while ((length = myInput.read(buffer)) > 0)
{
myOutput.write(buffer, 0, length);
}
myInput.close();
myOutput.flush();
myOutput.close();
}
//delete database
public void db_delete()
{
File file = new File(DATABASE_PATH + DATABASE_NAME);
if(file.exists())
{
file.delete();
System.out.println("delete database file.");
}
}
//Open database
public void openDatabase() throws SQLException
{
String myPath = DATABASE_PATH + DATABASE_NAME;
myDataBase = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READWRITE);
}
public synchronized void closeDataBase()throws SQLException
{
if(myDataBase != null)
myDataBase.close();
super.close();
}
public void onCreate(SQLiteDatabase db)
{
}
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
{
if (newVersion > oldVersion)
{
Log.v("Database Upgrade", "Database version higher than old.");
db_delete();
}
}
//добавьте общедоступные методы для вставки, получения, удаления и обновления данных в базе данных.
}
введите здесь код
ReferLink: http://androidtutorials60.blogspot.in/2013/03/1.html