Android系统。无法打开复制到SD卡的数据库

时间:2012-04-20 14:05:40

标签: android sqlite

如果你能帮助我,我将非常感激。 我的问题是: 我的应用程序用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())

这显示了数据库的大小,这意味着文件实际被复制

由于 吉姆

1 个答案:

答案 0 :(得分:0)

对我来说,您的代码在模拟器和手机上都可以正常运行。我打赌你的问题在于你的SQLite浏览器。例如,SQLite Database Browser v2.0是为SQLite v2设计的; Android使用SQLite v3格式。尝试使用Android SDK中包含的SQLite3命令行工具打开复制的数据库。