android SQLite数据库

本文详细介绍了Android中使用的SQLite数据库,包括其特性、数据类型的灵活性、标准SQL支持情况及分页查询方法。此外还提供了创建数据库的具体步骤和示例代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

android是一个小型的设备,不可能安装一个Mysql数据库在我们的手机手,本身手机上的内存就有限,所以android嵌入了一个很小的关系型数据库就是SQLite,和其他数据库不同的是SQLite存储数据时不区分类型,


比如:一个字段声明为Integer类型,我们也可以存入一个字符串类型数据,一个字段声明为Boolean类型,我们也可以存储一个浮点型数据

除非是主键被定义为Integer,这时只能存储64位整数,


创建数据库表时可以不指定数据类型,但是在实际的项目开发中,肯定是每人这么写的,这样其他人没办法读懂,不利于后期的维护,


SQLite支持大部分sql的标准语句,增删改查都是通用的,分页查询和MYsql相同

SELECT * FROM person LIMIT 20 OFFSET 10

SELECT * FROM person LIMIT10,20

指的是从第10+1条开始取20条数据


在android中创建数据库

1:继承SQLiteOpenHelper,因为SQLiteOpenHelper是抽象的类,它里面有二个抽象的方法需要子类去具体实现,因为抽象类他不知道子类的业务需求是什么,所以只能做成抽象的方法了

2:重写onCreate()

3:重写onUpGrade()

现在写一个例子说明下:

MyHelper.java

package com.handcool.sqlite;


import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;


public class MyHelper extends SQLiteOpenHelper {
private static final String DB_NAME="handcool";
private static final int version = 1;
private static final String TAG = "MyHelper";
public MyHelper(Context context) {
super(context, DB_NAME, null, version);
}
/**
* 当数据库被创建的时候 会自动执行onCreate()方法,当已有数据库时,就不会再执行此方法
* 也就是说这个方法只会执行一次,一般在这都是创建表的结构
*/
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE person(id,Integer,name varchar(20))");
Log.e(TAG,"onCreate方法执行了");
}
/**
* 从上面的构造函数中最后一个参数(version)我们知道这是数据库版本,从1开始,当数据库版本发生变化时,会执行onUpgrade()方法
* 一般添加什么字段啊 ,对数据库进行一些操作  都在这执行
*/
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Log.e(TAG,"onUpgrade方法执行了");
}
}

这个类继承了SQLiteOpenHelper类,就代表着数据库,我们再写个单元测试,测试下他的结果;如图


就执行了onCreate()方法,而没有执行onUpgrade()方法,因为数据库版本没有升级,所以这个验证时对的,再看看表的结构


数据库文件在data/data/包名/databases目录下,请看截图:


我在这里放了一个错误,之前的数据库文件名后缀没有写.db,导致我 无法查看其表的结构,

原来好像是后缀名写不写都是可以的,今天没写就遇到了这个问题,


现在我把数据库版本改为2,看看打印的日记信息


发现oncreate()方法没有打印出来,所以我们可以总结为

1:oncreate()方法只有在数据库创建的时候才会调用,但数据库已存在时,不会执行oncreate()方法,

2:但数据库版本发生变化时,会执行onUpgra()方法


在android2.3以后api有点变化,当我们把数据库版本从3改为2时,意味着数据库版本降级,那么会执行

@Override
public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
super.onDowngrade(db, oldVersion, newVersion);
}

这个方法















资源下载链接为: https://pan.quark.cn/s/f989b9092fc5 今天给大家分享一个关于C#自定义字符串替换方法的实例,希望能对大家有所帮助。具体介绍如下: 之前我遇到了一个算法题,题目要求将一个字符串中的某些片段替换为指定的新字符串片段。例如,对于源字符串“abcdeabcdfbcdefg”,需要将其中的“cde”替换为“12345”,最终得到的结果字符串是“ab12345abcdfb12345fg”,即从“abcdeabcdfbcdefg”变为“ab12345abcdfb12345fg”。 经过分析,我发现不能直接使用C#自带的string.Replace方法来实现这个功能。于是,我决定自定义一个方法来完成这个任务。这个方法的参数包括:原始字符串originalString、需要被替换的字符串片段strToBeReplaced以及用于替换的新字符串片段newString。 在实现过程中,我首先遍历原始字符串,查找需要被替换的字符串片段strToBeReplaced现的位置。找到后,就将其替换为新字符串片段newString。需要注意的是,在替换过程中,要确保替换操作不会影响后续的查找和替换,避免遗漏或重复替换的情况发生。 以下是实现代码的大概逻辑: 初始化一个空的字符串result,用于存储最终替换后的结果。 使用IndexOf方法在原始字符串中查找strToBeReplaced的位置。 如果找到了,就将originalString中从开头到strToBeReplaced现位置之前的部分,以及newString拼接到result中,然后将originalString的查找范围更新为strToBeReplaced之后的部分。 如果没有找到,就直接将剩余的originalString拼接到result中。 重复上述步骤,直到originalStr
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值