GL_BOOK_5

Chapter 6 数据存储 持久化

Android 系统提供三种方式:文件存储 、 SharedPreference 存储以及数据库
当然还可以保存到SD卡中 没有上述三种方式 安全

文件存储 :
存:openFileOutput
FileOutputStream android.content.ContextWrapper.openFileOutput(String name, int mode)
mode :
Context.MODE_PRIVATE \ MODE_APPEND \ MODE_WORLD_WRITEABLE \ MODE_WORLD_READABLE
默认 MODE_PRIVATE 没有创建 有则覆盖旧有文件
MODE_APPEND 文件已存在就继续添加 没有就创建新的文件
后面两个 涉及安全泄露 已被在 4.2版本弃用
主要选择前两种

private void save() {
        String content = et.getText().toString().trim();
        FileOutputStream out = null;
        BufferedWriter writer = null;

        try {
            out = openFileOutput("savedfilename", Context.MODE_PRIVATE);
            writer = new BufferedWriter(new OutputStreamWriter(out));
            writer.write(content);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (writer != null) {
                    writer.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }

        }
    }

取 :
openFileInput

private String getSavedContent() {
        FileInputStream input  = null;
        BufferedReader reader  = null;
        StringBuilder content  = new StringBuilder();
        try {
            input  = openFileInput("savedfilename");
            reader = new BufferedReader(new InputStreamReader(input));
            String line  = "";
            while ((line = reader.readLine())!=null) {
                content.append(line);
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }finally{
            if (reader!=null) {
                try {
                    reader.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return content.toString();
    }
//========
    String content  = getSavedContent();
        if (!TextUtils.isEmpty(content)) {
            et.setText(content);
            et.setSelection(content.length());//光标迁移
        }

SharedPreferences 存储
SharedPreference文件的创建三种方式
在Context 下的 getSharedPreferences(name, mode)
在Activity 下的 getPreferences(mode)//默认该activity的类名
以及通过 PreferenceManager.getDefaultSharedPreferences(this);//当前包名为前缀

mSf = getSharedPreferences("mySFName", Context.MODE_MULTI_PROCESS);
//多线程操作同一个sf
mSf = getSharedPreferences("mySFName", Context.MODE_PRIVATE);
//自定义sf文件名
mSf = getPreferences(Context.MODE_PRIVATE);
//sf名  为 当前活动的类名
mSf = PreferenceManager.getDefaultSharedPreferences(this);
//sf 名 当前包名为前缀

SQLite 数据库存储]

public class MyDataBaseHelper extends SQLiteOpenHelper {

    public static final String CREATE_XXTABLE = "create table xx ("
            + "id integer primary key autoincrement, " 
            + "xxname text)";
    //integer 整型 // real 浮点 // text 文本类型 // blob 二进制类型 //
    public MyDataBaseHelper(Context context, String name,
            CursorFactory factory, int version) {
        super(context, name, factory, version);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        // TODO Auto-generated method stub
        db.execSQL(CREATE_XXTABLE );
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    }
}
//      SQLiteOpenHelper dbheHelper  = new MyDataBaseHelper(context, name, factory, version);
        SQLiteOpenHelper dbHelper  = new MyDataBaseHelper(this, "xx.db", null, 1);
        dbHelper.getWritableDatabase();//可读写 磁盘必须充足
        dbHelper.getReadableDatabase();//只读   磁盘已满 也可调用

SQLiteOpenHelper dbHelper  = new MyDataBaseHelper(this, "xx.db", null, 2);//执行onUpgrade()
SQLiteDatabase db = dbHelper.getWritableDatabase();
        ContentValues values = new ContentValues();

        values.put("ziduanming", "duiyingleixingdezhi");
        values.put("ziduanming1", 12);
        values.put("ziduanming2", 12.12);

        db.insert("xx", null, values);
//更新name为xxx的所有数据
        values.put("yaogengxindeziduanming","xindezhi");
        db.update("xx", values, "name = ?", new String[]{"nameduiyingdezhi"});
        //删除数据
        db.delete("xx", "id = ?", new String[]{"1"});
        //查询数据
//      Cursor cursor  = db.query(table, columns, selection, selectionArgs, groupBy, having, orderBy)
        Cursor cursor  = db.query("xx", null, null, null, null, null, null);
        if (cursor.moveToFirst()) {
            do {
                String name = cursor.getString(cursor.getColumnIndex("name"));
//              String name  = cursor.getString(cursor.getColumnIndexOrThrow("name"));
                double price  = cursor.getDouble(cursor.getColumnIndex("price"));
            } while (cursor.moveToNext());
        }
        cursor.close();
    //使用SQL操作数据库(结构化查询语言) Structured Query Language  CRUD 
        db.execSQL("insert into Book (name,author,pages,price) values(?,?,?,?)",new String[]{"myName","asen","121","48"});
        db.execSQL("update Book set price = ? where name = ?",new String[]{"92","myName"});
        db.execSQL("delete from Book where pages > ?",new String[]{"97"});
        db.rawQuery("select * from Book ", null);//除了查询数据时调用的是 SQLiteDatabase的rawQuery()方法,其他的操作方法都是调用的execSQL()方法
        db.beginTransaction();
        try {
            //DO something about db
            //db CURD

            db.setTransactionSuccessful();
        } catch (Exception e) {

        }finally{
            db.endTransaction();
        }
//  public static final String CREATE_STUDENT = 
//"create table Student (id integer primary key autoincrement,name //text,height real)";
    public static final String CREATE_STUDENT = "create table Student (id integer primary key autoincrement,name text,height real,school_id integer)";
    public static final String CREATE_SCHOOL = "create table School (id integer primary key autoincrement,name text,phone integer)";
    //integer 整型 // real 浮点 // text 文本类型 // blob 二进制类型 //
    public MyDataBaseHelper(Context context, String name,
            CursorFactory factory, int version) {
        super(context, name, factory, version);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(CREATE_STUDENT);
        db.execSQL(CREATE_SCHOOL);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        //注意 没有break 对应的不同版本 执行 不同的多个 语句 越是低的版本 升级到最新版 执行的语句越多
        switch (oldVersion) {
        case 1:
            db.execSQL(CREATE_SCHOOL);//从1版之后开始新建 school表
        case 2:
            db.execSQL("alter table Student add column school_id integer");//2版之前(1和2)创建student表是老的sql语句(被注释掉的 没有school_id这个字段) 2版之后开始插入新的字段
        default:
            break;
        }
    }
Python网络爬虫与推荐算法新闻推荐平台:网络爬虫:通过Python实现新浪新闻的爬取,可爬取新闻页面上的标题、文本、图片、视频链接(保留排版) 推荐算法:权重衰减+标签推荐+区域推荐+热点推荐.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值