0

助けていただければ幸いです。私の問題は次のとおりです。私のアプリケーションは2つのテーブルでデータベースを作成します。このデータベースをバックアップしてsdにコピーしようとしています。これはエミュレーターでは完全に正常に機能しますが、実際のデバイスではファイルはコピーされますが、SQLiteブラウザーで開くことはできません。

コピーのコードはこちら

 try {
        File sd = Environment.getExternalStorageDirectory();
        File data = Environment.getDataDirectory();

        if (sd.canWrite()) {
            String currentDBPath = getDatabasePath("fieldworker").getAbsolutePath();
            Toast.makeText(getApplicationContext(), currentDBPath, 2).show();
            String backupDBPath = "fieldworker";
            File currentDB = new File(currentDBPath);
            File backupDB = new File(sd, backupDBPath);

            if (currentDB.exists()) {
                FileChannel src = new FileInputStream(currentDB).getChannel();
                Toast.makeText(getApplicationContext(), Long.toString(src.size()), 2).show();
                FileChannel dst = new FileOutputStream(backupDB).getChannel();
                dst.transferFrom(src, 0, src.size());
                src.close();
                dst.close();
            }
            else
            {
                Toast.makeText(getApplicationContext(), "Doesnt exist", 2).show();
            }
        }
    } catch (Exception e) {
    }

テーブルを作成するためのコード

public DBSqlLiteHelper(Context context)
{
    super(context, DATABASE_NAME, null, 1);
}
@Override
public void onCreate(SQLiteDatabase db)
{
    db.execSQL(TABLE_WORKERS_CREATE);
    db.execSQL(TABLE_PERSONS_CREATE);
}
@Override
public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {
    // TODO Auto-generated method stub
    arg0.execSQL("DROP TABLE IF EXISTS " + TABLE_PERSONS);
    arg0.execSQL("DsROP TABLE IF EXISTS " + TABLE_WORKERS);
    onCreate(arg0);

}

 Toast.makeText(getApplicationContext(), Long.toString(src.size())

これは、ファイルが実際にコピーされることを意味するデータベースのサイズを示しています

ありがとうジム

4

1 に答える 1

0

私にとって、あなたのコードはエミュレーターと電話の両方でうまく実行されます。私はあなたの問題があなたのSQLiteブラウザにあるに違いない。たとえば、SQLite Database Browser v2.0は、SQLitev2用に設計されています。AndroidはSQLitev3フォーマットを使用しています。Android SDKに含まれているSQLite3コマンドラインツールを使用して、コピーしたデータベースを開いてみてください。

于 2012-04-20T15:29:05.217 に答える