android SQLite数据库总结

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;

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 db) {
        //创建数据库  主键默认自增
        db.execSQL("create table student(" +
                "_id integer not null primary key autoincrement," +
                "name varchar(20)," +
                "phone varchar(11)," +
                "gender varchar(2))");
        //添加一条测试数据
        db.execSQL("insert into student values(null,?,?,?)"
                ,new Object[]{"小黑","12345678901","男"});
    }

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

    }
}

在android数据库的创建是需要创建对象才能创建的

在activity类中创建出一个数据库类对象

创建好数据对象就可以操作数据了 通过SQLiteDatabase获取   两种获取方法的区别上面已经提到过了

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

SQLiteDatabase给我们提供了很多操作数据的方法 

删除:(int) delete(String table,String whereClause,String[] whereArgs) 

   table: 表名

   whereClause:where条件  列名 占位符  id=?

   whereArgs:参数值数组

添加:(long) insert(String table,String nullColumnHack,ContentValues values)  

    nullColumnHack:为空列

    ContentValues values:通过键值对存储添加的数据  key为列 value为值

    insert方法 底层是通过拼接字符串的方式 如果ContentValues是空的 拼接成的sql语句无法执行会报错 所以给一个可以为空的列 当ContentValues为空时也可以执行 有兴趣的可以看一下源码

更新:(int) update(String table, ContentValues values, String whereClause, String[] whereArgs)

    参数意思同上

查询:(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 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);
        }
    }
ContentValues cv = new ContentValues();//实例化ContentValues
cv.put("name","123");//添加要更改的字段及内容
String whereClause = "phone=?";//修改条件
String[] whereArgs = {"12312313213"};//修改条件的参数
db.update("student",cv,whereClause,whereArgs);//执行修改

删除

   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);//执行插入操作
时间: 2024-10-08 10:27:57

android SQLite数据库总结的相关文章

Android SQLite数据库操作示例

SQLite介绍 SQLite是一个非常流行的嵌入式数据库,它支持SQL语言,并且只利用很少的内存就有很好的性能.此外,它还是开源的,任何人都可以使用它. SQLite由以下几个组件组成:SQL编译器.内核.后端以及附件.SQLite通过利用虚拟机和虚拟数据库引擎(VDBE),使调试.修改和扩展SQLite的内核变得更加方便. SQLite支持的数据类型参考链接:http://blog.csdn.net/wzy_1988/article/details/36005947 Android在运行时(

Android Sqlite数据库加密

Android使用的是开源的SQLite数据库,数据库本身没有加密,加密思路通常有两个: 1. 对几个关键的字段使用加密算法,再存入数据库 2. 对整个数据库进行加密 SQLite数据库加密工具: 收费工具: SSE(SQLite Encryption Extension) 免费工具: SQLCipher SQLCipher使用: SQLCipher是完全开源的软件,提供256-bit AES加密 源码编译: 1. OpenSSL编译 SQLCipher源码编译需要依赖OpenSSL提供的lib

Android SQLite数据库使用示例

简单介绍一下,现在的主流移动设备像Android.iPhone等都使用SQLite作为复杂数据的存储引擎,在我们为移动设备开发应用程序时,也许就要使用到SQLite来存储我们大量的数据,所以我们就需要掌握移动设备上的SQLite开发技巧.对于Android平台来说,系统内置了丰富的API来供开发人员操作SQLite,我们可以轻松的完成对数据的存取. 下面我们用SQLite来开发一个英语词典.下图是项目结构-- MySQLite.java package sn.qdj.sqlitedemo; im

Android Sqlite 数据库版本更新

http://87426628.blog.163.com/blog/static/6069361820131069485844/ 1.自己写一个类继承自SqliteOpenHelper 2.会实现SqliteOpenHelper的两个方法 onCreate与onUpgrade,google文档对两个回调方法的解释是创建数据库的时候调用与更新数据库的版本的时候调用 3.Sqlite数据库主要是用来缓存应用的数据,而应用却是一直在更新版本,相应的数据的表的字段也会一直增加会改变或减少 4.这个时候就

Android SQLite数据库版本升级原理解析

Android使用SQLite数据库保存数据,那数据库版本升级是怎么回事呢,这里说一下. 一.软件v1.0 安装v1.0,假设v1.0版本只有一个account表,这时走继承SQLiteOpenHelper的onCreate,不走onUpgrade. 1.v1.0(直接安装v1.0) 二.软件v2.0 有2种安装软件情况: 1.v1.0   -->  v2.0              不走onCreate,走onUpgrade 2.v2.0(直接安装v2.0)          走onCrea

[Android] SQLite数据库之增删改查基础操作

    在编程中常常会遇到数据库的操作,而Android系统内置了SQLite,它是一款轻型数据库,遵守事务ACID的关系型数据库管理系统,它占用的资源非常低,可以支持Windows/Linux/Unix等主流操作系统,同一时候可以跟非常多程序语言如C#.PHP.Java等相结合.以下先回想SQL的基本语句,再讲述Android的基本操作. 一. adb shell回想SQL语句     首先,我感觉自己整个大学印象最深的几门课就包含<数据库>,所以想先回想SQL增删改查的基本语句.而在And

Android SQLite数据库基本操作

程序的最主要的功能在于对数据进行操作,通过对数据进行操作来实现某个功能.而数据库就是很重要的一个方面的,Android中内置了小巧轻便,功能却很强的一个数据库–SQLite数据库.那么就来看一下在Android程序中怎么去操作SQLite数据库来实现一些需求的吧,仍然以一个小例子开始: 在创建Android项目之前,我们应该想一下我们要定义的数据库的相关信息和里面的表格的相关信息,为了日后数据库的更新更加方便 ,我们可以用一个专门的类保存数据库的相关信息,以后如果要更新数据库的话只需要该动这个类

android sqlite数据库操作

sqlite有一点不同于其他常见数据库,就是sqlite数据库是存成文件的,可以直接把该文件从手机里导出来,以文件的形式存在,然后放到电脑上查看. Android操作数据库有如下步骤: 1.继承SQLiteOpenHelper,实现里面的方法. public class MyDbHelper extends SQLiteOpenHelper {     public MyDbHelper(Context context) {         super(context, "db3", 

Android—SQLITE数据库的设计和升降级

Google为Andriod的较大的数据处理提供了SQLite,他在数据存储.管理.维护等各方面都相当出色,功能也非常的强大.SQLite具备下列特点: 1.轻量级 使用 SQLite 只需要带一个动态库,就可以享受它的全部功能,而且那个动态库的尺寸想当小. 2.独立性 SQLite 数据库的核心引擎不需要依赖第三方软件,也不需要所谓的"安装". 3.隔离性 SQLite 数据库中所有的信息(比如表.视图.触发器等)都包含在一个文件夹内,方便管理和维护. 4.跨平台 SQLite 目前

Android——SQLite数据库(二)升级数据库、增、删、改、查、事务

xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android