1

任何人都可以解释为什么:

db.execSQL("DROP TABLE IF EXISTS Definition;");
db.execSQL("CREATE TABLE Definition (txt TEXT);");

效果很好,但是

db.execSQL("DROP TABLE IF EXISTS Definition; CREATE TABLE Definition (txt TEXT);");

什么都不做(在这个 exec 之后不存在表“定义”)。

(db 是 SQLiteDatabase 的实例)

PS 在 iOS 中,两种变体的功能完全相同。以及在 SQLite 管理器(Firefox 插件)中。

4

1 回答 1

4

SQLite 不想一次执行多个命令。我将所有命令写入一个文本文件,读取行直到“;” 遇到并在循环中一一执行,直到readLine为null;

List<String> sqlExpressions = new ArrayList<String>();
try {
    // read table creation sql script from the file
    InputStream inStream = mContext.getResources().getAssets().open("createTables.sql");

    BufferedReader reader = new BufferedReader(new InputStreamReader(inStream, "UTF-8"));
    String line = null;
    while((line = reader.readLine()) != null) {
        sb.append(line + "\n");
        if(line.lastIndexOf(";") > 0) {
            sqlExpressions.add(sb.toString());
    sb = new StringBuilder();
        }
    }
reader.close();
} catch (Exception e) {
   Log.d("DB_Creation", e.getMessage());
}

for (String sqlExpr : sqlExpressions) {
     database.execSQL(sqlExpr);
}
于 2012-08-03T16:37:32.090 回答