2011-12-23 4 views
1

Я разрабатываю приложение на android, используя встроенную базу данных sqlite, которую я предварительно создала. При развертывании приложения на моем устройстве (Wildfire от HTC) я извлекаю существующую базу данных из папки активов и считываю данные в базе данных. На данный момент все в порядке. Проблема, с которой я столкнулась, связана с тем, что вся работа, которую я делаю в базе данных, например Add, Edit или Remove, не работает. Кажется, что база данных находится в режиме readonly, но операция select работает нормально, и я получаю свой список. Пожалуйста, мне нужна ваша консультация!Невозможно прочитать базу данных SQLite, развернутую на устройстве

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

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); 
} 

}

С уважением.

+0

любые ошибки? можете ли вы продемонстрировать, как получить экземпляр базы данных? используете ли вы getWritableDatabase() или getReadableDatabase()? – hovanessyan

+0

Я использую функцию getWritableDatabase(). –

ответ

Смежные вопросы