SQLite&&SharedPreferences&&IO读写Sdcard学习笔记
SQLite
轻量级的、嵌入式的、关系型数据库
Android、IOS等广泛使用的的数据库系统
SQLite数据库之中可以方便的使用SQL语句,实现数据的增加、修改、删除、查询等操作
SQLiteOpenHelper:负责创建、打开、更新、关闭数据库和创建数据表
SQLiteDataBase:执行SQL语句、对数据表的增删改查
存储文件名,数据将保存在/data/data/程序的包名称/databases/xxxx.db中
使用SQLiteDataBase存储数据
- 1. 打开或创建test.db数据库
SQLiteDatabase db = openOrCreateDatabase("test.db", Context.MODE_PRIVATE, null);
db.execSQL("DROP TABLE IF EXISTS person");
- 2. 创建表 person
db.execSQL("CREATE TABLE person (_id INTEGER PRIMARY KEY AUTOINCREMENT, _name VARCHAR, _age SMALLINT)");
- 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中的数据
- 4. 修改数据 【键值对的方式】
cv = new ContentValues();
cv.put("_age", 35);
db.update("person", cv, "name = ?", new String[]{"joy"});
- 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();//关闭结果集
- 6. 删除数据
db.delete("person", "age < ?", new String[]{"35"});//
db.delete("Test","WHERE _id="+0,null);
db.execSQL("delete from 表名 where 条件");
- 7. 关闭当前数据库
db.close();
- 8. 删除数据库 test.db
deleteDatabase("test.db");
SharedPreferences
一种轻量级的数据保持方式,以键值对的方式将数据存入的xml文件中,通过key从文件中取出数据
获取SharedPreferences的两种方式:
- 调用Context对象的getSharedPreferences()方法
- 调用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中
定义文件的操作模式
- 当前应用操作: Context.MODE_PRIVATE
为默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的内容
- 当前应用操作,追加模式:Context.MODE_APPEND
模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件.
- 能被其他应用读: Context.MODE_WORLD_READABLE
- 能被其他应用写: Context.MODE_WORLD_WRITEABLE
读写SD卡
使用SharedPreferences可以方便的完成数据的存储功能,但是其只能保存一些很简单的数据,如果想存储更多类型的数据,则可以使用文件的存储操作
实现步骤:
- 1. 加入读写SD卡权限
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
- 2. 判断SD卡是否存在【无论是读还是写,都要判断】
Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED
- 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学习笔记的更多相关文章
- Mysql多实例安装+主从复制+读写分离 -学习笔记
Mysql多实例安装+主从复制+读写分离 -学习笔记 .embody{ padding:10px 10px 10px; margin:0 -20px; border-bottom:solid 1px ...
- IO流等学习笔记
1.为什么日期的开始是从1970年0101开始记录,计算机的日期记录是现在的时间距1970年的时间,可正可负.? 2.引用类型默认都为null,基本数据类型为0,除基本数据类型外所有的都为引用数据类型 ...
- Linux五种IO模型 ——Java学习笔记
本文摘自网络: 1.阻塞IO(blocking IO) 在linux中,默认情况下所有的socket都是blocking,一个典型的读操作流程大概是这样: 图1 阻塞IO 当用户进程调用了re ...
- Python读写文件学习笔记
一. 基础 1.创建文件夹 import os os.makedirs('I:\\pythonWorkPace') # 创建文件夹 2. 获取文件夹里面文件列表 import os # os.make ...
- kernel中对文件的读写【学习笔记】【原创】
/*1. 头文件 */ #include <linux/init.h> #include <linux/module.h> #include <linux/modulep ...
- Java基础学习笔记总结
Java基础学习笔记一 Java介绍 Java基础学习笔记二 Java基础语法之变量.数据类型 Java基础学习笔记三 Java基础语法之流程控制语句.循环 Java基础学习笔记四 Java基础语法之 ...
- C# IO流与文件读写学习笔记
本笔记摘抄自:https://www.cnblogs.com/liyangLife/p/4797583.html,记录一下学习过程以备后续查用. 一.文件系统 1.1文件系统类的介绍 文件操作类大都在 ...
- Sqlite学习笔记(四)&&SQLite-WAL原理
Sqlite学习笔记(三)&&WAL性能测试中列出了几种典型场景下WAL的性能数据,了解到WAL确实有性能优势,这篇文章将会详细分析WAL的原理,做到知其然,更要知其所以然. WAL是 ...
- SQLite介绍、学习笔记、性能测试
SQLite介绍.学习笔记.性能测试 哪些人,哪些公司或软件在用SQLite: Nokia's Symbian,Mozilla,Abobe,Google,阿里旺旺,飞信,Chrome,FireFox可 ...
随机推荐
- SCCM 2007 R2部署、操作详解系列之概念
站点类型 在安装站点时,您决定它将是主站点还是辅助站点.然后,在安装其他站点时,您可以选择将其安排到层次结构关系中,以便父站点管理子站点,中央站点收集所有站点信息,从而进行集中式管理.也可以根据业务和 ...
- DropdownList绑定的两种方法
动态绑定方法一:动态绑定数据库中的字段. SqlConnection conn = UtilitySqlClass.OperateDataBase.ReturnConn();string strSQL ...
- jquery 新建的元素事件绑定问题
js的事件监听跟css不一样,css只要设定好了样式,不论是原来就有的还是新添加的,都有一样的表现.而事件监听不是,你必须给每一个元素单独绑定事件. 常见的例子是处理表格的时候.每行行末有个删除按钮, ...
- Looksery Cup 2015 D. Haar Features 暴力
D. Haar Features Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/549/prob ...
- acdream 1738 世风日下的哗啦啦族I 分块
世风日下的哗啦啦族I Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acdream.info/problem?pid=1738 Descri ...
- hdu4085 Peach Blossom Spring 斯坦纳树,状态dp
(1)集合中元素表示(1<<i), i从0开始 (2)注意dp[i][ss] = min(dp[i][ss], dp[i][rr | s[i]] + dp[i][(ss ^ rr) | s ...
- Hadoop: The Definitive Guide (3rd Edition)
chapter 1 解决计算能力不足的问题,不是去制造更大的计算机,而是用更多的计算机来解决问题. 我们生活在一个数据的时代.“大数据”的到来不仅仅是影响到那些科研和金融机构,对小型企业以及我们个人都 ...
- Spark1.0.0 开发环境高速搭建
在本系列博客中.为了解析一些概念.解析一些架构.代码測试.搭建了一个实验平台.例如以下图所看到的: 本实验平台是在一台物理机上搭建的.物理机的配置是16G内存,4核8线程CPU ...
- 使用ASP.NET操作IIS7中使用应用程序
使用ASP.NET操作IIS7中使用应用程序 在最新发布的启明星Portal里,增加了安装程序,下面说一下.NET对IIS7操作.IIS7的操作和IIS5/6有很大的不同,在IIS7里增加了 Mi ...
- 【Java基础】Java面试题目整理与解说(二)
1.Collection 和 Collections 的差别. Collection 是集合类的上级接口,继承于他的接口主要有 Set 和 List. Collections 是针对集合类的一个帮助类 ...