目录
Android数据存储几种方式
一、共享参数
使用场景
二、数据库SQLite
1、数据定义语言(DDL)
(1)创建表格
(2)删除表格
(3)修改表结构
2、数据操纵语言(DML)
(1)添加记录
(2)删除记录
(3)修改记录
(4)查询记录
三、数据库管理器SQLiteDatabase
(1)管理类,用于数据库 层面的操作
(2)事务类,用于事务层面的操作
(3)数据处理类,用于数据表层面的操作
四、数据库帮助器SQLiteOpenHelper
SharePreferences是Android的一个轻量级存储工具,采用的存储结构是Key-Value的键值对方式。
共享参数的存储介质是符合XML规范的配置文件,保存路径是:/data/data/应用包名/shared_prefs/文件名.xml
共享参数主要适用于如下场合:
实际开发,共享参数经常存储的数据有APP的个性化配置信息、用户使用APP的行为信息、临时需要保存的片段信息等。
例:输入姓名保存到共享参数,重新打开应用会自动输入到输入框。
XML文件
java文件
public class ShareWriteActivity extends AppCompatActivity implements View.OnClickListener {
private EditText et_name;
private SharedPreferences preferences;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_share_write);
et_name = findViewById(R.id.et_name);
findViewById(R.id.btn_save).setOnClickListener(this);
// 点击保存共享参数则保存数据
preferences = getSharedPreferences("config", Context.MODE_PRIVATE);
// 打开应用会检测是否有保存过的数据
reload();
}
private void reload() {
String name = preferences.getString("name",null);
if(name != null){
et_name.setText(name);
}
}
@Override
public void onClick(View view) {
String name = et_name.getText().toString();
SharedPreferences.Editor editor = preferences.edit();
editor.putString("name",name);
editor.commit();
}
}
SQLite是一种小巧的嵌入式数据库,使用方便、开发简单,由于属于轻型数据库,不涉及复杂的数据控制操作,因此App开发只用到数据定义和数据操纵两类SQL。
它描述了怎样变更数据实体的框架结构,主要包括三种操作:创建表格、删除表格、修改表结构。
语法:CREATE TABLE IF NOT EXISTS 表格名称( );
说明:
例:
CREATE TABLE IF NOT EXISTS user_info(
id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
name VARCHAR NOT NULL
);
语法:DROP TABLE IF EXISTS 表格名称;
例:
DROP TABLE IF EXISTS user_info;
语法:ALTER TABLE 表格名称 修改操作;
说明:
例:
ALTER TABLE user_info ADD COLUMN phone VARCHAR;
描述了怎么样处理数据实体的内部记录,表格记录的操作类型包括添加、删除、修改、查询四类。
语法:INSERT INTO 表格名称( 以逗号分隔的字段名列表 ) VALUES (以逗号分隔的字段值列表);
例:
INSERT INTO user_info (name,age,height) VALUES ('张',20,64);
语法:DELETE FROM 表格名称 WHERE 查询条件;
例:
DELETE FROM user_info WHERE name = '张';
语法:UPDATE 表格名称 SET 字段名=字段值 WHERE 查询条件;
例:
UPDATE user_info SET married=1 WHERE name='张';
语法:SELECT 以逗号分隔的字段名列表 FROM 表格名称 WHERE 查询条件;
例:
SELECT name FROM user_info WHERE name='张';
查询操作除了比较字段值条件外,还可对查询结果排序“ORDER BY 字段名 ASC或DESC”
例:
SELECT * FROM user_info ORDER BY age ASC;
若要在java代码中操纵SQLite,需专门的工具类,SQLiteDatabase是Android提供的SQLite数据库管理器,可调用openOrCreateDatabase方法获取数据库实例。
获取数据库实例后,可开展各项操作,提供了若干操作数据表的API,常用方法:
例:创建、删除数据库
XML文件
java代码
public class DatabaseActivity extends AppCompatActivity implements View.OnClickListener {
private TextView tv_database;
private String mDatabaseName;
private String desc;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_database);
tv_database = findViewById(R.id.tv_database);
findViewById(R.id.btn_database_create).setOnClickListener(this);
findViewById(R.id.btn_database_delete).setOnClickListener(this);
// 生成一个测试数据库的完整路径
mDatabaseName = getFilesDir() + "/test.db";
}
@Override
public void onClick(View view) {
switch (view.getId()){
// 创建或打开数据库,数据库如果不存在则创建
case R.id.btn_database_create:
SQLiteDatabase db = openOrCreateDatabase(mDatabaseName, Context.MODE_PRIVATE,null);
desc = String.format("数据库%s创建%s",db.getPath(),(db != null) ? "成功":"失败");
tv_database.setText(desc);
break;
case R.id.btn_database_delete:
//删除数据库
boolean result = deleteDatabase(mDatabaseName);
desc = String.format("数据库%s删除%s",mDatabaseName,result? "成功":"失败");
tv_database.setText(desc);
break;
}
}
}
SQLiteOpenHelper是Android提供的数据库辅助工具,用于指导开发者进行SQLite的合理使用。
使用步骤:
例:添加到数据库中
创建database包,包下创建java类
public class UserDBHelper extends SQLiteOpenHelper {
private static final String DB_NAME = "user.db";
private static final String TABLE_NAME = "user_info";
private static final int DB_VERSION = 1;
private static UserDBHelper mHelper = null;
private SQLiteDatabase mRDB = null;
private SQLiteDatabase mWDB = null;
private UserDBHelper(Context context){
super(context,DB_NAME,null,DB_VERSION);
}
// 利用单例模式获取数据库帮助器的唯一实例
public static UserDBHelper getInstance(Context context){
if(mHelper == null){
mHelper = new UserDBHelper(context);
}
return mHelper;
}
// 打开数据库的读连接
public SQLiteDatabase openReadLink(){
if(mRDB == null || !mRDB.isOpen()){
mRDB = mHelper.getReadableDatabase();
}
return mRDB;
}
// 打开写连接
public SQLiteDatabase openWriteLink(){
if(mWDB == null || !mWDB.isOpen()){
mWDB = mHelper.getWritableDatabase();
}
return mWDB;
}
// 关闭数据库连接
public void closeLink(){
if(mRDB != null && mRDB.isOpen()){
mRDB.close();
mRDB = null;
}
if(mWDB != null && mWDB.isOpen()){
mWDB.close();
mWDB = null;
}
}
// 创建数据库,执行建表语句
@Override
public void onCreate(SQLiteDatabase db) {
String sql = "CREATE TABLE IF NOT EXISTS "+TABLE_NAME+"(" +
"id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL," +
"name VARCHAR NOT NULL);";
db.execSQL(sql);
}
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
}
public long insert(User user){
ContentValues values = new ContentValues();
values.put("name",user.name);
return mWDB.insert(TABLE_NAME,null,values);
}
}
XML文件
Userjava类
public class User {
public int id;
public String name;
public User(){
}
public User(String name){
this.name = name;
}
}
Activity java类
public class SQLiteHelperActivity extends AppCompatActivity implements View.OnClickListener {
private TextView et_name;
private UserDBHelper mHelper;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sqlite_helper);
et_name = findViewById(R.id.et_name);
findViewById(R.id.btn_add).setOnClickListener(this);
}
@Override
protected void onStart() {
super.onStart();
// 打开数据库帮助器的实例
mHelper = UserDBHelper.getInstance(this);
// 打开数据库帮助器的读写连接
mHelper.openWriteLink();
mHelper.openReadLink();
}
@Override
protected void onStop() {
super.onStop();
mHelper.closeLink();
}
@Override
public void onClick(View view) {
String name = et_name.getText().toString();
User user = null;
switch (view.getId()){
case R.id.btn_add:
// 以下声明一个用户信息对象,并填写它的各字段值
user = new User(name);
if(mHelper.insert(user)>0){
Toast.makeText(this,"添加成功",Toast.LENGTH_SHORT).show();
}
break;
}
}
}