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;

}

SQLite&&SharedPreferences&&IO读写Sdcard学习笔记的更多相关文章

  1. Mysql多实例安装+主从复制+读写分离 -学习笔记

    Mysql多实例安装+主从复制+读写分离 -学习笔记 .embody{ padding:10px 10px 10px; margin:0 -20px; border-bottom:solid 1px ...

  2. IO流等学习笔记

    1.为什么日期的开始是从1970年0101开始记录,计算机的日期记录是现在的时间距1970年的时间,可正可负.? 2.引用类型默认都为null,基本数据类型为0,除基本数据类型外所有的都为引用数据类型 ...

  3. Linux五种IO模型 ——Java学习笔记

    本文摘自网络:     1.阻塞IO(blocking IO) 在linux中,默认情况下所有的socket都是blocking,一个典型的读操作流程大概是这样: 图1 阻塞IO 当用户进程调用了re ...

  4. Python读写文件学习笔记

    一. 基础 1.创建文件夹 import os os.makedirs('I:\\pythonWorkPace') # 创建文件夹 2. 获取文件夹里面文件列表 import os # os.make ...

  5. kernel中对文件的读写【学习笔记】【原创】

    /*1. 头文件 */ #include <linux/init.h> #include <linux/module.h> #include <linux/modulep ...

  6. Java基础学习笔记总结

    Java基础学习笔记一 Java介绍 Java基础学习笔记二 Java基础语法之变量.数据类型 Java基础学习笔记三 Java基础语法之流程控制语句.循环 Java基础学习笔记四 Java基础语法之 ...

  7. C# IO流与文件读写学习笔记

    本笔记摘抄自:https://www.cnblogs.com/liyangLife/p/4797583.html,记录一下学习过程以备后续查用. 一.文件系统 1.1文件系统类的介绍 文件操作类大都在 ...

  8. Sqlite学习笔记(四)&&SQLite-WAL原理

    Sqlite学习笔记(三)&&WAL性能测试中列出了几种典型场景下WAL的性能数据,了解到WAL确实有性能优势,这篇文章将会详细分析WAL的原理,做到知其然,更要知其所以然. WAL是 ...

  9. SQLite介绍、学习笔记、性能测试

    SQLite介绍.学习笔记.性能测试 哪些人,哪些公司或软件在用SQLite: Nokia's Symbian,Mozilla,Abobe,Google,阿里旺旺,飞信,Chrome,FireFox可 ...

随机推荐

  1. sc7731 Android 5.1 LCD驱动简明笔记之二

    此篇笔记基于sc7731 - android 5.1,对lcd的framebuffer做一个简明笔记. 一共分为两大部分:第一部分,关于LCD的硬件方面的:第二部分,关于lcd核心处理(framebu ...

  2. windows7下实现局域网内文件共享

    1.右击桌面网络----属性----更改高级共享设置 (注释:查看当前网络 比如:家庭网络.公共网络 等!) "我这里为公共网络" 2.选择 公共网络---选择以下选项:启动网络发 ...

  3. Mac下cocos2dx-3.0打包Android时,提示&quot;SimpleAudioEngine.h&quot;not found的解决方法

    前段时间触控公布cocos2dx-3.0,在升级之后试过之后,在最初的不习惯之后,感觉比之前的好用了不少,在下之前一直是用xCode模板创建,这回算是一口气升到顶了. 之后再一次编程时须要用到Sima ...

  4. Codeforces Round #225 (Div. 1) C. Propagating tree dfs序+树状数组

    C. Propagating tree Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/383/p ...

  5. OpenGL 4.0 GLSL 实现 投影纹理映射(Projective Texture Mapping) (转)

    http://blog.csdn.net/zhuyingqingfen/article/details/19331721   分类: GLSL  投影纹理映射 (projective texture ...

  6. Android获取联系人示例,从数据库加载,带首字母标签

    这几天打算学习下Android联系人方便的一些东西,之前稍有涉略,不过每次都是浅尝辄止. 推荐国内两个Link: http://fanfq.iteye.com/blog/779569 http://w ...

  7. FindMe

    https://github.com/hongdong/FindMe_Android https://github.com/hongdong/FindMe_Server https://github. ...

  8. 微信公共服务平台开发(.Net 的实现)11-------客服消息(定项消息推送 重要的OPENID)

    这次我们来一起研究一下“客服消息”,首先明确一下“客服消息”的概念.这不同于之前的“被动响应消息”,也就是说并不是之前“你一言我一语的即时响应”,可能在某种情况下你需要给不同的人主动发送消息,例如你的 ...

  9. HtmlWeb类

    HtmlWeb类是一个从网络上获取一个HTML文档的类,其提供的功能大多是基于完成此需求出发.现在来来HtmlWeb类有哪些方法以及属性. 一.属性 bool AutoDetectEncoding { ...

  10. as3.0 interface接口使用方法

    [转]as3.0 interface接口使用方法 AS在2.0的时候就支持接口了 接口能够让你的程序更具扩展性和灵活性,打个例如 比方你定义了一个方法 代码: public function aMet ...