Android 安装应用程序时创建初始SQLiteDatabase
我正在编写一个应用程序,显示有趣的事实(以及它们的来源)。用户可以逐个浏览这些事实 以下是我想到的设计:Android 安装应用程序时创建初始SQLiteDatabase,android,database,sqlite,Android,Database,Sqlite,我正在编写一个应用程序,显示有趣的事实(以及它们的来源)。用户可以逐个浏览这些事实 以下是我想到的设计: 在SQLiteDatabase中创建一个表,其中包含一个文本列,用于存储有趣的事实,另一个列用于存储其源。(不确定这是否是最好的方法,但我希望即使没有网络也能使用该应用程序) 我的问题是,当数据库最初在设备上创建时,我是否应该从代码中手动填充数据库,如以下pseodo代码:- @Override public void onCreate(SQLiteDatabase db) {
在SQLiteDatabase中创建一个表,其中包含一个文本列,用于存储有趣的事实,另一个列用于存储其源。(不确定这是否是最好的方法,但我希望即使没有网络也能使用该应用程序) 我的问题是,当数据库最初在设备上创建时,我是否应该从代码中手动填充数据库,如以下pseodo代码:-
@Override
public void onCreate(SQLiteDatabase db) {
//Create the table
//Populate the table
//Insert statement 1
//Insert statement 2
//Insert statement 3
...
//Insert statement 500
}
在安装应用程序时,一定有更好的方法来创建初始数据库吗 你确定你真的需要一个数据库吗?这难道不是给如此琐碎的事情增加了不必要的开销吗 你不能在代码中声明数组吗,或者我遗漏了什么?无论是在数据库中还是在代码中,它都会占用空间。db会增加一些开销,并且需要一些时间来加载,加上您的代码必须处理错误,等等 在代码中声明一个简单的数组不是更好吗?还是我错了什么明显的东西?(也许用户可以d/l一个新的数据库?但这比d/l一个新程序的开销要大得多吗?) 如果我偏离了方向,请解释(而不是否决)。我想帮忙
编辑:想必你已经有你的事实了?也许在文本文件中?您可以编写代码来解析它,并初始化和数组(或填充数据库)。它基本上应该是for循环的缩写。使用从SQLiteOpenHelper派生的类 我已经在我的博客www.xenonite.net上写了一些东西
public class myDatabase extends SQLiteOpenHelper
{
private static final String DB_NAME = "database.db";
private static final int DB_VERSION = 1;
public MyDatabase(Context context)
{
super(context, DB_NAME, null, DB_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db)
{
db.execSQL("CREATE TABLE tbl_test ( id INTEGER PRIMARY KEY AUTOINCREMENT, test TEXT NOT NULL )");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
{
db.execSQL("DROP TABLE IF EXISTS tbl_test");
onCreate(db);
}
}
你可以这样使用它
myDatabase db = new myDatabase(getApplicationContext());
sql = "INSERT INTO tbl_test (test) VALUES ('xyz')";
db.getWritableDatabase().execSQL(sql);
String sql = "SELECT id FROM tbl_test";
Cursor result = db.getWritableDatabase().rawQuery(sql, null);
int value;
while(result.moveToNext())
{
value = result.getInt(0);
}
在每次调用db时,都会调用myDatabase.onCreate(),因此将在第一次运行时创建数据库。更改表结构时,请实现onUpgrade()和increment DB_VERSIONHi,感谢您花时间回答这个问题。每个事实都有其来源。所以我想到了一个2列的表(3列包括id)。我希望跟踪id,以便用户下次访问应用程序时,它显示下一个事实,从它停止的地方开始,而不是再次显示第一个事实。我想我可以做一个二维数组,并跟踪索引号在首选项中的位置。不确定什么是最好的设计解决方案。希望我的回答有意义。我同意莱昂尼克斯的解决方案。你有些事实。如果它已经是一个文本表单(csv、xml等),您可以将该文件放在res/raw目录中,安装后可直接使用或填充数据库。