Android操作db的坑

来源:互联网 发布:分身软件 编辑:程序博客网 时间:2024/09/21 09:25

Android 下操作在sd上db 

第一要复写个

第二: db文件表明有单引号

第三db文件下载时,记得多余字符影响。

文件存储的时候,会多出很多无用的字节, 
byte[] buffer = new byte[4 * 1024]; 
int len; 
while ((len=input.read(buffer))!= -1) { 
output.write(buffer,0,len); 
}



 DatabaseContext extends ContextWrapper{
    /**     * 构造函数     * @param    base 上下文环境     */    public DatabaseContext(Context base){        super(base);    }    /**     * 获得数据库路径,如果不存在,则创建对象对象     * @param    name     * @param    mode     * @param    factory     */    @Override    public File getDatabasePath(String name) {        //判断是否存在sd卡        boolean sdExist = android.os.Environment.MEDIA_MOUNTED.equals(android.os.Environment.getExternalStorageState());        if(!sdExist){//如果不存在,            Log.e("SD卡管理:", "SD卡不存在,请加载SD卡");            return null;        }        else{//如果存在            //获取sd卡路径            String dbDir=android.os.Environment.getExternalStorageDirectory().getAbsolutePath();            dbDir += "/stock";//数据库所在目录            String dbPath = dbDir+"/"+name;//数据库路径            //判断目录是否存在,不存在则创建该目录            File dirFile = new File(dbDir);            if(!dirFile.exists())                dirFile.mkdirs();            //数据库文件是否创建成功            boolean isFileCreateSuccess = false;            //判断文件是否存在,不存在则创建该文件            File dbFile = new File(dbPath);            if(!dbFile.exists()){                try {                    isFileCreateSuccess = dbFile.createNewFile();//创建文件                } catch (IOException e) {                    // TODO Auto-generated catch block                    e.printStackTrace();                }            }            else                isFileCreateSuccess = true;            //返回数据库文件对象            if(isFileCreateSuccess)                return dbFile;            else                return null;        }    }    /**     * 重载这个方法,是用来打开SD卡上的数据库的,android 2.3及以下会调用这个方法。     *     * @param    name     * @param    mode     * @param    factory     */    @Override    public SQLiteDatabase openOrCreateDatabase(String name, int mode,                                               CursorFactory factory) {        SQLiteDatabase result = SQLiteDatabase.openOrCreateDatabase(getDatabasePath(name), null);        return result;    }    /**     * Android 4.0会调用此方法获取数据库。     *     * @see ContextWrapper#openOrCreateDatabase(String, int,     *              CursorFactory,     *              DatabaseErrorHandler)     * @param    name     * @param    mode     * @param    factory     * @param     errorHandler     */    @Override    public SQLiteDatabase openOrCreateDatabase(String name, int mode, CursorFactory factory,                                               DatabaseErrorHandler errorHandler) {        SQLiteDatabase result = SQLiteDatabase.openOrCreateDatabase(getDatabasePath(name), null);        return result;    }
}
第二 : 

0 0