Cách thêm file .sqlite hay .db vào project android trong android studio.

Đầu tiên mình sẽ tạo sẵn 1 file cơ sở dữ liệu bên ngoài có tên poems.sqlite và thêm vào project android như các hình sau:


1) Click vào "Project" như trong hình và copy paste file poems.sqlite vào folder assets như hình sau:




Xong bước copy file. Giờ mình sẽ viết 1 class để mở nó:
class có tên MyDatabaseAdapter  kế thừa lại class SQLiteOpenHelper ;
sau khi extends lại class SQLiteOpenHelper  các bạn override lại các phương thức mà nó tự động yêu cầu nhé rồ để đó.

public class MyDatabaseAdapter extends SQLiteOpenHelper {

    private Context context;

    private String DB_PATH = "data/data/com.example.trungtrttrtrtrtrttrt.mynavmenu/databases/";
    private static String DB_NAME = "poems.sqlite";
    private SQLiteDatabase myDatabase;

    public MyDatabaseAdapter(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {

    }

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

    }
}

Giờ mình sẽ giải thích cho các bạn từng đoạn code một.

Đầu tiên là khai báo biến:

private String DB_PATH = "data/data/com.example.trungtrttrtrtrtrttrt.mynavmenu/";
private static String DB_NAME = "poems.sqlite";
Các bạn chú ý trong biến DB_PATH cụm "com.example.trungtrttrtrtrtrttrt.mynavmenu" các bạn thay bằng tên package của các bạn. Để biết tên package của mình thì các bạn mở file AndroidManifest.xml ra và chú ý vào thẻ khai báo <manifest> có đoạn "package=..." trong dấu 3 chấm chính là tên package của các bạn.(xem hình sau để thấy rõ hơn)


còn DB_NAME chính là tên file cơ sở dữ liệu của mình.


Tiếp theo mình viết 1 hàm kiểm tra xem file cơ sở dữ liệu của mình (poems.sqlite) đã có sẵn trong folder trong DB_PATH hay chưa, nếu chưa có mình sẽ copy nó vào, nếu có rồi thì mình sẽ đọc luôn mà không copy lại lần nữa.


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("Databse doesn't exist!");
        }

        return checkdb;
    }
Vì lần đầu tiên mở app lên trong folder data chưa có file csdl của mình nên mình phải tiến hành copy nó vào:

private void copyDatabase() throws IOException {

        AssetManager dirPath = context.getAssets();

        InputStream myinput = context.getAssets().open(DB_NAME);

        String outFileName = DB_PATH + DB_NAME;

        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();
    }

Các bạn chú ý trong khai báo:
OutputStream myOutput = new       

các bạn đừng quên thay tên package của mình vào nhé!

OK xong các hàm quan trọng.
Và đây là toàn bộ code file MyDatabaseAdapter .java, các bạn chú ý đọc và hiểu code:

public class MyDatabaseAdapter extends SQLiteOpenHelper {

    private Context context;

    private String DB_PATH = "data/data/com.example.trungtrttrtrtrtrttrt.mynavmenu/databases/";
    private static String DB_NAME = "poems.sqlite";
    private SQLiteDatabase myDatabase;

    public MyDatabaseAdapter(Context context)
    {
        super(context, DB_NAME, null, 1);

        this.context = context;
        boolean dbexist = checkdatabase();

        if(dbexist)
        {
        }
        else
        {
            System.out.println("Database doesn't exist!");

            createDatabse();
        }
    }

    public void createDatabse() {

        this.getReadableDatabase();

        try
           {
               copyDatabase();
           } catch (IOException e) {
               e.printStackTrace();
           }
    }


    public SQLiteDatabase getMyDatabase()
    {
        return myDatabase;
    }


    private void copyDatabase() throws IOException {

        AssetManager dirPath = context.getAssets();

        InputStream myinput = context.getAssets().open(DB_NAME);

        String outFileName = DB_PATH + DB_NAME;

        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();
    }

    public void open()
    {
        String myPath = DB_PATH + DB_NAME;
        myDatabase = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READWRITE);
    }

    public synchronized void close()
    {
        myDatabase.close();
        super.close();
    }

    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("Databse doesn't exist!");
        }

        return checkdb;
    }

    public MyDatabaseAdapter(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {

    }

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

    }
}
Đây là code ví dụ khi gọi MyDatabaseAdapter:

MyDatabaseAdapter myDatabase = new MyDatabaseAdapter(this);
myDatabase.open();
SQLiteDatabase database = myDatabase.getMyDatabase();

Nhận xét

Bài đăng phổ biến từ blog này

Hướng dẫn cài đặt NAS Buffalo

Phần 3. Cài đặt Mediatomb cho Nas buffalo