手动创建数据并将其插入SQLite

时间:2018-09-18 07:09:40

标签: android sqlite

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

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

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

2 个答案:

答案 0 :(得分:2)

您可以通过多种方式执行此操作。

  • 您可以在资产文件夹中创建填充有问题和答案的数据库作为资产。然后,该先前存在的数据库将被复制一次,也许利用SQLiteAssetHelper来管理数据库的副本。

    • 有许多可用的SQLite管理类型工具,例如SQlite studio,用于SQlite的数据库浏览器,Navicat,可用于创建数据库和加载数据。然后,您只需将保存的文件复制到资产文件夹中(对于SQLiteAssethelper,请注意该文件必须位于资产/数据库文件夹中)。

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

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

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

答案 1 :(得分:2)

  1. 添加Android sqlite asset helper作为项目依赖项

    dependencies {
       compile 'com.readystatesoftware.sqliteasset:sqliteassethelper:+'
    }

  1. 使用SQLite Studio

  2. 之类的任何SQLite数据库管理器在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();