【问题标题】:Create and insert data into SQLite manually手动创建数据并将其插入 SQLite
【发布时间】:2019-02-22 03:36:35
【问题描述】:

我正在构建一个需要在本地使用数据库的 Android 测验应用程序。 SQLite 似乎是我需要的。

数据库将包含问题和答案(由我手动输入,而不是使用应用程序),以及一些存储用户分数、进度等的表格。

我的问题是如何手动创建表并将数据从其他来源(或使用 INSERT INTO 查询插入)导入 Android 的嵌入式 SQLite?在线教程只教我如何从头开始并通过应用程序界面进行操作...

【问题讨论】:

  • 您可以像执行 SELECT 一样从 Java 代码执行 DML 语句(INSERT、UPDATE 等)。请搜索如何在 Android 中使用 SQLite。
  • 我会使用 Room 持久化库并以 JSON 格式导入数据。
  • 在您的PC上创建数据库,然后作为资产嵌入到应用程序中,并在应用程序首次启动时将其提取到数据库目录
  • @VladyslavMatviienko 辉煌。请发表您的评论作为答案。
  • 不够详细,无法回答。可能有人想扩展它并作为答案发布。我不介意有人做。

标签: android sqlite


【解决方案1】:

有多种方法可以做到这一点。

  • 您可以创建填充了问题和答案的数据库作为资产文件夹中的资产。然后将这个预先存在的数据库复制一次,可能使用SQLiteAssetHelper 来管理数据库的副本。

    • 有许多可用的 SQLite 管理类型工具,例如 SQlite studio、DB Browser for SQlite、Navicat,可用于创建数据库和加载数据。然后,您只需将保存的文件复制到 assets 文件夹中(注意 SQLiteAssethelper 文件需要位于 assets/databases 文件夹中)。

    • 限制/复杂性/缺点是问题和答案是否随时间变化(例如,添加了更多问题和答案)。

  • 另一种方法是定义数据库结构并将问题作为外部文件提供,而不是预先存在的数据库(作为资产)读取并用于将问题插入数据库。通过一些考虑/计划,这可以相对简单地处理持续存在的问题。

  • 另一种方法是在集中式服务器(Firebase 可能适用于此)而不是资产文件上提出问题。该应用程序将连接到服务器并将问题加载到数据库中。

【讨论】:

  • 非常感谢您的详细回答。
【解决方案2】:
  1. 添加Android sqlite asset helper作为项目依赖
依赖{ 编译'com.readystatesoftware.sqliteasset:sqliteassethelper:+' }
  1. 使用任何 SQLite 数据库管理器,例如 SQLite Studio

  2. ,在您的 PC 上创建一个数据库(包含所有必需的表)
  3. 在第 2 步中创建的数据库将是单个文件,例如 (Quiz.db)

  4. 现在将 Quiz.db 复制到您的项目 assets/databases/ 文件夹

  5. 创建DataBaseOpenHelper

    public class DatabaseOpenHelper extends SQLiteAssetHelper {
    private static final String DATABASE_NAME = "Quiz.db";
    private static final int DATABASE_VERSION = 1;
    
    public DatabaseOpenHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    
    }
    

    }

  6. 创建DataBaseAccess

    public class DatabaseAccess {
    
    private SQLiteOpenHelper openHelper;
    private SQLiteDatabase database;
    private static DatabaseAccess instance;
    
    /**
     * Private constructor to aboid object creation from outside classes.
     *
     * @param context
     */
    private DatabaseAccess(Context context) {
        this.openHelper = new DatabaseOpenHelper(context);
    }
    
    /**
     * Return a singleton instance of DatabaseAccess.
     *
     * @param context the Context
     * @return the instance of DabaseAccess
     */
    public static DatabaseAccess getInstance(Context context) {
        if (instance == null) {
            instance = new DatabaseAccess(context);
        }
        return instance;
    }
    
    /**
     * Open the database connection.
     */
    public void openDatabase() {
    
        this.database = openHelper.getWritableDatabase();
    
    
    }
    
    public SQLiteDatabase getWritableDatabase(){
    
        return openHelper.getWritableDatabase();
    
    }
    
    public SQLiteDatabase getReadabelDataBase()
    {
        return openHelper.getReadableDatabase();
    }
    
    
    
    /**
     * Close the database connection.
     */
    public void closeDatabase() {
        if (database != null) {
            this.database.close();
        }
    }
    

    }

  7. 终于用上了

    DatabaseAccess databaseAccess = DatabaseAccess.getInstance(context);
    databaseAccess.openDatabase();
    String query = "select * from  Questions order by QuestionID asc";
    Cursor cursor = databaseAccess.getWritableDatabase().rawQuery(query, null);
    // handle results here
    
    databaseAccess.closeDatabase();
    

【讨论】:

  • 感谢您的回复!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-15
  • 2018-11-25
  • 2018-11-05
  • 1970-01-01
  • 1970-01-01
  • 2011-08-05
相关资源
最近更新 更多