如何使用ORMLite资产中可用的数据库

时间:2016-03-09 07:07:01

标签: android ormlite

我在资产文件夹中有一个数据库文件,当用户安装此程序时,在第一次程序启动器中我将数据库从资产复制到数据库< / strong>的程序

这是我的代码:

private static final String DATABASE_NAME= "data.db";

public DatabaseHelper(Context context) {
    super(context, DATABASE_NAME, null, DATABASE_VERSION, R.raw.ormlite_config);
    this.myContext = context;
}

/************************************************
 * Suggested Copy/Paste Done
 ************************************************/

@Override
public void onCreate(SQLiteDatabase sqliteDatabase, ConnectionSource connectionSource) {
    createDataBase();
}

public void createDataBase(){
    boolean dbExist = checkDataBase();
    if(!dbExist){
        try {
            copyDataBase();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

private boolean checkDataBase(){
    SQLiteDatabase checkDB = null;
    try{
        String myPath = myContext.getDatabasePath(DATABASE_NAME).getPath();
        checkDB = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);
    }catch(SQLiteException e){
        e.printStackTrace();
    }

    if(checkDB != null){
        checkDB.close();
    }
    return checkDB != null;
}
private void copyDataBase() throws IOException{
    InputStream myInput = myContext.getAssets().open(DATABASE_NAME);
    String outFileName = myContext.getDatabasePath(DATABASE_NAME).getPath();
    File f = new File(outFileName);
    f.getParentFile().mkdirs();
    f.createNewFile();
    OutputStream myOutput = new FileOutputStream(f);

    byte[] buffer = new byte[1024];
    int length;
    while ((length = myInput.read(buffer))>0){
        myOutput.write(buffer, 0, length);
    }
    myOutput.flush();
    myOutput.close();
    myInput.close();
}

我检查设备中的数据库文件夹,看到它有 data.db 文件,但该文件没有表格。

我用来复制数据的代码已经运行。

为什么 data.db 错了?

UPDATED:

@DatabaseTable(tableName = "english")
public class Topic {
    @DatabaseField(generatedId = true, columnName = "id")
    private int id;
    @DatabaseField(columnName = "title")
    private String title;
    @DatabaseField(columnName = "question")
    private String question;
    @DatabaseField(columnName = "answer")
    private String answer;
    @DatabaseField(columnName = "audio_url")
    private String audioUrl;
    @DatabaseField(columnName = "local_url")
    private String localUrl;

    public Topic() {
    }
}
CREATE TABLE `english` (
    `id`    INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
    `title` NVARCHAR,
    `question`  NVARCHAR,
    `answer`    NVARCHAR,
    `audio_url` NVARCHAR,
    `local_url` NVARCHAR
);

1 个答案:

答案 0 :(得分:0)

何时

super(context, DATABASE_NAME, null, DATABASE_VERSION, R.raw.ormlite_config);

被称为 data.db 已创建。这样onCreate就不会打电话了。 你不应该把createDataBase放在这里。

我认为您可以将其添加到 getWritableDatabase getDao 功能。