欢迎查看关于Android数据存储的5种方式
黑夜给了我黑色的眼睛,但我却用它来刷微博。 —亚当爱自拍、
- Android的五种存储方式
- SQLit简介
- 数据库语法
- 关于SQLiteOpenHelper的使用技巧
- 代码示例
Android的五中存储方式
SharedPreferences 存储数据、文件存储、SQLite数据库存储、ContentProvider存储数据、网络存储
SQLite简介
SQLite 是一个软件库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。
序号 | 函数 | 描述 |
---|---|---|
1 | SQLite COUNT | 聚集函数是用来计算一个数据库表中的行数。 |
2 | SQLite MAX | 聚合函数允许我们选择某列的最大值。 |
3 | SQLite MIN | 聚合函数允许我们选择某列的最小值。 |
4 | SQLite AVG | 聚合函数计算某列的平均值。 |
5 | SQLite SUM | 聚合函数允许为一个数值列计算总和。 |
6 | SQLite RANDOM | SQLite RANDOM 函数返回一个介于 -9223372036854775808 和 +9223372036854775807 之间的伪随机整数。 |
7 | SQLite ABS 函数 | 函数返回数值参数的绝对值。 |
8 | SQLite UPPER 函数 | 函数把字符串转换为大写字母。 |
9 | SQLite LOWER 函数 | SQLite LOWER 函数把字符串转换为小写字母。 |
10 | SQLite LENGTH 函数 | SQLite LENGTH 函数返回字符串的长度。 |
11 | SQLite sqlite_version | SQLite 库的版本。 |
数据库语法
SQLite 语句
所有的SQlite语句都是以关键字开始:如SELECT 、INSERT 、UPDATE 、DELETE 、ALTER 、DROP 等,所有的语句都要以(;)结束。
SQLite ANALYZE 语句
ANALYZE;
or
ANALYZE database_name;
or
ANALYZE database_name.table_name;
SQLite AND/OR 子句
SELECT column1, column2….columnN
FROM table_name
WHERE CONDITION-1 {AND|OR} CONDITION-2;
SQLite ALTER TABLE 语句
ALTER TABLE table_name ADD COLUMN column_def…;
SQLite CREATE TABLE 语句
CREATE TABLE table_name(
column1 datatype,
column2 datatype,
column3 datatype,
…..
columnN datatype,
PRIMARY KEY( one or more columns )
);
SQLite COUNT 子句
SELECT COUNT(column_name)
FROM table_name
WHERE CONDITION;
SQLite DELETE 语句
DELETE FROM table_name
WHERE {CONDITION};
SQLite DROP TABLE 语句
DROP TABLE database_name.table_name;
SQLite GROUP BY 子句
SELECT SUM(column_name)
FROM table_name
WHERE CONDITION
GROUP BY column_name;
SQLite HAVING 子句
SELECT SUM(column_name)
FROM table_name
WHERE CONDITION
GROUP BY column_name
HAVING (arithematic function condition);
SQLite INSERT INTO 语句
INSERT INTO table_name( column1, column2….columnN)
VALUES ( value1, value2….valueN);
SQLite Like 子句
SELECT column1, column2….columnN
FROM table_name
WHERE column_name LIKE { PATTERN };
SQLite ORDER BY 子句
SELECT column1, column2….columnN
FROM table_name
WHERE CONDITION
ORDER BY column_name {ASC|DESC};
SQLite SELECT 语句
SELECT column1, column2….columnN
FROM table_name;
SQLite UPDATE 语句
UPDATE table_name
SET column1 = value1, column2 = value2….columnN=valueN
[ WHERE CONDITION ];
SQLite WHERE 子句
SELECT column1, column2….columnN
FROM table_name
WHERE CONDITION;
关于SQLiteOpenHelper的使用技巧
android 平台给我们提供了一个管理数据库的辅助类帮助我们来创建或打开数据库,这个类继承自SQLiteOptenHelper 。
基本用法:
在该类的构造器中,调用Context中的方法创建并打开一个指定名称的数据库对象。继承和扩展SQLiteOpenHelper类主要做的工作就是重写以下两个方法。
onCreate(SQLiteDatabase db) : 当数据库被首次创建时执行该方法,一般将创建表等初始化操作在该方法中执行。
onUpgrade(SQLiteDatabse dv, int oldVersion,int new Version):当打开数据库时传入的版本号与当前的版本号不同时会调用该方法。
还有一个方法选用:onOpen() :当每次打开数据库时被调用
代码示例
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
public class MySQLiteHelper extends SQLiteOpenHelper{
private static final String DATABASE_NAME = "hero";
private static final int VERSION = 8;
public static SQLiteDatabase dbInstance = null;
//调用父类构造器
public MySQLiteHelper(Context context, String name, CursorFactory factory,int version) {
super(context, DATABASE_NAME, null, VERSION);
}
/**
* 当数据库首次创建时执行该方法,一般将创建表等初始化操作放在该方法中执行.
* 重写onCreate方法,调用execSQL方法创建表
* */
@Override
public void onCreate(SQLiteDatabase db) {
UserTable.createTable(db);
OptTable.createTable(db);
CommonMsgTable.createTable(db);
}
//当打开数据库时传入的版本号与当前的版本号不同时会调用该方法
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
//增加新字段是使用
if (oldVersion < 2) {
String sql = "ALTER TABLE " + OptTable.TABLE_NAME + " ADD COLUMN " + OptTable.OPT_FROM_ID + " text ";
excuteSql(db, sql);
}
}
// 获取单例
public static synchronized SQLiteDatabase getDbInstance() {
if (dbInstance == null || !dbInstance.isOpen()){
MySQLiteHelper dbOpenHelper = new MySQLiteHelper(APP.getInstance());
dbInstance = dbOpenHelper.getWritableDatabase();
}
return dbInstance;
}
// 关闭数据库
public static synchronized boolean closeDB() {
if (dbInstance == null) {
return true;
}
if (dbInstance.isOpen() && !dbInstance.isDbLockedByOtherThreads()) {
dbInstance.close();
}
return !dbInstance.isOpen();
}
}