1. SQLite 数据库(Android 内置)
1.1 创建数据库帮助类
public class DatabaseHelper extends SQLiteOpenHelper {private static final String DATABASE_NAME = "MyDatabase.db";private static final int DATABASE_VERSION = 1;// 表名和列名public static final String TABLE_USERS = "users";public static final String COLUMN_ID = "_id";public static final String COLUMN_NAME = "name";public static final String COLUMN_EMAIL = "email";// 创建表的SQL语句private static final String CREATE_TABLE_USERS = "CREATE TABLE " + TABLE_USERS + " (" +COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +COLUMN_NAME + " TEXT NOT NULL, " +COLUMN_EMAIL + " TEXT);";public DatabaseHelper(Context context) {super(context, DATABASE_NAME, null, DATABASE_VERSION);}@Overridepublic void onCreate(SQLiteDatabase db) {db.execSQL(CREATE_TABLE_USERS);}@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {db.execSQL("DROP TABLE IF EXISTS " + TABLE_USERS);onCreate(db);}
}
1.2 数据库操作示例
public class DatabaseOperations {private DatabaseHelper dbHelper;private SQLiteDatabase database;public DatabaseOperations(Context context) {dbHelper = new DatabaseHelper(context);}public void open() throws SQLException {database = dbHelper.getWritableDatabase();}public void close() {dbHelper.close();}// 插入数据public long insertUser(String name, String email) {ContentValues values = new ContentValues();values.put(DatabaseHelper.COLUMN_NAME, name);values.put(DatabaseHelper.COLUMN_EMAIL, email);return database.insert(DatabaseHelper.TABLE_USERS, null, values);}// 查询所有用户public Cursor getAllUsers() {String[] columns = {DatabaseHelper.COLUMN_ID,DatabaseHelper.COLUMN_NAME,DatabaseHelper.COLUMN_EMAIL};return database.query(DatabaseHelper.TABLE_USERS, columns, null, null, null, null, null);}// 更新用户public int updateUser(long id, String name, String email) {ContentValues values = new ContentValues();values.put(DatabaseHelper.COLUMN_NAME, name);values.put(DatabaseHelper.COLUMN_EMAIL, email);return database.update(DatabaseHelper.TABLE_USERS, values, DatabaseHelper.COLUMN_ID + " = " + id, null);}// 删除用户public void deleteUser(long id) {database.delete(DatabaseHelper.TABLE_USERS, DatabaseHelper.COLUMN_ID + " = " + id, null);}
}
1.3 在Activity中使用
public class MainActivity extends AppCompatActivity {private DatabaseOperations dbOperations;private ListView listView;private SimpleCursorAdapter adapter;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);dbOperations = new DatabaseOperations(this);dbOperations.open();listView = findViewById(R.id.listView);// 添加一些示例数据dbOperations.insertUser("张三", "zhangsan@example.com");dbOperations.insertUser("李四", "lisi@example.com");displayUsers();}private void displayUsers() {Cursor cursor = dbOperations.getAllUsers();String[] fromColumns = {DatabaseHelper.COLUMN_NAME, DatabaseHelper.COLUMN_EMAIL};int[] toViews = {R.id.textName, R.id.textEmail};adapter = new SimpleCursorAdapter(this, R.layout.user_item, cursor, fromColumns, toViews, 0);listView.setAdapter(adapter);}@Overrideprotected void onDestroy() {super.onDestroy();dbOperations.close();}
}
2. Room 持久化库(推荐)
2.1 添加依赖
在 build.gradle
文件中添加:
implementation "androidx.room:room-runtime:2.4.0"
annotationProcessor "androidx.room:room-compiler:2.4.0"
2.2 创建实体类
@Entity(tableName = "users")
public class User {@PrimaryKey(autoGenerate = true)public int id;@ColumnInfo(name = "name")public String name;@ColumnInfo(name = "email")public String email;// 构造函数、getter和setter
}
2.3 创建DAO接口
@Dao
public interface UserDao {@Insertvoid insert(User user);@Updatevoid update(User user);@Deletevoid delete(User user);@Query("SELECT * FROM users")List<User> getAllUsers();@Query("SELECT * FROM users WHERE id = :userId")User getUserById(int userId);
}
2.4 创建数据库类
@Database(entities = {User.class}, version = 1)
public abstract class AppDatabase extends RoomDatabase {public abstract UserDao userDao();private static volatile AppDatabase INSTANCE;public static AppDatabase getDatabase(final Context context) {if (INSTANCE == null) {synchronized (AppDatabase.class) {if (INSTANCE == null) {INSTANCE = Room.databaseBuilder(context.getApplicationContext(),AppDatabase.class, "app_database").build();}}}return INSTANCE;}
}
2.5 在Activity中使用
public class MainActivity extends AppCompatActivity {private AppDatabase db;private UserDao userDao;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);db = AppDatabase.getDatabase(this);userDao = db.userDao();// 在后台线程执行数据库操作new Thread(() -> {// 插入用户User user = new User();user.name = "王五";user.email = "wangwu@example.com";userDao.insert(user);// 查询用户List<User> users = userDao.getAllUsers();runOnUiThread(() -> {// 更新UI});}).start();}
}