我正在构建一个Android测验应用程序,该应用程序需要在本地使用数据库。 SQLite似乎正是我所需要的。
该数据库将包含问题和答案(这些问题和答案将由我手动输入,而不是通过使用该应用程序),以及一些存储用户得分,进度等的表。
我的问题是如何创建表并将数据从其他来源(或通过INSERT INTO查询插入)手动导入Android的嵌入式SQLite?在线教程仅教我如何从头开始并通过应用程序界面来实现它。
答案 0 :(得分:2)
您可以通过多种方式执行此操作。
您可以在资产文件夹中创建填充有问题和答案的数据库作为资产。然后,该先前存在的数据库将被复制一次,也许利用SQLiteAssetHelper来管理数据库的副本。
有许多可用的SQLite管理类型工具,例如SQlite studio,用于SQlite的数据库浏览器,Navicat,可用于创建数据库和加载数据。然后,您只需将保存的文件复制到资产文件夹中(对于SQLiteAssethelper,请注意该文件必须位于资产/数据库文件夹中)。
限制/复杂性/缺点是问题和答案随时间变化(例如,添加了更多问题和答案)。
另一种方法可能是定义数据库结构并将问题作为外部文件提供,而不是读取并用于将问题插入数据库的预先存在的数据库(作为资产)。通过一些考虑/计划,它可以相对简单地处理正在进行的问题。
另一种方法是在集中式服务器(Firebase可能适用于此)而不是资产文件上提问。该应用程序将连接到服务器并将问题加载到数据库中。
答案 1 :(得分:2)
dependencies { compile 'com.readystatesoftware.sqliteasset:sqliteassethelper:+' }
在步骤2中创建的数据库将是单个文件,例如( Quiz.db )
现在将 Quiz.db 复制到您的项目 assets / databases / 文件夹
创建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);
}
}
创建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();
}
}
}
最后使用它
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();