我在资产文件夹中有一个数据库文件,当用户安装此程序时,在第一次程序启动器中我将数据库从资产复制到数据库< / 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
);
答案 0 :(得分:0)
何时
super(context, DATABASE_NAME, null, DATABASE_VERSION, R.raw.ormlite_config);
被称为 data.db 已创建。这样onCreate
就不会打电话了。
你不应该把createDataBase
放在这里。
我认为您可以将其添加到 getWritableDatabase 或 getDao 功能。