我正在尝试打开一个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。
答案 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)
哦,亲爱的,我第一次创建数据库时似乎对我的交易做了些蠢事。他们开始筑巢,但并未全部关闭。这将教会我不要正确使用我的循环。