You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

按SugarORM官方文档保存Book至数据库报错,如何创建BOOK表?

解决SugarORM中‘no such table: BOOK’的问题

别着急,这个问题大多是因为SugarORM的初始化配置没做全,或者实体类的基础设置不到位,我帮你一步步排查解决:

1. 确保你的Book实体类配置正确

SugarORM要求实体类必须继承SugarRecord(这是最直接的表映射方式),另外必须保留无参构造函数,框架需要用它来实例化对象。给你一个标准的Book类示例:

import com.orm.SugarRecord;

public class Book extends SugarRecord {
    // 必须存在的无参构造函数
    public Book() {}

    // 自定义业务字段
    private String title;
    private String author;
    private int pages;

    // 方便创建对象的带参构造函数(可选)
    public Book(String title, String author, int pages) {
        this.title = title;
        this.author = author;
        this.pages = pages;
    }

    // Getter和Setter方法(按需添加)
    public String getTitle() { return title; }
    public void setTitle(String title) { this.title = title; }
    public String getAuthor() { return author; }
    public void setAuthor(String author) { this.author = author; }
    public int getPages() { return pages; }
    public void setPages(int pages) { this.pages = pages; }
}

默认情况下,SugarORM会把类名转成大写作为表名,所以Book类对应的就是BOOK表,不需要额外加注解;如果想自定义表名,给类加上@Table(name = "BOOK")注解即可。

2. 检查AndroidManifest.xml的核心配置(重中之重)

你必须在AndroidManifest.xml的<application>标签内添加SugarORM的初始化配置,否则框架无法创建数据库和表:

<application
    android:name="com.orm.SugarApp" <!-- 若有自定义Application,让它继承SugarApp即可 -->
    ...>

    <!-- SugarORM 基础配置 -->
    <meta-data android:name="DATABASE" android:value="my_book_db.db" />
    <meta-data android:name="VERSION" android:value="1" />
    <meta-data android:name="QUERY_LOG" android:value="true" /> <!-- 可选,开启查询日志方便调试 -->
    <meta-data android:name="DOMAIN_PACKAGE_NAME" android:value="com.your_package.model" /> <!-- 替换成Book类所在的包名 -->

    ...
</application>

注意点:

  • 如果你的项目有自定义Application类,不要直接用com.orm.SugarApp,而是让你的Application继承SugarApp,比如:
public class MyApplication extends SugarApp {
    @Override
    public void onCreate() {
        super.onCreate();
        // 你的其他初始化逻辑
    }
}

然后在Manifest里把android:name改成你的MyApplication类的全路径。

  • DOMAIN_PACKAGE_NAME必须是实体类(比如Book)所在的包名,SugarORM会扫描这个包下的类来自动创建对应的数据表。

3. 排查常见的坑

  • 清除应用数据:如果之前已经运行过应用,旧的空数据库可能已经存在,SugarORM不会自动重建表。去手机应用设置里找到你的APP,清除数据后重新运行。
  • 检查数据库版本:如果后续修改了实体类(比如新增字段),需要把VERSION的值加1,SugarORM才会执行数据库升级操作。
  • 确认依赖正确:确保你已经在build.gradle中添加了SugarORM的依赖,比如(根据你使用的版本调整):
implementation 'com.github.satyan:sugar:1.5'

4. 测试保存逻辑

配置完成后,用下面的代码测试保存Book对象:

Book myBook = new Book("Android进阶指南", "李四", 350);
myBook.save();

这时候SugarORM应该会自动创建BOOK表并插入数据了。

内容的提问来源于stack exchange,提问作者jobs

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 04:34:29