SQLite数据库操作+事务处理

SQLite数据库操作

SQLite数据库介绍

  1. Android系统中集成的轻量级的数据库
  2. 特点:
    轻量级 是以单个文件的形式进行存取
    跨平台 支持多个操作系统
    零配置 无需安装, 直接使用
    嵌入式 内嵌到手机中
  3. 在程序的内部可以通过数据库的名称访问, 其他应用不能访问
  4. .路径: data/data/应用程序包名/database/ 自定义名.db
  5. 存放的类型:
    NULL 空值
    INTEGER 整型(不用int)
    VARCHAR 可变长度的字符数据
    TEXT 文本字符串
    BOOLEAN 布尔
    DATE
    TIME

数据库核心类

  1. SQLiteOpenHelper 数据库的帮助类:用于数据库的创建和版本更新
    定义一个类,继承SQLiteOpenHelper
    重写构造方法:提供数据库的基本信息 : 上下文对象,数据库名称,Null,数据库的版本号
    重写父类的方法:
    onCreate():第一次创建数据库时调用,只会执行一次
    onUpgrade()
  2. SQLiteDatabase 数据库的操作类,操作数据库:执行sql语句/增/删/改/查
    获取SQLiteDatabase对象
    一. 执行sql 语句
    void execSQL(String sql,String[] bindArgs); 执行增删改
    Cusor rawQuery(String sql,String[] selectionArgs); 执行查询
    二. 执行方法 —— 封装好的方法 (适用于菜鸟级别的程序员)
    insert() 插入数据
    update() 修改数据
    delete() 删除数据
    query() 查询数据

SQL语句复习

  1. 创建表:
    create table student(_id integer primary key autoincrement,name varchar(30),age integer,address varchar(30))
  2. 添加数据:insert into student values(null,‘职业大坑’,18,‘北京市’)
  3. 修改数据:update student set age=13,address=‘北京市’ where name=‘职业大坑’
  4. 查询数据:select * from student where 字段 = ‘值’模糊查询: select * from 表名 where name like ‘%任意%’ select * from student order by age desc
    sum(列名) 求和
    max(列名) 最大值
    min(列名) 最小值
    avg(列名) 求平均值
    count(列名) 统计记录数
  5. 删除数据:delete from student where id=12

SQLite代码

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    Button button1,button2,button3,button4,button5;
    SQLiteDatabase database;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        button1 = findViewById(R.id.bt_insert);
        button2 = findViewById(R.id.bt_delete);
        button3 = findViewById(R.id.bt_update);
        button4 = findViewById(R.id.bt_query);

        button1.setOnClickListener(this);
        button2.setOnClickListener(this);
        button3.setOnClickListener(this);
        button4.setOnClickListener(this);

        MyHelper myHelper = new MyHelper(MainActivity.this);
        database = myHelper.getWritableDatabase();
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.bt_insert:
                insert();
                break;
            case R.id.bt_delete:
                delete();
                break;
            case R.id.bt_update:
                update();
                break;
            case R.id.bt_query:
                query();
                break;
        }
    }
//  查询
    private void query() {
//        database.rawQuery("select * from student where name = ?",new String[]{"职业大坑"});

          Cursor cursor = database.query("student",null,"name=?",new String[]{"职业大坑"},null,null,null);
          while (cursor.moveToNext()){
              String id = cursor.getString(cursor.getColumnIndex("id"));
              String name = cursor.getString(cursor.getColumnIndex("name"));
              String age = cursor.getString(cursor.getColumnIndex("age"));
              Log.d("###","id:"+id+" name:"+name+" age:"+age);
          }
    }

//  修改
    private void update() {
//        database.execSQL("update student set age = ? where name = ?",new Object[]{18,"职业大坑"});

        ContentValues contentValues = new ContentValues();
        contentValues.put("age",20);
        int student = database.update("student", contentValues, "age=?", new String[]{"17"});
        if (student>0){
            Toast.makeText(this, "修改成功!", Toast.LENGTH_SHORT).show();
        }
    }

//  删除
    private void delete() {
//        database.execSQL("delete from student where id = ?",new Object[]{1});

        int student = database.delete("student", "id=?", new String[]{"1"});
        if (student>0){
            Toast.makeText(this, "删除成功!", Toast.LENGTH_SHORT).show();
        }
    }
//  增加
    private void insert() {
        database.execSQL("insert into student values (?,?,?)",new Object[]{null,"职业大坑",17});
    }
}

使用事务批量处理数据

什么是事务?
就是把多件事情当做一件事情来处理。在Android应用程序开发中,经常会遇到需要进行数据库操作的时候,有关数据库事务处理对Android应用程序的稳定性和效率提升非常重要。

事务的好处

  1. 首先Android数据库操作,特别是进行写操作的时候非常慢,将所有操作打包成一个事务能大大提高处理速度。
  2. 保证数据的一致性,让一个事务中的所有操作都成功执行,或者失败,或者所有操作回滚。
    例如:应用程序初始化时需要批量插入大量数据,单独的使用for循环方法导致应用响应缓慢,因为 sqlite插入数据的时候默认一条语句就是一个事务,有多少条数据就有多少次磁盘操作。我的应用初始5000条记录也就是要5000次读写磁盘操作。
    而且不能保证所有数据都能同时插入。(有可能部分插入成功,另外一部分失败,后续还得删除。太麻烦)

代码

 	button5 = findViewById(R.id.shiwu);
	button5.setOnClickListener(this);
	 @Override
    public void onClick(View v) {
        switch (v.getId()){
          case R.id.shiwu:
                shiwu();
                break;
        }
        //  事物
    private void shiwu() {
        database.beginTransaction();
        try {
            for (int i=0;i<100;i++){
                ContentValues contentValues = new ContentValues();
                contentValues.put("name","职业大坑"+i);
                database.insert("studnet",null,contentValues);
//              报个错
                if(i==500){
                   throw new NullPointerException();
                }
                database.setTransactionSuccessful();
            }
        }catch (Exception e){
            Log.d("###","报了个错");
        }finally {
            database.endTransaction();
        }
    }

以上就是我所掌握的对SQLite数据库以及事务处理的理解

你可能感兴趣的:(第一个月)