(一)Android数据存储————文件存储(内部存储):https://blog.csdn.net/sinat_29675423/article/details/85699131
(二)Android数据存储————文件存储(外部存储):https://blog.csdn.net/sinat_29675423/article/details/85705545
(三)Android数据存储————SharedPreference使用及封装:https://blog.csdn.net/sinat_29675423/article/details/85778297
本文简介SQLite数据库的创建及增删改查操作。
存储特点
SQLite非常容易上手,不需要服务器也不需要复杂配置的小型的、单文件形式的数据库。它效率高、开源跨平台、支持事务操作、可嵌入…总之很受欢迎。
存储位置
数据库为.db文件,存在data/data/<package_name>/databases/,里面可以存放数据表。
数据库查看
这里以sqlite3为例,简述在command中查看数据库及表中内容:
- 进入数据库目录 databases (cd data/data/包名/databases)
- 进入数据库 studentStore (sqlite3 studentStore)
- 接下来就可以用sql语句进行操作
- 比如:查看数据库中的表 tables (.tables)
- 比如:查看表中的所有数据 (select * from table;)
存储数据类型
类型 | 描述 |
---|---|
INTEGER | 一个带符号的整数 |
NULL | 一个 NULL 值 |
REAL | 一个浮点值 |
TEXT | 一个文本字符串 |
数据库创建
需要理解下面两个重要的类,具体可到android developer官网查看api开发文档。
- SQLiteOpenHelper:A helper class to manage database creation and version management.You create a subclass implementing onCreate(SQLiteDatabase), onUpgrade(SQLiteDatabase, int, int) and optionally onOpen(SQLiteDatabase), and this class takes care of opening the database if it exists, creating it if it does not, and upgrading it as necessary. Transactions are used to make sure the database is always in a sensible state.
- SQLiteDataBase:SQLiteDatabase has methods to create, delete, execute SQL commands, and perform other common database management tasks.
————摘自android developer API说明
SQLiteOpenHelper的常用方法:
构造函数: DataBaseHelper(Context context, String DataBasename, SQLiteDatabase.CursorFactory factory, int version)
创建方法: onCreate()
更新升级方法:onUpdate()
获取SQLiteDataBase对象:getWritableDatabase()
实现一个类,继承自SQLiteOpenHelper(SQLiteDataBase的帮助类)
public class DataBaseHelper extends SQLiteOpenHelper {
//创建一个名叫Student的表,字段有_id, name, class, age
private static final String CREATE_STUDENT = "create table Student("+
"_id integer primary key autoincrement," + "name text,"+
"class text,"+ "age Integer)";
private Context mcontext;
public DataBaseHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
this.mcontext = context;
}
@Override
public void onCreate(SQLiteDatabase db) {
//创建
db.execSQL(CREATE_STUDENT);
Toast.makeText(mcontext,"数据库创建成功",Toast.LENGTH_SHORT).show();
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
主程序中调用
private void creteDataBaseTable() {
mDataBaseHelper = new DataBaseHelper(SQLActivity.this, "studentStore", null, 1);
mDataBaseHelper.getWritableDatabase();
}
数据库操作
可以使用SQL语句进行增删改查,也可以使用SQLiteDataBase提供的相关API
SQL语句
添加数据
execSQL(String sql, Object[] bindArgs)
代码示例:在表Student中添加两行数据
private void addBySQL() {
SQLiteDatabase writableDatabase = mDataBaseHelper.getWritableDatabase();
writableDatabase.execSQL("insert into Student (name, class, age) values (?,?,?)",
new String[]{"mask","computer technology", "23"});
writableDatabase.execSQL("insert into Student (name, class, age) values (?,?,?)",
new String[]{"duck","source technology", "25"});
}
更新数据
execSQL(String sql, Object[] bindArgs)
代码示例:从Student表中将“name”为“mask”的数据的“age”字段的值修改为30
private void updateBySQL() {
SQLiteDatabase writableDatabase = mDataBaseHelper.getWritableDatabase();
writableDatabase.execSQL("update Student set age = ? where name = ?", new String[]{"30", "mask"});
}
删除数据
execSQL(String sql, Object[] bindArgs)
代码示例:从Student表中删除“name”是“duck”的数据
private void deleteBySQL() {
SQLiteDatabase writableDatabase = mDataBaseHelper.getWritableDatabase();
writableDatabase.execSQL("delete from Student where name = ?", new String[]{"duck"});
}
查询数据
rawQuery(String sql, String[] selectionArgs)
代码示例:从表student中查询带有"name"字段带有“du”的所有数据,并将查询结果输出
private void qurryBySQL() {
SQLiteDatabase writableDatabase = mDataBaseHelper.getWritableDatabase();
Cursor cursor = writableDatabase.rawQuery("select * from Student where name like ?", new String[]{"%du%"});
if(cursor.moveToFirst()){
do{
String name = cursor.getString(cursor.getColumnIndex("name"));
String clas = cursor.getString(cursor.getColumnIndex("class"));
int age = cursor.getInt(cursor.getColumnIndex("age"));
Log.i("数据库存储 SQL查询","name:"+name+"; class:"+clas+"; age:"+age);
}while (cursor.moveToNext());
}
cursor.close();//释放游标,防止内存泄漏
}
SQLiteDataBase API
添加数据
insert(String table, String nullColumnHack, ContentValues values)
示例:添加一行数据
private void addByAPI() {
SQLiteDatabase writableDatabase = mDataBaseHelper.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put("name", "duck");
contentValues.put("class", "environment");
contentValues.put("age", 35);
writableDatabase.insert("Student",null,contentValues);
}
更新数据
update(String table, ContentValues values, String whereClause, String[] whereArgs)
示例:将mask的age修改为33
private void updateByAPI() {
SQLiteDatabase writableDatabase = mDataBaseHelper.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put("age", 33);
writableDatabase.update("Student",contentValues,"name = ?",new String[]{"mask"});
}
删除数据
delete(String table, String whereClause, String[] whereArgs)
示例:删除duck
private void deleteByAPI() {
SQLiteDatabase writableDatabase = mDataBaseHelper.getWritableDatabase();
writableDatabase.delete("Student","name = ?", new String[]{"duck"});
}
查询数据
query(String table, String[] columns, String selection,
String[] selectionArgs, String groupBy, String having,
String orderBy)
示例:从表student中查询带有"name"字段带有“du”的所有数据,并将查询结果输出
private void qurryByAPI() {
SQLiteDatabase writableDatabase = mDataBaseHelper.getWritableDatabase();
Cursor cursor = writableDatabase.query("Student", null, "name like ?", new String[]{"%du%"}, null, null, null);
if(cursor.moveToFirst()){
do{
String name = cursor.getString(cursor.getColumnIndex("name"));
String clas = cursor.getString(cursor.getColumnIndex("class"));
int age = cursor.getInt(cursor.getColumnIndex("age"));
Log.i("数据库存储 API查询","name:"+name+"; class:"+clas+"; age:"+age);
}while (cursor.moveToNext());
}
cursor.close();//释放游标,防止内存泄漏
}