当前位置: 首页 > news >正文

java android持久化数据

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();}
}

相关文章:

  • c#内存泄露的原因和解决办法
  • 全新电脑如何快速安装nvm,npm,pnpm
  • 批量将文件夹名称、文件夹路径提取到 Excel 清单
  • git在IDEA中使用技巧
  • RabbitMQ消息的可靠性
  • 腾讯云golang一面
  • Project ERROR: liblightdm-qt5-3 development package not found问题的解决方法
  • 基于 Python 和 OpenCV 技术的疲劳驾驶检测系统(2.0 全新升级,附源码)
  • 双向链表中间插入节点,删除节点
  • Trae CN 使用入门指南
  • 【uniapp-兼容性处理】swiper在iOS上偶发出现后几张图片白屏情况
  • Vue使用axios实现:上传文件、下载文件
  • .NET Core DI(依赖注入)的生命周期及应用场景
  • React 更新state中的对象
  • Doris 中 Compaction 问题的深度剖析与解决方案
  • linux编译adbd工具使用
  • Python + Playwright:规避常见的UI自动化测试反模式
  • Spark-SQL核心编程
  • 基于PyQt5和OpenCV的传统图像分割应用UI程序
  • 100个有用的AI工具 之 生成透明图像LayerDiffuse
  • 寒武纪陈天石:公司的产品力获得了行业客户广泛认可,芯片市场有望迎来新增量需求
  • 扶桑谈|从石破茂“越菲行”看日本周边外交布局战略新动向
  • 茅台回应“茅台1935脱离千元价位带竞争”:愿与兄弟酒企共同培育理性消费生态
  • 城事 | 重庆新增热门打卡地标,首座熊猫主题轨交站亮相
  • 江西省司法厅厅长张强已任江西省委政法委分管日常工作副书记
  • 母亲节|写给妈妈