2

在首次执行时构建应用程序的数据库架构的最佳实践是什么?

换句话说,我试图找出的是:

SQLite 不支持以逗号分隔的查询作为一个语句批处理执行。如何替换它以使代码保持未来的证明?(我不认为自己将所有创建语句都按顺序链接在 tx.executeSQL("") 中,这会将我的代码变成一段可怕的 cr*p)。

4

1 回答 1

2

在本机代码以及 Sencha/Phonegap 中,我所做的是使用我所指的 DatabaseHelper 类。在该类中,您可以看到数据库的版本:

public DataBaseHelper(Context context) {
    super(context, DB_NAME, null, 2);
    this.myContext = context;
}

public void createDataBase() throws IOException {
    boolean dbExist = checkDataBase();
    if (dbExist) {
        // do nothing - database already exist
         openDataBase();
            int cVersion = myDataBase.getVersion();
            if(cVersion != 2){
                onUpgrade(myDataBase, myDataBase.getVersion(), 2);}
            close();
    } ....}

    @Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        this.getReadableDatabase();
        try{
        db.execSQL("ADD SQL QUERY HERE TO ADD TABLE");
}
        catch(Exception e){}
    }


private boolean checkDataBase() {
        SQLiteDatabase checkDB = null;
        try {
            String myPath = DB_PATH + DB_NAME;
            checkDB = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READWRITE);
            } catch (SQLiteException e) {
            // database does't exist yet.
            }
        if (checkDB != null) {
            checkDB.close();
        }
        return checkDB != null ? true : false;
    }

虽然这很乏味,但它可以让您的数据库保持未来的证明,并且在运行时调用查询。这涵盖了您的两个需求。

我希望这有帮助 :)

于 2012-08-23T01:32:18.890 回答