SQLite数据库

一.SQLite数据库介绍

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

二.数据库核心类

1.SQLiteOpenHelper 数据库的帮助类, “用于数据库的创建和版本更新”
(1)定义一个类, 继承SQLiteOpenHelper
(2)重写构造方法 :提供数据库的基本信息 : 上下文对象,数据库名称,Null,数据库的版本号
(3)重写父类的方法:
onCreate():第一次创建数据库时调用, 只会执行一次 – “初始化表,初始化数据”
onUpgrade()
2.SQLiteDatabase 数据库的操作类, “操作数据库: 执行sql语句/增/删/改/查”
(0)获取SQLiteDatabase对象
(1)执行sql 语句
void execSQL(String sql,String[] bindArgs); 执行增删改
Cusor rawQuery(String sql,String[] selectionArgs); 执行查询
(2)执行方法 – 封装好的方法 (适用于菜鸟级别的程序员)
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;

数据库代码

package com.example.day9;

import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

public class MainActivity extends AppCompatActivity {

    private TextView textView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        textView=findViewById(R.id.textview);
    }

    public void click(View view) {
        switch (view.getId()){
            case R.id.one:

                break;
                //增1
            case R.id.two:
                //第一次进创建数据库,第二次进检查版本号
                MyDataBaseHelp myDataBaseHelp = new MyDataBaseHelp(this, "day9", null, 1);
                //database:安卓提供的操作类
                SQLiteDatabase db = myDataBaseHelp.getWritableDatabase();

                //专用的数据格式
                ContentValues values = new ContentValues();
                values.put("name","aaa");
                values.put("age",12);

                db.insert("user",null,values);

                textView.setText(db+"");
                break;
                //增2
            case R.id.three:

                MyDataBaseHelp myDataBaseHelp1 = new MyDataBaseHelp(MainActivity.this, "day9", null, 2);
                SQLiteDatabase db2 = myDataBaseHelp1.getWritableDatabase();
                db2.execSQL("insert into user(name,age,sex) values ('Asuna','女',110)");

                break;
                //改1
            case R.id.four:
                MyDataBaseHelp myDataBaseHelp2 = new MyDataBaseHelp(this, "day9", null, 2);
                SQLiteDatabase db3 = myDataBaseHelp2.getWritableDatabase();
                db3.execSQL("update user set age =10 where name=?",new String[]{"Amlv"});
                break;
                //改2
            case R.id.five:
                MyDataBaseHelp myDataBaseHelp3 = new MyDataBaseHelp(this, "day9", null, 2);
                SQLiteDatabase db4 = myDataBaseHelp3.getWritableDatabase();

                ContentValues values1 = new ContentValues();
                values1.put("age",12);

                int update = db4.update("user", values1, "name=?", new String[]{"Amlv"});

                break;
                //删1
            case R.id.six:

                MyDataBaseHelp myDataBaseHelp4 = new MyDataBaseHelp(this, "day9", null, 2);
                SQLiteDatabase db5 = myDataBaseHelp4.getWritableDatabase();

                db5.execSQL("delete from user where name=?",new String[]{"Amlv"});

                break;
                //删2
            case R.id.seven:
                MyDataBaseHelp myDataBaseHelp5 = new MyDataBaseHelp(this, "day9", null, 2);
                SQLiteDatabase db6 = myDataBaseHelp5.getWritableDatabase();


                int delete = db6.delete("user","name=?",new String[]{"Asuna"});


                break;
                //查
            case R.id.eight:
                MyDataBaseHelp myDataBaseHelp6 = new MyDataBaseHelp(this, "day9", null, 2);

                SQLiteDatabase db7 = myDataBaseHelp6.getWritableDatabase();

                //创建集合
                ArrayList<Map<String,Object>> list = new ArrayList<>();

                //通过列查询
                Cursor cursor = db7.rawQuery("select * from user", null);
                //通过属性名查询
                /**
                 * table:表名
                 * columns:要查询出来的列名
                 * selection:查询条件子句
                 * selectionArgs:对应于selection语句中占位符的值
                 * groupBy:相当于select语句group by关键字后面的部分
                 * having:相当于select语句having关键字后面的部分
                 * orderBy:相当于select语句order by关键字后面的部分
                 * limit:指定偏移量和获取的记录数,相当于select语句limit关键字后面的部分
                 */
                Cursor user = db7.query("user", null, null, null, null, null, null);
                //遍历游标
                while (cursor.moveToNext()) {

//                    //通过列名,获取所在列的编号
//                    int name = cursor.getColumnIndex("name");
//                    //通过列的编号,得到该列的数据
//                    String message = cursor.getString(name);
//
                    String name = user.getString(user.getColumnIndex("name"));
                    Map<String, Object> map = new HashMap<>();
                    map.put("name",name);
                    list.add(map);
                    //log打印

                }

                break;
                //多条增加-多条删除,防止数据出现意外  出现问题回滚,
            case R.id.nine:
                MyDataBaseHelp myDataBaseHelp7 = new MyDataBaseHelp(this, "day9", null, 2);
                SQLiteDatabase db8 = myDataBaseHelp7.getWritableDatabase();

                db8.beginTransaction();//开启事务

                for (int i = 0; i < 100; i++) {
                    db8.execSQL("insert into user(name,age,sex) values ('"+i+"aaa','男',10)");

                }
                db8.setTransactionSuccessful();//成功

                db8.endTransaction();//结束事务
                db8.close();//关闭
                break;

                


        }

    }
}

自定义类:

package com.example.day9;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.support.annotation.Nullable;

public class MyDataBaseHelp extends SQLiteOpenHelper {

    private Context context;
    private  String name;//数据库名字
    private SQLiteDatabase.CursorFactory factory;//工厂类
    int version; //数据库版本号


    public MyDataBaseHelp( Context context,  String name,  SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);
        this.name=name;
        this.factory=factory;
        this.version=version;
    }

    //没有数据库执行这个方法,创建库、表
    @Override
    public void onCreate(SQLiteDatabase sqLiteDatabase) {
        String sql="create table user(id integer primary key autoincrement,name varchar(10),age integer)";
        sqLiteDatabase.execSQL(sql);
    }

    //更新数据库  - 比原来的大,调用这个方法,版本更新。版本号一样,直接打开。
    @Override
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int oldVersion, int newVerson) {
        String sql="alter table user add sex varchar(10)" ;
        sqLiteDatabase.execSQL(sql);
    }
}

事务

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值