Android 中sqlite的使用方式
如果我们预想的数据为以下格式
首先需要创建sqlite对象实例
在写代码之前必须使用sqlite的两个对象描述一下:
1.SqliteOpenHelper对象(主要作用是对数据库的操作–初始化、开启、关闭)
2.SQLiteDatabase对象(对数据库数据的操作–增 查 改 删)
下面就开始边写代码边分析使用流程
SqliteOpenHelper
数据库的操作类
有两种方法进行初始化数据库
1.通过android api 里已经为我们封装好的 SqliteOpenHelper
查看源代码
public abstract class SQLiteOpenHelper {
会发现它是一个继承类,这里我们自己创建一个类继承SQLiteOpenHelper
class MySqliteOpenHelper extends SQLiteOpenHelper {
public MySqliteOpenHelper(Context context) {
super(context, DATABASE_NAME, null, SQLITE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(CREATE_TABLE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
onCreate(db);
}
}
继承它后发现必须实现其构造方法super(context, DATABASE_NAME, null, SQLITE_VERSION);
参数分别为:上下文,数据库文件名,游标工厂类,数据库版本号
在这里通过其构造方法已经替我们开启了名为DATABASE_NAME的数据库。
onCreate进行表的创建
private static final String CREATE_TABLE = "CREATE TABLE IF NOT EXISTS " + TABLE_NAME + "(" + TABLE_VALUE_ID + " INTEGER PRIMARY KEY,"
+ TABLE_VALUE_NAME + " TEXT,"+ TABLE_VALUE_INFO + " TEXT,"+ TABLE_VALUE_TIME + " LONG)";
onUpgrade进行数据库升级后的处理,这里我们如果数据库有升级对表进行更新
sqLiteOpenHelper = new MySqliteOpenHelper(mContext);
sqLiteDatabase = sqLiteOpenHelper.getWritableDatabase();
2.通过SQLiteDatabase的单例函数openOrCreateDatabase进行创建
sqLiteDatabase=SQLiteDatabase.openOrCreateDatabase("/data/data/com.xxx.xxx/databases/“+DATABASE_NAME+.db",null);
两种方式都得到了SQLiteDatabase,因为接下来的数据库数据操作都需要它来完成。
使用结束或者不需使用可以sqLiteOpenHelper.close();
关闭;
SQLiteDatabase
数据库数据操作类
讲到这里不得不说下,sqlite的定义是轻量级数据库,本意是为移动设备使用,但也可以在webapp 或者是java项目中使用,只不过在android api中替我们封装了很多便捷的方法,可以不通过sql语句去操作数据库。在这里推荐如果对sql语句比较熟悉还是使用sql语句操作。
增加一条数据 insert
public boolean insertValue(Map<String,Object> insert){
if (TextUtils.isEmpty(insert.toString())) {
return false;
}
ContentValues values = new ContentValues();
values.put(TABLE_VALUE_ID,Integer.valueOf(insert.get(TABLE_VALUE_ID).toString()));
values.put(TABLE_VALUE_NAME,insert.get(TABLE_VALUE_NAME).toString());
values.put(TABLE_VALUE_INFO,insert.get(TABLE_VALUE_INFO).toString());
values.put(TABLE_VALUE_TIME,Long.valueOf(insert.get(TABLE_VALUE_TIME).toString()));
return sqLiteDatabase.insert(TABLE_NAME,TABLE_VALUE_ID,values) > 0;
}
查询所有数据 select
public String queryValueAll(){
Cursor cursor = sqLiteDatabase.query(TABLE_NAME,null,null,null,null,null,null);
//判断游标是否为空
if(cursor.moveToFirst()){
//遍历游标
for(int i=0;i<cursor.getCount();i++){
cursor.move(i);
//获得ID
int id = cursor.getInt(0);
//输出ID System.out.println(id);
}
}
return cursor.toString();
}
修改更新一条数据 update
public boolean updateValue(Map<String,Object> insert){
if (TextUtils.isEmpty(insert.toString())) {
return false;
}
ContentValues values = new ContentValues();
values.put(TABLE_VALUE_ID,Integer.valueOf(insert.get(TABLE_VALUE_ID).toString()));
values.put(TABLE_VALUE_NAME,insert.get(TABLE_VALUE_NAME).toString());
values.put(TABLE_VALUE_INFO,insert.get(TABLE_VALUE_INFO).toString());
values.put(TABLE_VALUE_TIME,Long.valueOf(insert.get(TABLE_VALUE_TIME).toString()));
return sqLiteDatabase.update(TABLE_NAME,values,TABLE_VALUE_ID + "=?",new String[]{insert.get(TABLE_VALUE_ID).toString()}) > 0;
}
删除一条数据 delete
public boolean deleteValue(String key){
if (TextUtils.isEmpty(key)) {
return false;
}
return sqLiteDatabase.delete(TABLE_NAME,TABLE_VALUE_ID + "=?",new String[]{key}) > 0;
}
使用这些已经封装好的方法是很简单,但还是需要去了解sql语句才能真正了解数据库!
http://www.w3school.com.cn/sql/sql_datatypes.asp sql学习传送门
全部代码:
package com.example.hspcadmin.htmlproject.util;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.text.TextUtils;
import java.util.Locale;
import java.util.Map;
/**
* @author wzheng
* @info 分糖app使用的简单数据
* */
public class MySqliteUtil {
/**数据库相关语句及实例变量*/
private static final String DATABASE_NAME = "demo_db";
//因为SQLiteOpenHelper 的super会自动帮我们判断是否有对应数据库返回或者创建所以不用创建sql语句 否则可以用以下代码创建
//sqLiteDatabase=SQLiteDatabase.openOrCreateDatabase("/data/data/com.xxx.xxx/databases/demo_db.db",null);
private static final String TABLE_NAME = "chengdu_tm";
/**表相关语句及实例变量*/
public static final String TABLE_VALUE_ID = "id";
public static final String TABLE_VALUE_NAME = "name";
public static final String TABLE_VALUE_INFO = "info";
public static final String TABLE_VALUE_TIME = "time";
private static final String CREATE_TABLE = "CREATE TABLE IF NOT EXISTS " + TABLE_NAME + "(" + TABLE_VALUE_ID + " INTEGER PRIMARY KEY,"
+ TABLE_VALUE_NAME + " TEXT,"+ TABLE_VALUE_INFO + " TEXT,"+ TABLE_VALUE_TIME + " LONG)";
private static MySqliteUtil mySqlite = null;
private Context mContext;
private SQLiteOpenHelper sqLiteOpenHelper;
private SQLiteDatabase sqLiteDatabase;
private static final int SQLITE_VERSION = 1;
public static MySqliteUtil getInstance(){
if(mySqlite == null){
mySqlite = new MySqliteUtil();
}
return mySqlite;
}
public void open(Context context){
mContext = context;
sqLiteOpenHelper = new MySqliteOpenHelper(mContext);
sqLiteDatabase = sqLiteOpenHelper.getWritableDatabase();
sqLiteDatabase.setLocale(Locale.CHINESE);
}
public void close(){
if(sqLiteOpenHelper == null){
return;
}
sqLiteOpenHelper.close();
}
class MySqliteOpenHelper extends SQLiteOpenHelper {
public MySqliteOpenHelper(Context context) {
super(context, DATABASE_NAME, null, SQLITE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(CREATE_TABLE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
onCreate(db);
}
}
public String queryValueAll(){
Cursor cursor = sqLiteDatabase.query(TABLE_NAME,null,null,null,null,null,null);
//判断游标是否为空
if(cursor.moveToFirst()){
//遍历游标
for(int i=0;i<cursor.getCount();i++){
cursor.move(i);
//获得ID
int id = cursor.getInt(0);
//输出ID System.out.println(id);
}
}
return cursor.toString();
}
public boolean insertValue(Map<String,Object> insert){
if (TextUtils.isEmpty(insert.toString())) {
return false;
}
ContentValues values = new ContentValues();
values.put(TABLE_VALUE_ID,Integer.valueOf(insert.get(TABLE_VALUE_ID).toString()));
values.put(TABLE_VALUE_NAME,insert.get(TABLE_VALUE_NAME).toString());
values.put(TABLE_VALUE_INFO,insert.get(TABLE_VALUE_INFO).toString());
values.put(TABLE_VALUE_TIME,Long.valueOf(insert.get(TABLE_VALUE_TIME).toString()));
return sqLiteDatabase.insert(TABLE_NAME,TABLE_VALUE_ID,values) > 0;
}
public boolean deleteValue(String key){
if (TextUtils.isEmpty(key)) {
return false;
}
return sqLiteDatabase.delete(TABLE_NAME,TABLE_VALUE_ID + "=?",new String[]{key}) > 0;
}
public boolean updateValue(Map<String,Object> insert){
if (TextUtils.isEmpty(insert.toString())) {
return false;
}
ContentValues values = new ContentValues();
values.put(TABLE_VALUE_ID,Integer.valueOf(insert.get(TABLE_VALUE_ID).toString()));
values.put(TABLE_VALUE_NAME,insert.get(TABLE_VALUE_NAME).toString());
values.put(TABLE_VALUE_INFO,insert.get(TABLE_VALUE_INFO).toString());
values.put(TABLE_VALUE_TIME,Long.valueOf(insert.get(TABLE_VALUE_TIME).toString()));
return sqLiteDatabase.update(TABLE_NAME,values,TABLE_VALUE_ID + "=?",new String[]{insert.get(TABLE_VALUE_ID).toString()}) > 0;
}
}