Để sử dụng cơ sở dữ liệu đóng gói (tức là một cơ sở dữ liệu được bao gồm dưới dạng nội dung) để sử dụng đầy đủ, cơ sở dữ liệu phải được giải nén (tự động) và sao chép vào vị trí thích hợp (thường gặp nhất là data/data/<package_name>/databases/<database_name>
ở đâu <package_name>
và <database_name>
sẽ theo tên gói của Ứng dụng và tên cơ sở dữ liệu một cách tương ứng).
Để "đóng gói", cơ sở dữ liệu phải được bao gồm trong thư mục nội dung và tốt nhất là trong thư mục cơ sở dữ liệu ( bắt buộc nếu sử dụng SQLiteAssetHelper mà không sửa đổi ).
Ngoài ra, việc sao chép phải được thực hiện trước khi thực sự mở cơ sở dữ liệu, sau đó nó có thể được mở.
Sử dụng SQLiteAssetHelper
-
Bước đầu tiên là tạo cơ sở dữ liệu được đóng gói, điều này sẽ không được đề cập đến vì có rất nhiều công cụ có sẵn. Đối với ví dụ này, cơ sở dữ liệu là một tệp có tên test.db
-
Sau đó, bạn nên tạo dự án của mình trong trường hợp này Dự án được gọi là DBtest với Domian Compnay là com.DBtest vì vậy tên gói là dbtest.com.dbtest .
-
Bước tiếp theo là sao chép cơ sở dữ liệu vào thư mục nội dung.
- Tạo nội dung trong src / main thư mục, nếu nó chưa tồn tại.
- Tạo thư mục cơ sở dữ liệu "" trong ** nội dung thư mục, nếu nó chưa tồn tại.
-
Sao chép tệp cơ sở dữ liệu ( test.db trong ví dụ này) vào thư mục cơ sở dữ liệu.
-
Giai đoạn tiếp theo là thiết lập dự án để sử dụng SQLiteAssetHelper bằng cách đưa nó vào build.gradle của Ứng dụng .
- Chỉnh sửa build.gradle trong Ứng dụng thư mục.
- Thêm dòng
implementation 'com.readystatesoftware.sqliteasset:sqliteassethelper:2.0.1'
trong phần phụ thuộc. - Nhấp vào Đồng bộ hoá ngay bây giờ
-
Tạo một lớp là lớp con của lớp SQLiteAssethelper mới / hiện có sẵn. Đối với bài tập này, nó sẽ được gọi là DBHelper .
- Nhấp chuột phải vào MainActivity lớp java, chọn Mới và sau đó chọn Lớp Java.
- Trong trường Tên, đầu vào DBHelper .
- Trong trường SuperClass, hãy bắt đầu nhập SQLiteAsset (bây giờ lớp SQliteAssetHelper sẽ có thể chọn được), vì vậy hãy chọn nó. Nó phải được giải quyết là:-
- Nhấp vào OK.
-
Tạo phương thức khởi tạo cho lớp DBHelper dọc theo các dòng của
:-
public class DBHelper extends SQLiteAssetHelper {
public static final String DBNAME = "test.db"; //<<<< must be same as file name
public static final int DBVERSION = 1;
public DBHelper(Context context) {
super(context,DBNAME,null,DBVERSION);
}
}
-
Tạo một phiên bản của DBHelper và sau đó truy cập cơ sở dữ liệu.
- Lưu ý để dễ dàng hơn một lớp khác có tên là CommonSQLiteUtilities , như được sao chép từ Có phương pháp nào hỗ trợ giải quyết các sự cố SQLite phổ biến không?
-
Tạo một phiên bản của lớp DBHelper bằng cách sử dụng thứ gì đó dọc theo dòng của
-
DBHelper mDBHlpr = new DBHelper(this);
-
-
sử dụng CommonSQLiteUtilities, cơ sở dữ liệu được truy cập bằng:-
-
CommonSQLiteUtilities.logDatabaseInfo(mDBHlpr.getWritableDatabase());
-
-
MainActivity đầy đủ đã trở thành
:-
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
DBHelper mDBHlpr = new DBHelper(this);
CommonSQLiteUtilities.logDatabaseInfo(mDBHlpr.getWritableDatabase());
}
}
Kết quả là ghi nhật ký chạy thành công:-
04-11 06:12:55.091 1401-1401/dbtest.com.dbtest W/SQLiteAssetHelper: copying database from assets...
database copy complete
04-11 06:12:55.123 1401-1401/dbtest.com.dbtest I/SQLiteAssetHelper: successfully opened database test.db
04-11 06:12:55.127 1401-1401/dbtest.com.dbtest D/SQLITE_CSU: DatabaseList Row 1 Name=main File=/data/data/dbtest.com.dbtest/databases/test.db
Database Version = 1
Table Name = mytable Created Using = CREATE TABLE mytable (
_id INTEGER PRIAMRY KEY,
mydata TEXT,
inserted INTEGER DEFAULT CURRENT_TIMESTAMP
)
Table = mytable ColumnName = _id ColumnType = INTEGER PRIAMRY KEY Default Value = null PRIMARY KEY SEQUENCE = 0
Table = mytable ColumnName = mydata ColumnType = TEXT Default Value = null PRIMARY KEY SEQUENCE = 0
Table = mytable ColumnName = inserted ColumnType = INTEGER Default Value = CURRENT_TIMESTAMP PRIMARY KEY SEQUENCE = 0
Table Name = android_metadata Created Using = CREATE TABLE android_metadata (locale TEXT)
Table = android_metadata ColumnName = locale ColumnType = TEXT Default Value = null PRIMARY KEY SEQUENCE = 0
- Hai dòng đầu tiên là từ
SQliteAssethelper
, phần còn lại là từlogDatabaseInfo
phương thức củaCommonSQLiteUtilities
lớp học. - Trong các lần chạy con, cơ sở dữ liệu sẽ không được sao chép vì nó đã tồn tại.