AndroidStudio-3.2.1(十四)SQLite基本操作

本篇介绍android数据库SQLite的增删改查基本操作及使用Navicat查看数据库。

android设备上的程序一般使用SQLite作为存储数据库,android sdk应封装了对sqlite的常用操作。SQLite是一个单机版数据库,类似于access,存储文件是.db文件。

增删改查

1、先实现一个数据库操作类,继承自SQLiteOpenHelper。有3个主要方法:

  • 构造函数: 这里需要数据库名和版本号,用来创建数据库
  • onCreate :这里编写创建表的sql语句。我们这里创建一个user表,有ID、Age、Birthday、Online4个字段,分别是int、int、date、boolen类型。
  • onUpgrade:升级处理,一般当版本号变大时,对现有库进行升级处理。
  • 具体调用:

DbHelper dbHelper = new DbHelper(getApplicationContext());
dbHelper .addRecord()//自定义方法

实现代码:

public class DbHelper extends SQLiteOpenHelper {
    private static final int DB_VERSION = 1;
    private static final String DB_NAME = "users.db";
    public static final String TABLE_Users = "tuser";

    public DbHelper(Context context) {
        // 传递数据库名与版本号给父类
        super(context, DB_NAME, null, DB_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        // 创建表
        String sql = "create table if not exists " + TABLE_Users +
                " (Id integer primary key, UserName text, Age integer, " +
                "Birthday Date,Online boolean)";
        db.execSQL(sql);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        if (newVersion > oldVersion) {
            String sql = "DROP TABLE IF EXISTS " + TABLE_Users;
            db.execSQL(sql);
            onCreate(db);
        }
    }
}

2、增加记录。
在表里增加记录用到ContentValues键值对结构,把对应列名的值添加进去(有点儿ORM的意思)。注意没有Date类型,需要转为String。最后调用getWritableDatabase().insert方法。

    public void addRecord(String username, int age, boolean online, Date birthday) {
        ContentValues contentValues = new ContentValues();
        contentValues.put("UserName", username);
        contentValues.put("Age", age);
        contentValues.put("Birthday", birthday.toString());
        contentValues.put("Online", online);
        getWritableDatabase().insert(TABLE_Users, null, contentValues);
    }

如果需要事务,那就酱式儿:

db = getWritableDatabase();
db.beginTransaction();
...
db.insertOrThrow(...);
db.setTransactionSuccessful();

3、删除记录
免疫SQL注入,从使用参数做起。

    public void deleteRecord(String username) {
        getWritableDatabase().delete(TABLE_Users,
                "UserName=?", new String[]{username});
    }

4、更新记录,也使用ContentValues。

    public void updateRecord(String username) {
        ContentValues contentValues = new ContentValues();
        contentValues.put("Age", 18);
        contentValues.put("Online", true);
        getWritableDatabase().update(TABLE_Users,
                contentValues, "UserName=?", new String[]{username});
    }

5、查询记录。
所有的数据库查询大概都会用到Cursor。

    public void queryRecord(String username){
        // 相当于 select * from students 语句
        Cursor cursor = getReadableDatabase().query(TABLE_Users, null,
                "UserName=?", new String[]{username},
                null, null, null, null);
        while (cursor.moveToNext()) {
            int Id = cursor.getInt(0); // 直接通过索引获取字段值
             int age = cursor.getInt(cursor.getColumnIndex("Age"));// 直接通过列名获取字段值
            String online = cursor.getString(cursor.getColumnIndex("Online"));
            String birthday = cursor.getString(cursor.getColumnIndex("Birthday"));
            System.out.println("id: " + Id + " Age: " + age+ " Online: " + online+ " Birthday: " + birthday);
        }
        cursor.close();
    }

Cursor的其它方法:
1 c.move(int offset); //以当前位置为参考,移动到指定行
2 c.moveToFirst(); //移动到第一行
3 c.moveToLast(); //移动到最后一行
4 c.moveToPosition(int position); //移动到指定行
5 c.moveToPrevious(); //移动到前一行
6 c.moveToNext(); //移动到下一行
7 c.isFirst(); //是否指向第一条
8 c.isLast(); //是否指向最后一条
9 c.isBeforeFirst(); //是否指向第一条之前
10 c.isAfterLast(); //是否指向最后一条之后
11 c.isNull(int columnIndex); //指定列是否为空(列基数为0)
12 c.isClosed(); //游标是否已关闭
13 c.getCount(); //总数据项数
14 c.getPosition(); //返回当前游标所指向的行数
15 c.getColumnIndex(String columnName);//返回某列名对应的列索引值
16 c.getString(int columnIndex); //返回当前行指定列的值

6、以上程序的配套界面:
在这里插入图片描述

Navicat查看数据库

Navicat是一款数据库界面端,可以管理Oracle、SQLite、Postgre、Mysql等众多非猪流数据库。
1、先把刚才的数据库文件导出到本地。打开as的DeviceFileExplorer,在/data/data/程序包名/databases下面,右键db文件,另存到本地桌面。
在这里插入图片描述)
2、打开Navicat,新建SQLite连接。
在这里插入图片描述
3打开连接,就能看到数据表user了。
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值