Невозможно прочитать базу данных SQLite, развернутую на устройстве - PullRequest
1 голос
/ 23 декабря 2011

Я разрабатываю приложение на Android, используя встроенную базу данных sqlite, которую я предварительно создал.Развертывая приложение на моем устройстве (HTC Wildfire), я извлекаю существующую базу данных из папки ресурсов и считываю данные в базе данных.На данный момент все в порядке.Проблема, с которой я сталкиваюсь, заключается в том, что все операции, которые я выполняю в базе данных, такие как «Добавить», «Редактировать» или «Удалить», не работают.Кажется, что база данных находится в режиме только для чтения, но операция выбора работает нормально, и у меня отображается мой список.Пожалуйста, мне нужен ваш совет!

Смотрите ниже код, который я использую для создания базы данных:

public class DatabaseHelper extends SQLiteOpenHelper {

private static final String DATABASE_NAME = "mydb.sqlite";
private static final int DATABASE_VERSION = 1;  
private static String DATABASE_PATH = "";

public DatabaseHelper(Context context) {
    super(context,DATABASE_NAME,null,DATABASE_VERSION);     
    try {
        copyDataBase(context);
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }       
    DATABASE_PATH = context.getDatabasePath(DATABASE_NAME).getAbsolutePath();
}

private void copyDataBase(Context context) throws IOException{       
    //Open your local db as the input stream
    InputStream input = context.getAssets().open(DATABASE_NAME);        
    //Open the empty db as the output stream
    OutputStream output = new FileOutputStream(DATABASE_PATH); 
    //transfer bytes from the input file to the output file
    byte[] buffer = new byte[1024];
    int length;
    while ((length = input.read(buffer))>0){
        output.write(buffer, 0, length);
    }
    //Close the streams
    output.flush();
    output.close();
    input.close();
}   

@Override
public void onCreate(SQLiteDatabase db) {       
    db = SQLiteDatabase.openDatabase(DATABASE_PATH, null, SQLiteDatabase.OPEN_READWRITE);
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {      
    Log.w(DatabaseHelper.class.getName(), "New version : " + newVersion);
    db.execSQL("DROP TABLE IF EXISTS person");
    db.execSQL("DROP TABLE IF EXISTS destiny");     
    db.execSQL("DROP TABLE IF EXISTS intention");
    db.execSQL("DROP TABLE IF EXISTS innerself");
    onCreate(db);
}   

}

С уважением.

Ответы [ 2 ]

0 голосов
/ 23 декабря 2011

Может быть, вы забыли совершить операции с базой данных?Пример: http://www.higherpass.com/Android/Tutorials/Accessing-Data-With-Android-Cursors/3/

0 голосов
/ 23 декабря 2011

вам нужно скопировать базу данных в папку / data / data / packagename, см.

http://www.reigndesign.com/blog/using-your-own-sqlite-database-in-android-applications/

...