SQLite&&SharedPreferences&&IO读写Sdcard学习笔记

SQLite

轻量级的、嵌入式的、关系型数据库

Android、IOS等广泛使用的的数据库系统

SQLite数据库之中可以方便的使用SQL语句,实现数据的增加、修改、删除、查询等操作

SQLiteOpenHelper:负责创建、打开、更新、关闭数据库和创建数据表

SQLiteDataBase:执行SQL语句、对数据表的增删改查

存储文件名,数据将保存在/data/data/程序的包名称/databases/xxxx.db中

使用SQLiteDataBase存储数据

  1. 1.    打开或创建test.db数据库 

SQLiteDatabase db = openOrCreateDatabase("test.db", Context.MODE_PRIVATE, null); 

db.execSQL("DROP TABLE IF EXISTS person"); 

  1. 2.    创建表  person

db.execSQL("CREATE TABLE person (_id INTEGER PRIMARY KEY AUTOINCREMENT, _name VARCHAR, _age SMALLINT)"); 

  1. 3.    插入数据 

//方法【一】

db.execSQL("INSERT INTO person VALUES (NULL, ?, ?)", new Object[]{"mar", 1}); 

//方法【二】ContentValues以键值对的形式存放数据 

ContentValues cv = new ContentValues(); 

cv.put("_name","joy"); 

cv.put("_age", 2); 

db.insert("person", null, cv);  //插入ContentValues中的数据 

  1. 4.    修改数据 【键值对的方式】

cv = new ContentValues(); 

cv.put("_age", 35); 

db.update("person", cv, "name = ?", new String[]{"joy"}); 

  1. 5.    查询数据

//方法【一】 rawQuery

Cursor c = db.rawQuery("SELECT * FROM person WHERE age >= ?", new String[]{"33"}); 

//方法【二】执行query方法

Cursor c=db.query("users", new String[]{"_id","_name","_pwd"},

              "_name=?",new String[]{"user01"},null,null,null);

while (c.moveToNext()) { 

      int id = c.getInt(c.getColumnIndex("_id")); 

      String name = c.getString(c.getColumnIndex("_name")); 

      int age = c.getInt(c.getColumnIndex("_age")); 

      Log.d("db", "_id=>" + id + ", name=>" + name + ", age=>" + age); 

c.close();//关闭结果集

  1. 6.    删除数据 

db.delete("person", "age < ?", new String[]{"35"});//

db.delete("Test","WHERE _id="+0,null);

db.execSQL("delete from 表名 where 条件");

 

  1. 7.    关闭当前数据库 

db.close(); 

  1. 8.    删除数据库  test.db

deleteDatabase("test.db");

SharedPreferences

一种轻量级的数据保持方式,以键值对的方式将数据存入的xml文件中,通过key从文件中取出数据

获取SharedPreferences的两种方式:

  1. 调用Context对象的getSharedPreferences()方法
  2. 调用Activity对象的getPreferences()方法

两种方式的区别:

  • 调用Context对象的getSharedPreferences()方法获得的SharedPreferences对象可以被同一应用程序下的其他组件共享.
  • 调用Activity对象的getPreferences()方法获得的SharedPreferences对象只能在该Activity中使用.

SharedPreferences sp=super.getSharedPreferences("app_param", Context.MODE_PRIVATE);

存储文件名,数据将保存在/data/data/base package/shared_prefs/app_param.xml中

定义文件的操作模式

  1. 当前应用操作:              Context.MODE_PRIVATE

为默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的内容

  1. 当前应用操作,追加模式:Context.MODE_APPEND

模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件.

  1. 能被其他应用读:           Context.MODE_WORLD_READABLE
  2. 能被其他应用写:           Context.MODE_WORLD_WRITEABLE

 

读写SD卡

使用SharedPreferences可以方便的完成数据的存储功能,但是其只能保存一些很简单的数据,如果想存储更多类型的数据,则可以使用文件的存储操作

实现步骤:

  1. 1.    加入读写SD卡权限

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

  1. 2.    判断SD卡是否存在【无论是读还是写,都要判断】

Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED

  1. 3.    读写文件

  存入数据---putXXX(key,value)

SharedPreferences sp=super.getSharedPreferences("app_param", Context.MODE_PRIVATE);

SharedPreferences.Editor editor=sp.edit();

editor.putString("use","tom");

editor.putInt("age", 1); //默认值 1

editor.commit();

  取出数据----getXXX(key,default)

SharedPreferences sp=super.getSharedPreferences("app_param", Context.MODE_PRIVATE);

sp.getInt("use",0);//默认值 0

 

IO操作实现Sdcard存取操作

存数据

private int save(String fileName,NewsItem item){

       Log.d("io","save()");

       int ret=0;

       //Environment.getExternalStorageDirectory()拿目录  Environment.MEDIA_MOUNTED已加载

       if (!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {

           return -1;

       }

       ObjectOutputStream oos=null;

       //super.getFilesDir();//系统路径

       String filePath=Environment.getExternalStorageDirectory().toString()

              +File.separator+fileName;//File.separator路径

       File file=new File(filePath);//创建文件,用于判断文件是否存在

       File parentFile=file.getParentFile();

       if (!parentFile.exists()) {//父文件夹不存在

           parentFile.mkdir();//创建文件所在目录

       }

       try {

           oos=new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream(file)));

           oos.writeObject(item);

           ret=1;

       } catch (FileNotFoundException e) {

           e.printStackTrace();

       } catch (IOException e) {

           e.printStackTrace();

       }finally{

           try {

              oos.flush();

              if (oos!=null)oos.close();

           } catch (IOException e) {

              e.printStackTrace();

           }

       }

       return ret;

    }

取数据

private NewsItem read(String fileName){

       Log.d("io","read()");

       NewsItem item=null;      if(!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){//如果sdcard存在

           return null;

       }

      

       String filePath=Environment.getExternalStorageDirectory().toString()

              +File.separator+fileName;//File.separator路径

       File file=new File(filePath);

       if (!file.exists()) {

           return null;

       }

       ObjectInputStream ois=null;

       try {

           ois=new ObjectInputStream(new BufferedInputStream(new FileInputStream(file)));

           item=(NewsItem)ois.readObject();

       } catch (StreamCorruptedException e) {

           e.printStackTrace();

       } catch (FileNotFoundException e) {

           e.printStackTrace();

       } catch (IOException e) {

           e.printStackTrace();

       } catch (ClassNotFoundException e) {

           e.printStackTrace();

       }finally{

           try {

              ois.close();

           } catch (IOException e) {

              e.printStackTrace();

           }

       }

       return item; 

    }

posted @ 2015-07-17 09:32  烟风  阅读(161)  评论(0编辑  收藏  举报