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) {
}
}
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)private static String DB_NAME = "poems.sqlite";
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: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;
}
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();
}
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: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) {
}
}
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ẻ!myDatabase.open();
SQLiteDatabase database = myDatabase.getMyDatabase();
Have a nice day!
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óathanks so much
Trả lờiXóathanks so much
Trả lờiXóaBài viết hay lắm. Thank. :))
Trả lờiXóaB 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óaNhận xét này đã bị tác giả xóa.
Trả lờiXóacho mk xin demo bai nay voi diepvan2007@gmail.com
Trả lờiXóabạ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