0

現在、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){

もう 1 つの問題は、「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);
4

1 に答える 1

0

はい、db ファイルを apk からアプリ データベース ディレクトリ (またはアプリがアクセスできる別の場所) にコピーする必要があります。assets ディレクトリは、実際には .apk ファイルが作成されたときのディレクトリではありません...フレームワーク ( getAssets()) 内の特定の関数がアクセス方法を知っているデータにすぎません。実際のパスが機能することを期待する他の機能を許可するには、デバイス上の適切なディレクトリにデータをコピーする必要があります。

データベースの通常の宛先は「data/data/your.package.name/databases/」です。

あなたのメソッドはうまくいくように見えます...それは標準のJava ioです。SQLiteOpenHelper は、アップグレードや新しいデータベースの作成を支援するためのものです。私は常に 1 つを使用します (最初は必要なくても、やり方を変更するかどうかはわかりません) が、必ずしもそうする必要はありません。

于 2012-09-30T14:46:26.003 に答える