安卓Sqlite的使用

SQLite是一种超轻量级的嵌入式数据库,大小只有几百KB,但是其语法支持标准SQL语法,同时还遵循了数据库的ACID事务,所以学过其他数据库的开发人员都很容易掌握其使用。
sql语法就不介绍了,直接看在android中的使用
SQLiteOpenHelper——封装好的数据库操作辅助类,需重写
重写方法:
onCreate:初始化数据库,创建表,添加初始数据
onUpgrade:数据库版本升级时的数据库操作,如备份删除数据库等
常用方法:
getReadableDatabase() 获取SQLiteDatabase对象,操作数据库
getWritableDatabase() 获取SQLiteDatabase对象,操作数据库
区别:在磁盘空间满或不可写时,1方法将获得只读的数据库对象,而2方法会报错,在正常情况下,获取到的都是可读写的数据库对象。

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

/**
 * Created by ez360 on 2016/9/19.
 */

public class DBHelper extends SQLiteOpenHelper {

    private static final String name="my";//数据库名
    private static final int version =1;//版本号

    //重写构造方法的时候选择参数少的一项
    public DBHelper(Context context) {
        //1:上下文 2:数据库名称 3:游标创建工厂 4:数据库版本 版本只能是整数 1 2 3..
        super(context, name, null, version);
    }

    //数据库的初始化 SQLiteDatabase数据库操作对象
    //一般只在第一次运行和版本更新的时候调用
    @Override
    public void onCreate(SQLiteDatabase sqLiteDatabase) {
        //创建数据库  主键默认自增
        sqLiteDatabase.execSQL("create table student(" + "_id integer not null primary key autoincrement," + "name varchar(20)," + "phone varchar(11)," + "gender varchar(2))");
        //添加一条测试数据
        sqLiteDatabase.execSQL("insert into student values(null,?,?,?)",new Object[]{"小强","1008611","男"});
    }

    /**
     * 在版本升级的时候调用
     * 修改version 为2 表示版本升级 就会调用这个方法
     * @param db 数据库操作对象
     * @param oldVersion 旧版本号
     * @param newVersion 新版本号
     */
    @Override
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {

    }
}

相信大家对数据库的操作,已经非常的清楚了:
无非就是:增删改查
在android数据库的创建是需要创建对象才能创建的、
在activity类中创建出一个数据库类对象
创建好数据对象就可以操作数据了 通过SQLiteDatabase获取 两种获取方法的区别上面已经提到过了

//创建数据
DBHelper helper =new DBHelper(this);
//调用数据操作对象
SQLiteDatabase dbWrite=helper.getWritableDatabase();
SQLiteDatabase dbRead=helper.getReadableDatabase();

下面咱们主要看下:增删改查
1,增:顾名思义咱们要往数据库里面增加数据
插入语句:insert into 表名(字段列表) values(值列表)。如: insert into person(name, age) values(‘小强’,3)
添加:(long) insert(String table,String nullColumnHack,ContentValues values)  
nullColumnHack:为空列
ContentValues values:通过键值对存储添加的数据 key为列 value为值
insert方法 底层是通过拼接字符串的方式 如果ContentValues是空的 拼接成的sql语句无法执行会报错 所以给一个可以为空的列 当ContentValues为空时也可以执行 有兴趣的可以看一下源码

2,删除:(int) delete(String table,String whereClause,String[] whereArgs) 
table: 表名
whereClause:where条件 列名 占位符 id=?
whereArgs:参数值数组

3,更新:(int) update(String table, ContentValues values, String whereClause, String[] whereArgs)
参数意思同上

4,查询:(Cursor) query(boolean distinct,String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit)
返回值是一个游标 这个query参数较多 简单的查询就还是写一条sql语句简单点
boolean distinct 去重复
String table 表名
String[] columns要查询的列
String selection查询条件
String[] selectionArgs查询参数值
String groupBy分组
String having分组条件
String orderBy排序
String limit分页查询限制
关闭数据库:(void) close()
执行一条sql语句:(void) execSQL(String sql) 增删改查
查询查询sql:(Cursor) rawQuery(String sql, String[] selectionArgs)

事务

       try {
            db.beginTransaction();//开启事务
            // db.update();
            // db.insert();
            db.setTransactionSuccessful(); //没有设置事物成功 finally就会回滚
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            db.endTransaction();
        }    

执行sql语句 和封装好的方法
查询

   private void query() {
        StringBuffer sb=new StringBuffer("select * from student where 1=1");
        //参数集合
        List<String> params=new ArrayList<>();
        if(!TextUtils.isEmpty(id)){
            sb.append(" and _id=?");
            params.add(id);
        }
        if(!TextUtils.isEmpty(phone)){
            sb.append(" and phone=?");
            params.add(phone);
        }
        if(!TextUtils.isEmpty(name)){
            sb.append(" and name=?");
            params.add(name);
        }
        if(!TextUtils.isEmpty(gender)){
            sb.append(" and gender=?");
            params.add(gender);
        }
        SQLiteDatabase db=helper.getReadableDatabase();
        String [] projection=new String [params.size()];
        params.toArray(projection);
        //返回值 游标
        Cursor cursor=db.rawQuery(sb.toString(),projection);
    //判断游标是否为空,是否有一个值
        while(cursor!=null&&cursor.moveToNext()){
            // getColumnIndex获取列的下标 cursor.getXXXX()获取指定列的值
            String name=cursor.getString(cursor.getColumnIndex("name"));
            Integer id=cursor.getInt(cursor.getColumnIndex("_id"));
        }
    }

用不到的参数就让它为空吧 遍历数据就while循环就好咯

Cursor c = db.query("student",null,null,null,null,null,null);//查询并获得游标

删除:

private void delete() {
        getAllText();
        //拼接sql语句
        StringBuffer sb=new StringBuffer("delete from student where 1=1");
        //保存参数的list
        List params=new ArrayList();
        //判断条件  动态拼接
        if(!TextUtils.isEmpty(id)){
            sb.append(" and _id=?");
            params.add(id);
        }
        if(!TextUtils.isEmpty(phone)){
            sb.append(" and phone=?");
            params.add(phone);
        }
        if(!TextUtils.isEmpty(name)){
            sb.append(" and name=?");
            params.add(name);
        }
        if(!TextUtils.isEmpty(gender)){
            sb.append(" and gender=?");
            params.add(gender);
        }
        SQLiteDatabase db=helper.getWritableDatabase();
        if (params.size()!=0){
            Object [] o=new Object[params.size()];
            params.toArray(o);//将数据存放到指定的数组中
            //执行删除
            db.execSQL(sb.toString(),o);
        }else{
            db.execSQL(sb.toString());
        }
        Toast.makeText(this,"删除完成",Toast.LENGTH_SHORT).show();
    }

String whereClause = "name=?";//删除的条件
String[] whereArgs = {"123"};//删除的条件参数
db.delete("student",whereClause,whereArgs);//执行删除```
 private void insert() {//保存数据到object数组
        Object [] o=new Object[]{name,phone,gender};
        //获取数据库操作对象
        SQLiteDatabase db=helper.getWritableDatabase();
        //sql:sql语句  bingArgs:参数数组
        db.execSQL("insert into student values(null,?,?,?)",o);
        //关闭连接
        db.close();
        Toast.makeText(this,"增加成功",Toast.LENGTH_SHORT).show();
    }

ContentValues cv = new ContentValues();//实例化一个ContentValues用来装载待插入的数据
cv.put("name","123"); 
db.insert("student",null,cv);//执行插入操作

更新代码:

private void update() {
        StringBuffer sb=new StringBuffer("update student set ");
        List params=new ArrayList();
        if(!TextUtils.isEmpty(phone)){
            sb.append("phone=?,");
            params.add(phone);
        }
        if(!TextUtils.isEmpty(name)){
            sb.append("name=?,");
            params.add(name);
        }
        if(!TextUtils.isEmpty(gender)){
            sb.append("gender=?,");
            params.add(gender);
        }
        if (params.size()!=0){
            //更新操作拼接字符串末尾有一个","需要去除
            //删除最后一位的“,”
            sb.setLength(sb.length()-1);
            sb.append(" where 1=1");
            //通过id指定 更新那行数据
            if(!TextUtils.isEmpty(id)){
                sb.append(" and _id=?");
                params.add(id);
            }else{
                Toast.makeText(this,"请填写id",Toast.LENGTH_SHORT).show();
                return;
            }
            SQLiteDatabase db=helper.getWritableDatabase();
            Object [] o=new Object[params.size()];
            params.toArray(o);//将数据存放到指定的数组中
            db.execSQL(sb.toString(),o);
        }
        ntentValues cv = new ContentValues();//实例化ContentValues
    cv.put("name","123");//添加要更改的字段及内容
    String whereClause = "phone=?";//修改条件
    String[] whereArgs = {"12312313213"};//修改条件的参数
    db.update("student",cv,whereClause,whereArgs);//执行修改 

数据库的简单用法,有问题的伙伴们请留言~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值