SQLite介绍and使用

一,sqlite介绍

1,sqlite:轻量级数据库->不区分数据类型  嵌入式数据库->不需要安装相应的软件支持 直接调用系统提供的API就可以使用了

 

2,创建数据库实际上就是一个特殊的一个文件 这个文件在包下面

 

二,SQLite的简单使用:

1,创建一个类继承SQLiteOpenHelper,实现构造方法,onCreate 和 onUpgrade

//继承这个需要添加一个构造方法  还需要添加未实现的方法

public class MyHelPer extends SQLiteOpenHelper {

 

    // 因为父类 没有无参的构造方法

    public MyHelPer(Context context) {

        // 参数2:数据库名字

        // 参数4:数据库版本号 这个版本号 只能升 不能降

        // 把参数写死删除多余的参数。

        super(context, "heima.db", null, 1);

    }

    // 第一次创建数据库的时候会调用 只会调用一次 它会用来初始化表结构

    @Override

    public void onCreate(SQLiteDatabase db) {

        System.out.println("onCreate");

        //表结构初始化。如果你想要id自动增长 那么就需要把id 设为 Integer primary key

        db.execSQL("create table student(id Integer primary key,name text,age text)");

    }

    // 数据库升级的时候 会调用

    @Override

    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

        System.out.println("onUpgrade");

        db.execSQL("alter table student add nick text");

    }

}

2,对数据库里的数据进行增删改查

public class SqliteTest extends AndroidTestCase {

 

    public void add() {

        //获取SQLite对象创建对象

        MyHelPer helPer = new MyHelPer(getContext());

//      helPer.getReadableDatabase(); // 可读  如果存储空间满 不会报错 会给你返回一个可读的数据库

//      helPer.getWritableDatabase();// 可写     如果存储空间满 会报错

        SQLiteDatabase db = helPer.getReadableDatabase();

        for (int i = 0; i < 10; i++) {

            //执行SQL语句

            db.execSQL("insert into student values(null,'张三',18" + i + ")");

        }

}

    public void remove() {

        MyHelPer helPer = new MyHelPer(getContext());

        SQLiteDatabase db = helPer.getReadableDatabase();

        db.execSQL("delete from student where id = 1");

    }

    public void update() {

        MyHelPer helPer = new MyHelPer(getContext());

        SQLiteDatabase db = helPer.getReadableDatabase();

        db.execSQL("update student set name = '李四'");

    }

 

    public void query() {

        MyHelPer helPer = new MyHelPer(getContext());

        SQLiteDatabase db = helPer.getReadableDatabase();

        // rawQuery获取当前光标

        Cursor cursor = db.rawQuery("select * from student ", null);

        //        cursor.moveToFirst();    移动至第一

        //        cursor.moveToLast();     移动至末尾

        //光标移动到下一个  

        while (cursor.moveToNext()) {

            String id = cursor.getString(cursor.getColumnIndex("id"));

            String name = cursor.getString(cursor.getColumnIndex("name"));

            String age = cursor.getString(cursor.getColumnIndex("age"));

            String nick = cursor.getString(cursor.getColumnIndex("nick"));

            System.out.println("id = "+id +" name = "+name + " age = "+age +" nick = "+nick);

        }

    }

}

 

三,Google 自己封装好的API进行调用。

public class GooGleAPITest extends AndroidTestCase {

 

    private SQLiteDatabase db;

 

    // 单元测试之前会执行

    @Override

    protected void setUp() throws Exception {

        super.setUp();

        MyHelPer helPer = new MyHelPer(getContext());

        db = helPer.getReadableDatabase();

    }

 

    public void add() {

        ContentValues values = new ContentValues();

        values.put("name", "李四");

        values.put("age", 20);

        // 参数1:表名

        // 参数2: 如果没有写对表格中对应的字段 那么这个值 就会没有对应的字段的值

        // 参数3:一个ContentValues里面封装了与表中对应的字段的数据

        long result = db.insert("student", "", values);

        if (result != -1) {

            System.out.println("插入成功");

        } else {

            System.out.println("插入失败");

        }

    }

 

    public void remove() {

        // 参数1:表名

        // 参数2: 删除条件

        // 参数3: 删除条件的值

        int result = db.delete("student", "id=?", new String[] { "11" });

        if (result > 0) {

            System.out.println("删除成功");

        } else {

            System.out.println("删除失败");

        }

 

    }

 

    public void update() {

        // 参数1:表名

        // 参数2:ContentValues

        // 参数3:更新的条件

        // 参数4:更新条件的值

        ContentValues values = new ContentValues();

        values.put("name", "李四");

        int result = db

                .update("student", values, "id=?", new String[] { "10" });

        if (result > 0) {

            System.out.println("更新成功");

        } else {

            System.out.println("更新失败");

        }

    }

 

    public void query() {

        // 参数1:表名

        // 参数2:列名

        // 参数3:查询条件

        // 参数4:查询条件的值

        // 参数5:分组查询

        // 参数6:分组查询的条件

        // 参数7:排序

        // 参数8:分页查询

        Cursor cursor = db.query("student", null, null, null, null, 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"));

            System.out.println("id = "+id +" name = "+name +" age = "+age);

        }

    }

}

四,Android 事务

1,事务:要么代码执行都成功,要么代码执行都失败

2,事务的标准写法:

事务的标准写法:

db.beginTransaction();

try {

...

db.setTransactionSuccessful();

} finally {

db.endTransaction();

}

3,事务的用法:

public class BankTest extends AndroidTestCase {

 

    private SQLiteDatabase db;

 

    @Override

    protected void setUp() throws Exception {

        super.setUp();

        MyHelper helper = new MyHelper(getContext());

        db = helper.getReadableDatabase();

    }

    public void bankTest() {

 

        // 事务: 一组sql语句 要么都执行成功 要么都执行失败   回滚

        db.beginTransaction(); // 标记事务开始

        try {

            //使用增删改查

            db.execSQL("update bank set money=money-4000 where id =1");

            db.execSQL("update bank set money=money+4000 where id=2");

            db.setTransactionSuccessful(); // 标记事务执行成功

        } finally {

            db.endTransaction();// 标记事务结束

        }

    }

}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

兴帅_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值