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) {
}
}
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)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(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();
}
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: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) {
}
}
MyDatabaseAdapter myDatabase = new MyDatabaseAdapter(this);
myDatabase.open();
SQLiteDatabase database = myDatabase.getMyDatabase();
myDatabase.open();
SQLiteDatabase database = myDatabase.getMyDatabase();
Nhận xét
Đăng nhận xét