Android:SQLite数据库在打开预先存在的数据库时删除所有行

时间:2010-12-20 05:09:21

标签: android sqlite

我正在尝试打开一个SQLite数据库,用新行更新它。麻烦的是,打开数据库似乎删除了它中的所有行。这是我的代码:

    String sdPath = Environment.getExternalStorageDirectory() + "/myApp";
    String databasePath = sdPath + "/myApp.db";
    File file = new File( databasePath );

    if( file.exists() )
    {
        Log.w( getClass().getSimpleName() , "myApp Database size: " + file.length() );
        database = SQLiteDatabase.openOrCreateDatabase( file, null );
        Log.w( getClass().getSimpleName() , "myApp Database size: " + file.length() );
        Log.w( getClass().getSimpleName() , "myApp Database opened" );
    }
    else
    {
        File directory = new File( sdPath );
        directory.mkdir();
        Log.w( getClass().getSimpleName() , "Creating myApp Database" );
        database = SQLiteDatabase.openOrCreateDatabase( file, null );
        Log.w( getClass().getSimpleName() , "myApp Database opened" );
        database.execSQL( DATABASE_CREATE_TABLE_OBJECT );
        database.execSQL( DATABASE_CREATE_TABLE_ZONE );
        database.execSQL( DATABASE_CREATE_TABLE_OBJECT_ZONE );
        database.execSQL( DATABASE_CREATE_TABLE_POINT );
        database.execSQL( DATABASE_CREATE_INDEX_POINT );
        database.execSQL( DATABASE_CREATE_INDEX_ZONE );
    }

在我的两个输出语句中,第一个在打开文件之前告诉我文件的大小,然后在打开之后,文件大小总是返回到大约13KB。我做错了什么?

编辑:我应该提一下,我正在写这个,也不是Android API等级7。

2 个答案:

答案 0 :(得分:0)

替换此......

    String sdPath = Environment.getExternalStorageDirectory() + "/myApp";
    String databasePath = sdPath + "/myApp.db";
    File file = new File( databasePath );

有了......

private File myAppDir = null;
private File databaseFile = null;

...

// Automatically creates /mnt/sdcard/.../myApp folder if it doesn't already exist
if (myAppDir == null)
    myAppDir = new File(getExternalFilesDir(null).getAbsolutePath());

if (databaseFile == null)
    databaseFile = new File(myAppDir, "/myApp.db");

然后将其与if / else代码一起使用......

if (databaseFile.exists())
{
    ...
}
else
{
    ...
}

但是从'else'块中移除这两行 ...

File directory = new File( sdPath );
directory.mkdir();

答案 1 :(得分:0)

哦,亲爱的,我第一次创建数据库时似乎对我的交易做了些蠢事。他们开始筑巢,但并未全部关闭。这将教会我不要正确使用我的循环。