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);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(CREATE_TABLE_USERS);
}
@Override
public 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;
@Override
protected 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);
}
@Override
protected 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 {
@Insert
void insert(User user);
@Update
void update(User user);
@Delete
void 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;
@Override
protected 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();
}
}