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/";
    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("data/data/com.example.trungtrttrtrtrtrttrt.mynavmenu/poems.sqlite");

        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       FileOutputStream("data/data/com.example.trungtrttrtrtrtrttrt.mynavmenu/poems.sqlite");

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/";
    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("data/data/com.example.trungtrttrtrtrtrttrt.mynavmenu/poems.sqlite");

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

Chúc các bạn 1 ngày làm việc vui vẻ!
Have a nice day!
Share on Google Plus

About Phạm Quốc Đại

Mình thích màu xanh, yêu gấu trúc, thích cái nắng gió volga. Người yêu mình xinh nhất quả đất, hehe. :D
    Blogger Comment
    Facebook Comment

8 nhận xét:

  1. Bạn ơi mail cho mình 1 project demo về cái này được không. Cảm ơn rất nhiều ! haminhhien.pdu@gmail.com

    Trả lờiXóa
  2. Bài viết hay lắm. Thank. :))

    Trả lờiXóa
  3. B gửi cho M cái demo này đk k? E của M là hongnhungcntt96@gmail.com. Cảm ơn b nhiều

    Trả lờiXóa
  4. Nhận xét này đã bị tác giả xóa.

    Trả lờiXóa
  5. cho mk xin demo bai nay voi diepvan2007@gmail.com

    Trả lờiXóa
  6. bạn cho mình hỏi mysql có khác sqlite không ạ, xin bạn chỉ để mình dùng cách import data vào bằng cách dùng mysql với. mình xinh cảm ơn

    Trả lờiXóa