Android-SQLite数据库实例

/**

  • 当数据库需要修改的时候(两个数据库版本不同),Android系统会主动的调用这个方法。

  • 一般我们在这个方法里边删除数据库表,并建立新的数据库表.

*/

@Override

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

}

@Override

public void onOpen(SQLiteDatabase db) {

//每次成功打开数据库后首先被执行

super.onOpen(db);

}

}

创建表

表格的创建动作由create命令完成,格式为“CREATE TABLE IFNOT EXISTS表格名称(以逗号分隔的各字段定义);”。以用户信息表为例,它的建表语句如下所示:

//创建数据库表,执行建表语句

@Override

public void onCreate(SQLiteDatabase db) {

Log.e(getClass().getName(), “onCreate”);

//创建表语句

String SQL_CREATE_ENTRIES = "CREATE TABLE IF NOT EXISTS "

  • TABLE_NAME + “(”

  • _ID + " INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,"

  • COLUMN_NAME+" VARCHAR NOT NULL,"

  • COLUMN_AGE+" INTEGER NOT NULL,"

  • COLUMN_UPDATE_TIME+" VARCHAR NOT NULL" + "); ";

//执行完整的sQL语句

db.execSQL(SQL_CREATE_ENTRIES);

}

上面的SQL语法与其他数据库的SQL语法有所出入,相关的注意点说明见下:

①SQL语句不区分大小写,无论是create与table这类关键词,还是表格名称、字段名称,都不区分大小写。唯一区分大小写的是被单引号括起来的字符串值。

②为避免重复建表,应加上IF NOT EXISTS关键词,例如CREATE TABLE IFNOT EXISTS表格名称…

③SQLite支持整型INTEGER、长整型LONG、字符串VARCHAR、浮点数FLOAT,但不支持布尔类型。布尔类型的数据要使用整型保存,如果直接保存布尔数据,在入库时sQLite会自动将它转为0或1,其中0表示false,1表示true。

④建表时需要唯一标识字段,它的字段名为_id。创建新表都要加上该字段定义,例如_id lNTEGER PRIMARY KEY AUTOINCREMENT NOT NULL。

删除表

表格的删除动作由drop命令完成,格式为“DROP TABLE IFEXISTS表格名称;”。下面是删除用户信息表的SQL语句例子:

//删除表

public void deleteTable(SQLiteDatabase db) {

String SQL_DELETE_ENTRIES = "DROP TABLE IF EXISTS " + TABLE_NAME;

db.execSQL(SQL_DELETE_ENTRIES);

}

打开数据库表

下面这段代码会返回一个 SQLiteDatabase 类的实例,使用这个对象,你就可以查询或者修改数据库。

//打开数据库的读连接(查询数据库)

public SQLiteDatabase openReadLink() {

if (mDB == null || !mDB.isOpen()) {

mDB = mHelper.getReadableDatabase();

}

return mDB;

}

//打开数据库的写连接(可写数据库)

public SQLiteDatabase openwriteLink() {

if (mDB == null || !mDB.isOpen()) {

mDB = mHelper.getWritableDatabase();

}

return mDB;

}

关闭数据库

//由于在数据库关闭时,调用getWritableDatabase()和getReadableDatabase()的成本比较高,

// 因此只要您有可能需要访问数据库,就应保持数据库连接处于打开状态。通常情况下,

// 最好在发出调用的Activity的onDestroy()中关闭数据库。

@Override

protected void onDestroy() {

userDBHelper.closeLink();

super.onDestroy();

}

添加数据

使用 SQLiteDatabase 对象的insert()。

//往该表添加多条记录

public long insert(List infoList) {

long result = -1;

for (int i = 0; i < infoList.size(); i++) {

UserInfoBean info = infoList.get(i);

//不存在唯一性重复的记录,则插入新记录

ContentValues cv = new ContentValues();

cv.put(_ID, info.get_id());

cv.put(COLUMN_NAME, info.getName());

cv.put(COLUMN_AGE, info.getAge());

cv.put(COLUMN_UPDATE_TIME, info.getUpdate_time());

//执行插入记录动作,该语句返回插入记录的行号

result = mDB.insert(TABLE_NAME, “”, cv);

if (result == -1) {//添加成功则返回行号,添加失败则返回-1

return result;

}

}

return result;

}

方法使用:

List list = new ArrayList<>();

list.add(new UserInfoBean(“10”, “帅次次”, 20, “09:00”));

list.add(new UserInfoBean(“12”, “朱元璋”, 30, “11:00”));

list.add(new UserInfoBean(“15”, “赵匡胤”, 40, “13:00”));

list.add(new UserInfoBean(“18”, “李世民”, 50, “15:00”));

long l = userDBHelper.insert(list);

tv_sql.setText(“插入成功:” + l);

修改数据

使用SQLiteDatabase 对象的update()方法。

//根据条件更新指定的表记录

public int update(UserInfoBean info, String condition) {

ContentValues cv = new ContentValues();

cv.put(COLUMN_NAME, info.getName());

cv.put(COLUMN_AGE, info.getAge());

cv.put(COLUMN_UPDATE_TIME, info.getUpdate_time());

//执行更新记录动作,该语句返回更新的记录数量

return mDB.update(TABLE_NAME, cv, condition, null);

}

方法使用:

UserInfoBean bean = new UserInfoBean(“武媚娘”, 32,“12:00”);

userDBHelper.update(bean, “_id=18”);

查找数据

使用SQLiteDatabase 对象的query()方法。

//根据指定条件查询记录,并返回结果数据列表

public List query() {

List infoList = new ArrayList();

//执行记录查询动作,该语句返回结果集的游标

//SELECT语句内容作为 query()方法的参数,比如:要查询的表名,要获取的字段名,WHERE条件,

//包含可选的位置参数,去替代WHERE条件中位置参数的值,GROUP BY条件,HAVING条件。

//除了表名,其他参数可以是null

Cursor cursor = mDB.query(TABLE_NAME, null, null, null, null, null, null);

//循环取出游标指向的每条记录

while (cursor.moveToNext()) {

UserInfoBean info = new UserInfoBean();

info._id = cursor.getString(0);//取出字符串

info.name = cursor.getString(1);//取出字符串

info.age = cursor.getInt(2);//取出整型数

info.update_time = cursor.getString(3);//取出字符串

infoList.add(info);

}

cursor.close();

// 查询完毕,关闭数据库游标

return infoList;

}

方法使用:

userDBHelper.query();

删除数据

使用SQLiteDatabase 对象的delete()方法。

//根据指定条件删除表记录

public int delete(String condition) {

//执行删除记录动作,该语句返回删除记录的数目

return mDB.delete(TABLE_NAME, condition, null);

}

方法使用:

userDBHelper.delete(“_id=12”);

未创建表或者删除表后不要对表进行操作报错

1、添加数据失败(Error)程序报错

android.database.sqlite.SQLiteException: no such table: user_info (code 1)

2、删改查数据(AndroidRuntime)程序崩溃

android.database.sqlite.SQLiteException: no such table: user_info (code 1)

各参数说明

table:表名称

colums:列名称数组

selection:条件子句,相当于where

selectionArgs:条件语句的参数数组

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助

因此我收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。**

[外链图片转存中…(img-BPmnB7gt-1715374449536)]

[外链图片转存中…(img-KHEJy1F4-1715374449537)]

[外链图片转存中…(img-DhDE6OoS-1715374449539)]

[外链图片转存中…(img-m2HnlOZV-1715374449540)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值