2010-06-22 44 views
1

我正在编写一个显示有趣事实(以及它们来自的源)的应用程序。用户可以逐一浏览事实。安装应用程序时创建初始SQLiteDatabase

这是我想到的设计:
在SQLiteDatabase中创建一个表,其中存储fun-fact的文本列和存储其来源的第二列。 (不知道这是最好的方式去做,但我希望应用程序即使没有网络)

我的问题是,当数据库最初在设备上创建时,我应该手动填充数据库代码,像这样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 

} 

安装应用程序时,当然必须有一个更好的方法来创建初始数据库?

回答

2

你确定你确实需要数据库吗?这不仅仅是增加了不必要的开销,如此微不足道的东西?

难道你不能只是在你的代码中声明数组,或者我错过了什么?无论是在数据库还是在您的代码中,它都占用了空间。数据库会添加一些开销,并且vious?会花费一些时间来加载,再加上你的代码必须处理错误等。

Woudl你不会更好用代码中声明的简单数组吗?还是我误解了一些明显的东西? (也许用户可以d/l一个新的数据库?但是比d/ling一个新程序的开销要大得多吗?)

如果我不喜欢,请解释(而不是downvoting)。我试图帮助


编辑:大概你已经有你的事实soemwhere?也许在一个文本文件?你可以编写代码来解析并初始化和数组(或填充数据库)。它应该bascially是一个简短的循环。

+0

嗨,感谢您花时间回答这个问题。每个事实都有一个源代码。所以我想到了一个2列表(3列包括id)。我希望跟踪该ID,以便下次用户访问该应用程序时,它会显示下一个事实,即从停止的位置开始,而不是第一个事实。我想我可以做一个二维数组,并跟踪偏好设置中的索引号。不知道什么是最好的设计解决方案。希望我的回答有道理。 – OceanBlue 2010-06-22 00:36:19

+2

我同意LeonixSolutions。你在某个地方有你的事实。如果它已经是一个文本格式(csv,xml,不管),那么你可以把这个文件放在res/raw目录下,当你的应用程序被安装直接使用或者填充你的数据库时它就可以使用。 – 2010-06-22 01:44:42

+0

太棒了!谢谢。 – OceanBlue 2010-06-22 23:15:34

1

使用来自SQLiteOpenHelper

我已经写某事obout这在我的博客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()并增加DB_VERSION

相关问题