Android: база данных SQLite удаляет все строки при открытии уже существующей базы данных - PullRequest
0 голосов
/ 20 декабря 2010

Я пытаюсь открыть базу данных 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 );
    }

В моих двух выходных операторах первый сообщает мне размер файла перед его открытием, а затем после открытия размер файла всегда возвращается примерно к 13 КБ. Что я делаю не так?

РЕДАКТИРОВАТЬ: я должен упомянуть, что я пишу это, ни Android API уровня 7.

Ответы [ 2 ]

0 голосов
/ 22 декабря 2010

О боже, кажется, я сделал что-то глупое с моими транзакциями, когда я впервые создал базу данных. Они начали гнездиться, но не все закрылись. Это научит меня не правильно использовать свои петли.

0 голосов
/ 20 декабря 2010

Заменить это ...

    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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...