Android 中sqlite的使用方式

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;
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值