创建数据库与表
通过SQLiteOpenHelper
创建或升级数据库,定义表结构(如CREATE TABLE
语句)。
插入数据
使用SQLiteDatabase
的insert()
方法或执行INSERT
SQL语句。
ContentValues values = new ContentValues(); values.put("name", "张三"); values.put("age", 25); database.insert("user", null, values);
事务处理
批量插入时建议使用事务,保证原子性:
database.beginTransaction(); try { // 多次插入操作 database.setTransactionSuccessful(); } catch (Exception e) { // 回滚事务 } finally { database.endTransaction(); }
定义实体类
使用@Entity
注解标记表结构,字段对应数据库列。
@Entity(tableName = "user") public class User { @PrimaryKey(autoGenerate = true) public int id; public String name; public int age; }
创建DAO接口
定义数据访问方法,如@Insert
插入操作。
@Dao public interface UserDao { @Insert void insertUser(User user); }
插入数据
通过UserDao
实例调用插入方法:
User user = new User(); user.name = "李四"; user.age = 30; userDao.insertUser(user);
获取Content Resolver
通过getContentResolver()
获取系统内容提供者。
ContentResolver resolver = getContentResolver();
构建插入数据
使用ContentValues
封装键值对,调用insert()
方法。
ContentValues values = new ContentValues(); values.put("name", "王五"); values.put("age", 28); Uri uri = resolver.insert(ContactsContract.CONTENT_URI, values);
问题 | 解决方案 |
---|---|
插入数据后查询不到 | 检查表名、字段名是否匹配;确认insert 方法是否成功调用(如返回-1 表示失败)。 |
主线程操作数据库导致卡顿 | 使用AsyncTask 或ExecutorService 在子线程执行数据库操作。 |
Room实体类字段类型不匹配 | 确保字段类型与数据库支持类型一致(如int 对应INTEGER )。 |
AndroidManifest.xml
中声明权限(如WRITE_EXTERNAL_STORAGE
)。SQLiteOpenHelper
的onUpgrade()
方法处理数据库升级逻辑。解答:
解答: