无法读取设备上部署的SQLite数据库

时间:2011-12-23 13:28:54

标签: android sqlite readonly

我正在开发一个Android应用程序,使用我已经创建的嵌入式sqlite数据库。 在我的设备上部署应用程序(HTC野火)时,我从assets文件夹中检索现有数据库并读取数据库中的数据。在这一点上一切都很好。 我面临的问题是,我在数据库中执行的所有操作(如添加,编辑或删除)都不起作用。看起来数据库处于只读模式,但是选择操作工作正常,我显示了我的列表。 拜托,我需要你的建议!

请参阅下面我用于创建数据库的代码:

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 :(得分:0)

您需要将数据库复制到/ data / data / packagename文件夹,请参阅

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

答案 1 :(得分:0)