Skip to content Skip to sidebar Skip to footer

Reading SQLITE Database From Android Memory

I have created an sqlite database on a Java application and have pushed it to my android. I want to read this database (probably write into it later too). Most of the tutorials I h

Solution 1:

You must copy the db from assets to your apps storage area (or another accessible location) on the device before you can use it. You cannot use it directly out of the .apk file.

An example of how to go about it:

public class DBAdapter { 

// DB info 
public static final String MAIN_DATABASE_NAME = "yourDB"; 
public static String MAIN_DB_PATH = "/data/data/your.package.name/databases/"; 
public static final int MAIN_DATABASE_VERSION = 1; 

// database control 
private DatabaseHelper mDbHelper; 
private static SQLiteDatabase mDb; 
private static Context mCtx; 

private static class DatabaseHelper extends SQLiteOpenHelper { 
    DatabaseHelper(Context context, String dbname, int dbversion) { 
        super(context, dbname, null, dbversion); 
        if (checkDataBase(dbname)) { 
            openDataBase(dbname); 
        } else { 
            try { 
                this.getReadableDatabase(); 
                copyDataBase(dbname); 
                this.close(); 
                openDataBase(dbname); 
            } catch (IOException e) { 
                throw new Error("Error copying database"); 
            } 
            Toast.makeText(context, 
                    "Initial " + dbname + " database has been created", 
                    Toast.LENGTH_LONG).show(); 
        } 
    } 

    @Override 
    public void onCreate(SQLiteDatabase db) { 
    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
    } 
} 

public DBAdapter(Context ctx) { 
    DBAdapter.mCtx = ctx; 
} 

public DBAdapter open(String dbname, int dbversion) throws SQLException { 
    mDbHelper = new DatabaseHelper(mCtx, dbname, dbversion); 
    mDb = mDbHelper.getWritableDatabase(); 
    return this; 
} 

public void close() { 
    mDbHelper.close(); 
} 

private static void copyDataBase(String dbname) throws IOException { 
    InputStream myInput = mCtx.getAssets().open(dbname); 
    String outFileName = MAIN_DB_PATH + dbname; 
    OutputStream myOutput = new FileOutputStream(outFileName); 
    byte[] buffer = new byte[1024]; 
    int length; 
    while ((length = myInput.read(buffer)) > 0) { 
        myOutput.write(buffer, 0, length); 
    } 
    myOutput.flush(); 
    myOutput.close(); 
    myInput.close(); 
} 

private static boolean checkDataBase(String dbname) { 
    SQLiteDatabase checkDB = null; 
    boolean exist = false; 
    try { 
        String db = MAIN_DB_PATH + dbname; 
        checkDB = SQLiteDatabase.openDatabase(db, null, 
                SQLiteDatabase.OPEN_READONLY); 
    } catch (SQLiteException e) { 
        Log.v("db log", "database does't exist"); 
    } 
    if (checkDB != null) { 
        exist = true; 
        checkDB.close(); 
    } 
    return exist; 
} 

private static void openDataBase(String dbname) throws SQLException { 
    String dbPath = MAIN_DB_PATH + dbname; 
    mDb = SQLiteDatabase.openDatabase(dbPath, null, 
            SQLiteDatabase.OPEN_READWRITE); 
} 
} 

Post a Comment for "Reading SQLITE Database From Android Memory"