android存储数据方式总结:
- SharedPreferences轻量级存储框架
- SQLite数据库存储
- 文件存储
第一种:SharedPreferences存储数据
SharedPreferences 轻量级的存储信息的api 可以保存的数据类型有限六种
- boolean
- int
- long
- float
- String
- Set
获取SharedPreferences 对象的方法:
getSharedPreferences() ,getPreferences(),两者都能获取到SharedPreferences 对象。
因为SharedPreferences 本身是一个接口,程序无法直接获得SharedPreferences 实例,所以需要用到Context的方法getSharedPreferences (),
常用的getSharedPreferences(),用到两个参数,第一个用于XML指定名称,第二个用于指定模式。
第二个参数 | 作用 |
---|---|
Context.MODE_PRIVATE | 指定该SharedPreferences数据只能被本应用程序读、写。 |
Context.MODE_WORLD_READABLE | 指定该SharedPreferences数据能被其他应用程序读,但不能写。 |
Context.MODE_WORLD_WRITEABLE | 定该SharedPreferences数据能被其他应用程序读,写 |
SharedPreferences 对象本身只能获取数据而不能修改和存储数据,要修改和存储需要获取Editor对象
用SharedPreferences.edit()方法获取Editor对象,Editor对象有如下方法:
clear() 清空数据
putXXX() 存入指定数据
remove() 删除指定key的数据
commit() 提交数据
apply()提交数据
apply和commit方法的异同,点击这里
如下代码演示SharedPreferences 的基本使用
public class MainActivity extends AppCompatActivity { private String MY_PRI_NAME = "My Preferences"; private String MY_KEYS_STR = "KEY_String"; private String My_KEYS_INT = "KEY_Int"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //用getSharedPreferences方法获取sp对象,第一个参数用来提供名称,第二个参数用来指定模式 SharedPreferences preferences = getSharedPreferences(MY_PRI_NAME, Context.MODE_PRIVATE); //要添加数据必须获取Editor对象,用.edit()方法获得 SharedPreferences.Editor edit = preferences.edit(); //putXXX添加数据,参数为key,value形式 edit.putString(MY_KEYS_STR,"这是第一条String数据"); edit.putInt(My_KEYS_INT,66666); //.commit()方法也可以提交,略有区别,用apply效率略高 edit.apply(); }
<span class="token annotation punctuation">@Override</span> <span class="token keyword">protected</span> <span class="token keyword">void</span> <span class="token function">onStop</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span> <span class="token keyword">super</span><span class="token punctuation">.</span><span class="token function">onStop</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">//获取Preferences对象</span> SharedPreferences preferences <span class="token operator">=</span> <span class="token function">getSharedPreferences</span><span class="token punctuation">(</span>MY_PRI_NAME<span class="token punctuation">,</span> Context<span class="token punctuation">.</span>MODE_PRIVATE<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">//用contains方法判断是否 存在键值对应的数据,然后getXXX获取,第二个参数用来指定默认值</span> <span class="token keyword">if</span> <span class="token punctuation">(</span>preferences<span class="token punctuation">.</span><span class="token function">contains</span><span class="token punctuation">(</span>MY_KEYS_STR<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">{<!-- --></span> System<span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span>MY_KEYS_STR<span class="token operator">+</span><span class="token string">":"</span><span class="token operator">+</span>preferences<span class="token punctuation">.</span><span class="token function">getString</span><span class="token punctuation">(</span>MY_KEYS_STR<span class="token punctuation">,</span><span class="token string">"NULL"</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">if</span><span class="token punctuation">(</span>preferences<span class="token punctuation">.</span><span class="token function">contains</span><span class="token punctuation">(</span>My_KEYS_INT<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">{<!-- --></span> System<span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span>My_KEYS_INT<span class="token operator">+</span><span class="token string">":"</span><span class="token operator">+</span>preferences<span class="token punctuation">.</span><span class="token function">getInt</span><span class="token punctuation">(</span>My_KEYS_INT<span class="token punctuation">,</span><span class="token number">777</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span>
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
SharedPreferences的使用范围:保存轻量级的数据,格式比较简单的数据,比如各种配置信息之类的。保存在xml文档中,存储格式为键值对。
SQLite数据库
SQLite是一个轻量级的数据库,android内置,占用资源少,可以支持标准的sql语言,
创建数据库
创建数据库需要SQLiteopenHelper这个抽象类,通过创建一个类继承它并且重写它的两个抽象方法onCreate()和onUograde(),可以实现创建,升级数据库的逻辑。
以下代码演示了继承SQLiteopenHelper这个类:
public class MyHelper extends SQLiteOpenHelper { private static final int VERSION = 1; private static final String DATABASE_NAME = "database.db"; public MyHelper(@Nullable Context context) { //上下文,数据库名称,游标工厂(没有可以传入null),数据库版本 super(context, DATABASE_NAME, null, VERSION); }
<span class="token annotation punctuation">@Override</span> <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">onCreate</span><span class="token punctuation">(</span>SQLiteDatabase db<span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span> <span class="token comment">//这里写数据库初次创建的代码</span> db<span class="token punctuation">.</span><span class="token function">execSQL</span><span class="token punctuation">(</span><span class="token string">"create table Demo"</span><span class="token operator">+</span><span class="token string">"(_id integer primary key,name,adders)"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> System<span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"table is create"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token annotation punctuation">@Override</span> <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">onUpgrade</span><span class="token punctuation">(</span>SQLiteDatabase db<span class="token punctuation">,</span> <span class="token keyword">int</span> oldVersion<span class="token punctuation">,</span> <span class="token keyword">int</span> newVersion<span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span> <span class="token comment">//这里写数据库升级时的代码</span> <span class="token punctuation">}</span>
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
获取数据库对象
创建好后可以再要用操作数据库的位置创建该类的实例
MyHelper myHelper = new MyHelper(MainActivity.this);
- 1
然后可以获取数据库对象然操作,这里有两个方法
方法名 | 用法 |
---|---|
getWriableDatabase() | 以读写方式打开数据库,当存储空间满的时候,就会抛出异常 |
getReadableDatabase() | 也是以读写方式打开数据库,存储空间满的时候,就会以只读方式打开,当空间问题解决时候,会关闭数据库对象再返回一个可读写对象,该方法内部调用了getWriableDatabase()方法,是对这个方法的一种封装 |
SQLiteDatabase database = myHelper.getReadableDatabase();
- 1
用数据库对象操作数据库
用获取到的数据库对象来进行增删改查等操作
比如执行原生sql语句:
database.execSQL("这是一条SQL语句");
- 1
当然查询语句建议使用rawQuery
String sql = "select * from Demo where id = ?";
Cursor cursor = database.rawQuery(sql,new String[]{"1"} );
- 1
- 2
这个方法会返回一个cursor(游标)对象,
这里是对于cursor的介绍
还有就是SQLiteDatabase 类提供了一系列增删改查的方法,不需要手写原生sql语句:
改update():
包含四个参数
参数 | 说明 |
---|---|
table | 数据表的名字 |
values | 值名,是一个ContentValues实例 |
whereClause | where后面的条件,值用‘?’代替 |
whereArgs | where后面的参数,顶替上一个参数中的’?’,一般用new String[] {“这是值”}这样的形式 |
演示:
database.update("Demo",values, "id=?", new String[]{"1"});
- 1
删delete():
包含三个参数
参数 | 说明 |
---|---|
table | 数据表的名字 |
whereClause | where后面的条件,值用‘?’代替 |
whereArgs | where后面的参数,顶替上一个参数中的’?’,一般用new String[] {“这是值”}这样的形式 |
database.delete("Demo","id=?", new String[]{"3"});
- 1
查query():
query()方法参数太多,这里找个外援
我是外援
public Cursor query(String table, String[] columns, String selection,
String[] selectionArgs, String groupBy, String having,`在这里插入代码片`
String orderBy)
- 1
- 2
- 3
SQLite数据库就到这里,下面是文件存储