Android自动SQL插入

时间:2014-08-17 11:26:53

标签: java android database sqlite

如何创建数据库表并在应用程序启动时填充一些数据?我有一个带有create table和insert语句的init_sql.sql文件,但只执行CREATE TABLE所以我有我的表但它是空的。

init_sql.sql
CREATE TABLE IF NOT EXISTS Event (
   id INTEGER PRIMARY KEY NOT NULL,
   time TEXT NOT NULL,
   name TEXT NOT NULL,
   description TEXT NOT NULL,
   additional_info TEXT,
   stage CHAR(50)
);

INSERT INTO Event (name, time, description, stage)
VALUES ('13:30 - 14:30', 'koncert Blue tone Band', 
 'Mladá, energická jazzfunková kapela Blue tone Band Vás pobaví a rozhýbe zaručeně každého absolventa!', 'mainStage');

我通过发出sqlite3 myDb.db < init_sql.sql验证了此文件是否正确,这会创建表并插入数据。

我的SQLHelper看起来像这样

public class SQLiteHelper extends SQLiteOpenHelper {

public static final String DB_NAME = "alumni.db";

private Context context;

public SQLiteHelper(Context context) {
    super(context, DB_NAME, null, 6);
    this.context = context;
}

@Override
public void onCreate(SQLiteDatabase db) {
    InputStream stream = context.getResources().openRawResource(R.raw.init_sql);
    try {
        String sqlString = convertStreamToString(stream);
        db.execSQL(sqlString);
    } catch (IOException ex) {
        //TODO
    }
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    db.execSQL("DROP TABLE IF EXISTS Event;");
    onCreate(db);
}

我在我的DAO课程中使用它,如new SQLiteHelper(context).getWritableDatabase();

所以任何想法我可能做错了什么?

1 个答案:

答案 0 :(得分:2)

execSql执行单个SQL命令。

如果要执行多个命令,则必须单独执行它们。

更好的想法可能是使用应用程序发布预先创建的数据库。 (在这种情况下,请考虑使用SQLiteAssetHelper。)