Các khóa học qua video:Lập trình C Java C# SQL Server
PHP HTML5-CSS3-JavaScriptLưu dữ liệu vào cơ sở dữ liệu là lý tưởng để lặp lại hoặc cấu trúc dữ liệu, chẳng hạn như thông tin liên hệ. Bài viết này giả định rằng bạn đã quen thuộc với cơ sở dữ liệu SQL nói chung và giúp bạn bắt
đầu với cơ sở dữ liệu SQLite trên Android. Các API bạn sẽ cần sử dụng cơ sở dữ liệu trên Android có sẵn trong gói android.database.sqlite . Show Thận trọng: Mặc dù các API này rất mạnh, nhưng chúng ở mức độ khá thấp và đòi hỏi nhiều thời gian và công sức để sử dụng:
Vì những lý do này, chúng tôi khuyên bạn nên sử dụng Room Persistence Library làm lớp trừu tượng để truy cập thông tin trong cơ sở dữ liệu SQLite của ứng dụng. Xác định một lược đồ và hợp đồngMột trong những nguyên tắc chính của cơ sở dữ liệu SQL là lược đồ: một khai báo chính thức về cách tổ chức cơ sở dữ liệu. Lược đồ được phản ánh trong các câu lệnh SQL mà bạn sử dụng để tạo cơ sở dữ liệu của mình. Bạn có thể thấy hữu ích khi tạo một lớp đồng hành, được gọi là lớp hợp đồng (contract), trong đó chỉ định rõ ràng bố cục của lược đồ của bạn theo cách có hệ thống và tự viết tài liệu. Một lớp contract là một bộ chứa các hằng số xác định tên cho các URI, bảng và cột. Lớp hợp đồng cho phép bạn sử dụng cùng các hằng số trên tất cả các lớp khác trong cùng một gói. Điều này cho phép bạn thay đổi tên cột ở một nơi và để nó lan truyền trong toàn bộ mã của bạn. Một cách tốt để tổ chức một lớp contract là đặt các định nghĩa toàn cầu cho toàn bộ cơ sở dữ liệu của bạn ở cấp độ gốc của lớp. Sau đó tạo một lớp bên trong cho mỗi bảng. Mỗi lớp bên trong liệt kê các cột của bảng tương ứng.
Ví dụ: contract sau đây xác định tên bảng và tên cột cho một bảng duy nhất đại diện cho nguồn cấp RSS: public final class FeedReaderContract { // To prevent someone from accidentally instantiating the contract class, // make the constructor private. private FeedReaderContract() {} /* Inner class that defines the table contents */ public static class FeedEntry implements BaseColumns { public static final String TABLE_NAME = "entry"; public static final String COLUMN_NAME_TITLE = "title"; public static final String COLUMN_NAME_SUBTITLE = "subtitle"; } } Tạo cơ sở dữ liệu bằng trình trợ giúp SQLKhi bạn đã xác định giao diện cơ sở dữ liệu của mình, bạn nên triển khai các phương thức tạo và duy trì cơ sở dữ liệu và bảng. Dưới đây là một số câu lệnh điển hình tạo và xóa bảng: private static final String SQL_CREATE_ENTRIES = "CREATE TABLE " + FeedEntry.TABLE_NAME + " (" + FeedEntry._ID + " INTEGER PRIMARY KEY," + FeedEntry.COLUMN_NAME_TITLE + " TEXT," + FeedEntry.COLUMN_NAME_SUBTITLE + " TEXT)"; private static final String SQL_DELETE_ENTRIES = "DROP TABLE IF EXISTS " + FeedEntry.TABLE_NAME; Giống như các tệp bạn lưu trên bộ nhớ trong của thiết bị, Android lưu trữ cơ sở dữ liệu của bạn trong thư mục riêng của ứng dụng. Dữ liệu của bạn được bảo mật, vì theo mặc định, khu vực này không thể truy cập được vào các ứng dụng khác hoặc người dùng. Lớp
Để sử dụng Ví dụ: đây là một triển khai public class FeedReaderDbHelper extends SQLiteOpenHelper { // If you change the database schema, you must increment the database version. public static final int DATABASE_VERSION = 1; public static final String DATABASE_NAME = "FeedReader.db"; public FeedReaderDbHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } public void onCreate(SQLiteDatabase db) { db.execSQL(SQL_CREATE_ENTRIES); } public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // This database is only a cache for online data, so its upgrade policy is // to simply to discard the data and start over db.execSQL(SQL_DELETE_ENTRIES); onCreate(db); } public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion) { onUpgrade(db, oldVersion, newVersion); } } Để truy cập cơ sở dữ liệu của bạn, khởi tạo lớp con của FeedReaderDbHelper dbHelper = new FeedReaderDbHelper(getContext()); Đưa thông tin vào cơ sở dữ liệuChèn dữ liệu vào cơ sở dữ liệu bằng cách truyền một đối tượng // Gets the data repository in write mode SQLiteDatabase db = dbHelper.getWritableDatabase(); // Create a new map of values, where column names are the keys ContentValues values = new ContentValues(); values.put(FeedEntry.COLUMN_NAME_TITLE, title); values.put(FeedEntry.COLUMN_NAME_SUBTITLE, subtitle); // Insert the new row, returning the primary key value of the new row long newRowId = db.insert(FeedEntry.TABLE_NAME, null, values); Đối số đầu tiên Đối số thứ hai cho biết framework phải làm gì trong
trường hợp Các phương thức Đọc thông tin từ cơ sở dữ liệuĐể đọc từ cơ sở dữ liệu, hãy sử dụng phương thức SQLiteDatabase db = dbHelper.getReadableDatabase(); // Define a projection that specifies which columns from the database // you will actually use after this query. String[] projection = { BaseColumns._ID, FeedEntry.COLUMN_NAME_TITLE, FeedEntry.COLUMN_NAME_SUBTITLE }; // Filter results WHERE "title" = 'My Title' String selection = FeedEntry.COLUMN_NAME_TITLE + " = ?"; String[] selectionArgs = { "My Title" }; // How you want the results sorted in the resulting Cursor String sortOrder = FeedEntry.COLUMN_NAME_SUBTITLE + " DESC"; Cursor cursor = db.query( FeedEntry.TABLE_NAME, // The table to query projection, // The array of columns to return (pass null to get all) selection, // The columns for the WHERE clause selectionArgs, // The values for the WHERE clause null, // don't group the rows null, // don't filter by row groups sortOrder // The sort order ); Đối số thứ ba và thứ tư ( Để xem một hàng bằng con trỏ, hãy sử dụng một trong các phương thức dịch chuyển List itemIds = new ArrayList<>(); while(cursor.moveToNext()) { long itemId = cursor.getLong( cursor.getColumnIndexOrThrow(FeedEntry._ID)); itemIds.add(itemId); } cursor.close(); Xóa thông tin khỏi cơ sở dữ liệuĐể xóa các hàng khỏi một bảng, bạn cần cung cấp các tiêu chí lựa chọn
xác định các hàng cho phương thức // Define 'where' part of query. String selection = FeedEntry.COLUMN_NAME_TITLE + " LIKE ?"; // Specify arguments in placeholder order. String[] selectionArgs = { "MyTitle" }; // Issue SQL statement. int deletedRows = db.delete(FeedEntry.TABLE_NAME, selection, selectionArgs); Giá trị trả về của phương thức Cập nhật cơ sở dữ liệuPhương thức Cập nhật bảng kết hợp mệnh đề SQLiteDatabase db = dbHelper.getWritableDatabase(); // New value for one column String title = "MyNewTitle"; ContentValues values = new ContentValues(); values.put(FeedEntry.COLUMN_NAME_TITLE, title); // Which row to update, based on the title String selection = FeedEntry.COLUMN_NAME_TITLE + " LIKE ?"; String[] selectionArgs = { "MyOldTitle" }; int count = db.update( FeedReaderDbHelper.FeedEntry.TABLE_NAME, values, selection, selectionArgs); Giá trị trả về của phương thức Kết nối cơ sở dữ liệu bền bỉVì việc gọi @Override protected void onDestroy() { dbHelper.close(); super.onDestroy(); } Gỡ lỗi cơ sở dữ liệu của bạnSDK Android bao gồm
một tool shell |