将sqlite数据保存到手机上

时间:2012-09-30 14:37:01

标签: android sqlite database-connection

我目前正在尝试使用我的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);

1 个答案:

答案 0 :(得分:0)

是的,您必须将db文件从apk复制到应用程序数据库目录(或您的应用程序可以访问的其他位置)。创建.apk文件时,assets目录实际上不是一个目录...它只是框架中的某些函数(getAssets())知道如何访问的数据。要允许其他期望实际路径工作的函数,您需要将数据复制到设备上的正确目录。

数据库的通常目的地是“data / data / your.package.name / databases /".

你的方法看起来会很好......它是标准的java io。 SQLiteOpenHelper更适合帮助您进行升级和创建新的dbs。我总是使用一个(永远不知道我是否会改变我的工作方式,即使我最初不需要它),但你当然不需要。