SQLite数据库 和 事物

SQLite数据库

1、SQLite数据库介绍

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

2、数据库核心类

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()	查询数据

3、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;

4、数据库简单代码

举例:创建一张表student(id name age address)
1.自定义类继承SQLiteOpenHelper
注意:onCreate方法只会执行一次,如果想要修改表的字段,修改oncreate方法的话是不行的,需要删除之前生成的数据库
a.创建类
//TODO 1:自定义类继承SQLiteOpenHelper 数据库帮助类:创建数据库
public class MySQList extends SQLiteOpenHelper {

    //参数一 上下文 参数二 数据库名称 参数三 工厂 null使用默认  参数四 版本号 1
    public MySQList( Context context) {
        super(context, "mySQL_1", null, 1);
    }

    //TODO 3:方法  创建表初始化数据
    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("create table xinhao(id integer primary key autoincrement,name varchar(20),age integer)");
        db.execSQL("insert into xinhao values(null,'张新浩',17),(null,'新星',18),(null,'小明',19)");
    }

    //TODO 更新数据库:不用写
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    }
}

b.执行增删改查方法
public void insert(View view) {
        MyHelper dbOpenHelper=new MyHelper(this);
        SQLiteDatabase db = dbOpenHelper.getWritableDatabase();
        //方式一:
        db.execSQL("insert into User(Name,Sex,Age) values('尹志强','男',18)");
        //方式二:
        //参数一表名 参数二:默认值  参数三:要插入的值
        ContentValues values = new ContentValues();
        values.put("Name","殷志强");
        values.put("Sex","男");
        values.put("Age","18");
        db.insert("User",null,values);
    }
    //TODO:修改数据
    public void updateData(View view) {
        MyHelper dbOpenHelper=new MyHelper(this);
        SQLiteDatabase db = dbOpenHelper.getWritableDatabase();
        //方式一:
        db.execSQL("update User set Age = 3 where name=?",new String[]{"尹志强"});
        //方式二:参数一:表名  参数二:要修改的值  参数三:条件 参数四:为条件中的?赋值
        ContentValues values = new ContentValues();
        values.put("Age","3");
        int  num=db.update("User",values,"name=?",new String[]{"尹志强"});

    }
    //TODO:删除数据
    public void deleteData(View view) {
        MyHelper dbOpenHelper=new MyHelper(this);
        SQLiteDatabase db = dbOpenHelper.getWritableDatabase();
        //方式一:
        String sql="delete from User where name = ? ";
        db.execSQL(sql,new String[]{"张磊"});
        //方式二:参数一:表名  参数二:要修改的值  参数三:条件 参数四:为条件中的?赋值
        ContentValues values = new ContentValues();
        values.put("Age","3");
        int  num=db.update("User",values,"name=?",new String[]{"尹志强"});

    }
    //TODO:查询数据
    public void query1(View view) {
        //创建一个数据库
        MyHelper dbOpenHelper=new MyHelper(this);
        SQLiteDatabase db = dbOpenHelper.getWritableDatabase();
        //方式一
        //Cursor cursor = db.rawQuery("select * from User",null);
        //方式二
        Cursor cursor=db.query("User",null,null,null,null,null,null);
        //循环输出
        while (cursor.moveToNext())
        {
            //cursor.getColumnIndex("Name")  通过列名  获取所在列的编号
            //cursor.getString(列的编号);    通过列的编号, 得到该列的数据
            String Name = cursor.getString(cursor.getColumnIndex("Name"));
            String Sex = cursor.getString(cursor.getColumnIndex("Sex"));
            int Age = cursor.getInt(cursor.getColumnIndex("Age"));
            Log.i("yaotianxue","姓名: " + Name +", 性别: "+ Sex + ",  年龄 : "+ Age);

        }
    }
    

5、使用事务批量处理数据

a、什么是事务?

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

b、事务的好处?

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

c、代码
SQLiteDatabase db = myHepler.getWritableDatabase();
db.beginTransaction();//开启事务
try {
for (int  i=0;i<1000;i++) {
db.execSQL(“insert  into 表名 (字段名)  values(值)”);
}
db.setTransactionSuccessful();//成功
}catch (Exception e){
e.printStackTrace();
}finally {
db.endTransaction();//结束事务
db.close();//关闭
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值