我目前正在尝试使用我的Android手机访问我的数据库,但它不起作用。它确实可以在模拟器上运行。所以我想知道是否需要使用
将数据复制到手机的内存中try{
InputStream myInput = myContext.getAssets().open(DB_NAME);
// Path to the just created empty db
String outFileName = DB_PATH + DB_NAME;
//Open the empty db as the output stream
OutputStream myOutput = new FileOutputStream(outFileName);
//transfer bytes from the inputfile to the outputfile
byte[] buffer = new byte[1024];
int length;
while ((length = myInput.read(buffer))>0){
myOutput.write(buffer, 0, length);
}
//Close the streams
myOutput.flush();
myOutput.close();
myInput.close();
}catch(SQLiteException e){
另一个问题是我没有使用“SQLiteOpenHelper”,那么上面的方法仍然有效吗?我只是做了一个
private final String DB_NAME = "MemberData";
private final String TABLE_NAME = "MemberDB";
sampleDB = this.openOrCreateDatabase(DB_NAME, MODE_PRIVATE, null);
Cursor c = sampleDB.rawQuery("SELECT companyNameEng FROM " +
TABLE_NAME + " ORDER BY companyNameEng ASC", null);
答案 0 :(得分:0)
是的,您必须将db文件从apk复制到应用程序数据库目录(或您的应用程序可以访问的其他位置)。创建.apk文件时,assets目录实际上不是一个目录...它只是框架中的某些函数(getAssets()
)知道如何访问的数据。要允许其他期望实际路径工作的函数,您需要将数据复制到设备上的正确目录。
数据库的通常目的地是“data / data / your.package.name / databases /".
你的方法看起来会很好......它是标准的java io。 SQLiteOpenHelper更适合帮助您进行升级和创建新的dbs。我总是使用一个(永远不知道我是否会改变我的工作方式,即使我最初不需要它),但你当然不需要。