数据存储:

五种:

Shared Preferences 参数共享

Internal Storage 内部存储

External Storage 外部存储(sdcard)

SQLite Databases 数据库存储

Network Connection 网络存储



1、Shared Preferences 参数共享

应用场景:应用程序有少量数据需要保存的话(保存应用程序设置的一些参数)

文件保存位置:/data/data/包名/shared_prefs/xxx.xml



保存数据:

SharedPreferences sp = getPreferences(MODE_PRIVATE);//参数是操作模式,MODE_PRIVATE是私有的

Editor edit = sp.edit(); //得到一个编辑器

edit.putString("str", "jhgasdhasd");

edit.putBoolean("boolean", false);

edit.putInt("int", 1);

edit.commit(); //提交修改

数据读取:

SharedPreferences sp = getPreferences(MODE_PRIVATE);

String string = sp.getString("str", null);

boolean boolean1 = sp.getBoolean("boolean", false);

int int1 = sp.getInt("int", 0);

它的操作模式一般都是MODE_PRIVATE(只能应用本身才能读取修改这个文件)

//自定义要保存数据的文件名

SharedPreferences sp = getSharedPreferences("yinan", MODE_PRIVATE);

2、Internal Storage 内部存储


文件保存位置:/data/data/包名/files/xxx.xxx

文件格式:自定义



保存数据:

FileOutputStream fos = null;

try {

fos = openFileOutput("yinan.txt", MODE_PRIVATE);

String str = "sdfsfgsdfgsd";

fos.write(str.getBytes());

} catch (FileNotFoundException e) {

数据读取:

FileInputStream fis = null;

try {

fis = openFileInput("yinan.txt");

ByteArrayBuffer arrayBuffer = new ByteArrayBuffer(4000);


int len = 0;

byte[] buffer = new byte[1024];

while ((len = fis.read(buffer)) != -1) {

arrayBuffer.append(buffer, 0, len);

}

操作(读写模式)模式

MODE_PRIVATE 当前应用才有权限读写。数据会覆盖的。

MODE_APPEND 当前应用才有权限读写。这个数据可以追加。

MODE_WORLD_READABLE 其他应用可读。

MODE_WORLD_WRITEABLE 其他应用可写。

3、External Storage 外部存储(sdcard)

路径:

2.1之前:/sdcard

2.2之后:/mnt/sdcard


//获取sdcard的路径

File file = Environment.getExternalStorageDirectory();

//判断sdcard状态

if(Environment.MEDIA_MOUNTED.

equals(Environment.getExternalStorageState()))

{

//获取sdcard的可用空间

long freeSpace = file.getFreeSpace();

}

else

{

}

4、 SQLite Databases 数据库存储

android平台上,集成了一个嵌入式关系型数据库--SQLite

免费的

轻量级

多线程

跨平台

SQLite 可以解析大部分标准的SQL语句。

创建表:

CREATE TABLE 表名 (id INTEGER PRIMARY KEY AUTOINCREMENT, name varchar(20))

例如:CREATE TABLE student (studentid INTEGER PRIMARY KEY AUTOINCREMENT,name VARCHAR(50),phone VARCHAR(20))

删除表:

DROP TABLE 表名

例如:DROP TABLE student

更新表:

ALTER TABLE 表名 ADD 字段名 属性

例如:ALTER TABLE student ADD COLUMN age INTEGER

查询语句:

select * from 表名 where 条件语句 group by 分组语句 having 分组条件 order by 排序语句

例如:SELECT phone, name FROM student ORDER BY name DESC

插入语句:

insert into 表名(字段名) values (值)

例如:INSERT INTO student (name, phone) VALUES('test', '13666666666')

更新语句:

update 表名 set 字段名 = 值 where 条件语句

例如:UPDATE student SET phone=1399999999 WHERE name='test'

删除语句:

delete from 表名 where 条件语句

例如:DELETE FROM student WHERE name='test'

Android里面操作SQLite的步骤:

1、创建一个类,去继承SQLiteOpenHelper

2、实现两个方法。新增一个有参的构造方法

public MySQLiteOpenHelper(Context context, int version) {

super(context, "yinan.db", null, version);

}

//参数个数是自定义的。只要在super()里面有传数据就不需要外部再传

//当数据库不存在的时候,调用这个辅助类的时候会自动创建,并调用onCreate();

//如果数据存在onCreate方法就不会被调用。

//如果数据存在,但是版本号不一样的话onUpgrade()就会被调用。

3、自动创建表:

根据onCreate方法的特性,

当数据库不存在的时候,创建数据库的同时把表一起创建。

public void onCreate(SQLiteDatabase db) {

String sql = "CREATE TABLE student (studentid INTEGER PRIMARY KEY AUTOINCREMENT,name VARCHAR(50),phone VARCHAR(20))";

db.execSQL(sql );

}

4、在Activity中创建这个辅助类的对象。

对象.getWritableDatabase();

对象.getReadableDatabase();

这个两个方法任意一个就可以得到数据库对象。


数据库对象.execSQL(sql语句)




查询:


private void select() {

arrayList.clear();

String sql = "SELECT phone, name FROM student ORDER BY name DESC";

Cursor cursor = mDB.rawQuery(sql, null);

boolean haseData = cursor.moveToFirst();

while(haseData)//如果有数据就继续循环

{

//获取每次读取游标里面的数据

String name = cursor.getString(cursor.getColumnIndex("name"));

String phone = cursor.getString(cursor.getColumnIndex("phone"));

//把数据封装起来

Student student = new Student(name, phone);

arrayList.add(student);

//让游标读取下一个数

haseData = cursor.moveToNext();

}

mTextView.setText(arrayList.toString());

}


更多相关文章

  1. “罗永浩抖音首秀”销售数据的可视化大屏是怎么做出来的呢?
  2. Nginx系列教程(三)| 一文带你读懂Nginx的负载均衡
  3. 不吹不黑!GitHub 上帮助人们学习编码的 12 个资源,错过血亏...
  4. Stagefright框架解读(—)音视频Playback流程
  5. android之xml数据解析(DOM)
  6. android MediaPlayer+Stagefright架构(音频)图解
  7. AndroidContentProvider ContentResolver和ContentObserver的使
  8. android中关于tools:context="activity name"解惑
  9. Android(安卓)Update Engine分析(八)升级包制作脚本分析

随机推荐

  1. Android中得到view在父容器中的位置下标
  2. 兼容android Q存图片到相册
  3. Android ScrollView滑动到顶部和滑动到底
  4. Android必会小功能总结
  5. 观摩Android最高权力的Context通用性接口
  6. 安卓(Android)九宫格布局介绍
  7. android 异常 Unable to instantiate act
  8. android JNI库实现reboot,recovery
  9. Android 自定义时钟控件
  10. Android(安卓)NDK环境搭建和开发入门