2023年8月3日发(作者:)
SQLite使⽤原⽣的Sql语句进⾏增删改查SQLite 介绍SQLite 是⼀款内置到移动设备上的轻量型的数据库,SQLite 数据库是⽆类型的,可以向⼀个integer 的列中添加⼀个字符串。嵌⼊式的数据库,体积⼩ 功能强⼤。有⼤量相似数据的时候使⽤数据库存储。在Android平台上,集成了⼀个嵌⼊式关系型数据库—SQLite,SQLite3⽀持 NULL、INTEGER、REAL(浮点数字)、TEXT(字符串⽂本)和BLOB(⼆进制对象)数据类型,虽然它⽀持的类型只有五种,但实际上sqlite3也接受varchar(n)、char(n)、decimal(p,s) 等数据类型,只不过在运算或保存时会转成对应的五种数据类型。 SQLite最⼤的特点是你可以把各种类型的数据保存到任何字段中,但是主键只能是Integer类型的。Sqlite数据库⼀般要求主键是_id,当然也可以是数据类型⼀般数据采⽤的固定的静态数据类型,⽽SQLite采⽤的是动态数据类型,会根据存⼊值⾃动判断。SQLite具有以下常⽤的数据类型:NULL: 这个值为空值;VARCHAR(n):长度不固定且其最⼤长度为 n 的字串,n不能超过 4000;CHAR(n):长度固定为n的字串,n不能超过 254;INTEGER: 值被标识为整数,依据值的⼤⼩可以依次被存储为1,2,3,4,5,6,7,8;REAL: 所有值都是浮动的数值,被存储为8字节的IEEE浮动标记序号;TEXT: 值为⽂本字符串,使⽤数据库编码存储(TUTF-8, UTF-16BE or UTF-16-LE);BLOB: 值是BLOB数据块,以输⼊的数据格式进⾏存储。如何输⼊就如何存储,不改变格式;DATA :包含了 年份、⽉份、⽇期;TIME: 包含了 ⼩时、分钟、秒;使⽤sql语句对数据库进⾏增删改查使⽤步骤1. 创建数据管理类:SQLiteOpenHelper 是Android 提供的⼀个抽象⼯具类,负责管理数据库的创建、升级⼯作。如果我们想创建数据库,就需要⾃定义⼀个类继承SQLiteOpenHelper,然后覆写其中的抽象⽅法。SqliteOpenHelper的⽅法介绍:1、getReadableDatabase() 创建或者打开⼀个可读写的数据库,如果出现问题(磁盘满等),则打开⼀个只读的数据库。2、getWritableDatabase() 获得⼀个可读写的数据库。如果磁盘满则会抛异常。3、onCreate(SQLiteDatabase db) 只有第⼀次创建这个数据库的时候调⽤。⼀般在这个⽅法中创建数据的相应表。4、onOpen(SQLiteDatabase db) 当每次打开数据库的时候都会调⽤。这个⽅法很少使⽤5、onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion) 当升级数据库即数据库的版本号发⽣改变的时候调⽤,⼀般如果需要修改表结构就写在这⾥.//L(“alert 表名 add 列名列数据类型”);6、close() 关闭打开的所有数据库对象2. 实例化数据库管理类,创建数据库SQLiteOpenHelper 有两个⽅法均可返回SQLiteDatabase 对象:⼀、getWritableDatabase():该⽅法返回的对象和另外⼀个⽅法返回的对象没有任何差异,返回的对象对数据库都可以进⾏读、写操作,当磁盘已满或者权限不⾜的情况下该⽅法会抛出异常。⼆、getReadableDatabase():跟另外⼀个⽅法相⽐,在磁盘已满的情况下,该⽅法不会抛出异常,⽽是返回⼀个只读的数据库操作对象。根据这两种⽅法返回对象的差异,如果需要对数据库进⾏查询操作则推荐使⽤后者,如果添加、修改、删除数据则推荐使⽤前者。案例SQLiteOpenHelper/** * Created by : xiaoyehai * Create date : 2019/9/11 20:33 * description :数据库管理类,负责管理数据库的创建、升级⼯作 */public class MyDbHelper extends SQLiteOpenHelper { //数据库名字 public static final String DB_NAME = ""; //数据库版本 public static final int DB_VERSION = 1; public MyDbHelper(Context context) { super(context, DB_NAME, null, DB_VERSION); } /** *
在数据库⾸次创建的时候调⽤,创建表以及可以进⾏⼀些表数据的初始化 * * @param db */ @Override public void onCreate(SQLiteDatabase db) { //创建表 //_id为主键并且⾃增长⼀般命名为_id String sql = "create table person(_id integer primary key autoincrement,name text)"; L(sql); //可以给表初始化⼀些数据 //L("insert into person(name) values('⼩⽶')"); } /** *
数据库升级的时候回调该⽅法,在数据库版本号DB_VERSION升级的时候才会调⽤ * * @param db * @param oldVersion * @param newVersion */ @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { //给表添加⼀个字段 //L("alter table person add age integer"); } /** *
数据库打开的时候回调该⽅法 * * @param db */ @Override public void onOpen(SQLiteDatabase db) { (db); Log.e("xyh", "onOpen: "); }}数据库操作类,封装数据库的增删改查⽅法/** * Created by : xiaoyehai * Create date : 2019/9/11 20:39 * description :
数据库操作类 */public class DataBaseDao { private final MyDbHelper mDbHelper; public DataBaseDao(Context context) { //实例化数据库管理类 mDbHelper = new MyDbHelper(context); } /** *
插⼊ * * @param list */ public void insert(List
更新 * * @param id * @param personBean */ public void update(int id, PersonBean personBean) { SQLiteDatabase db = tableDatabase(); if (()) { L("update person set name=? where _id=?", new Object[]{e(), id}); (); } } /** *
根据id删除 */ public void delete(int id) { SQLiteDatabase db = tableDatabase(); if (()) { L("delete from person where _id=?", new Object[]{id}); (); } } /** *
删除所有 */ public void deleteAll() { SQLiteDatabase db = tableDatabase(); if (()) { L("delete from person"); //设置id从1开始(sqlite默认id从1开始),若没有这⼀句,id将会延续删除之前的id L("update sqlite_sequence set seq=0 where name='person'"); (); } } /** *
查询所有 */ public List
根据id查询 */ public List
删除所有 */ public void deleteAll() { SQLiteDatabase db = tableDatabase(); if (()) { L("delete from person"); //设置id从1开始(sqlite默认id从1开始),若没有这⼀句,id将会延续删除之前的id L("update sqlite_sequence set seq=0 where name='person'"); (); } }2. sqlite 删除⼀些数据后怎么把主键数据重新排序SQLite保存图⽚BLOB (binary large object),⼆进制⼤对象,是⼀个可以存储⼆进制⽂件的容器。在计算机中,BLOB常常是数据库中⽤来存储⼆进制⽂件的字段类型。BLOB是⼀个⼤⽂件,典型的BLOB是⼀张图⽚或⼀个声⾳⽂件,由于它们的尺⼨,必须使⽤特殊的⽅式来处理(例如:上传、下载或者存放到⼀个数据库)。1. 把图⽚转为⼆进制(即字节数组)2. 把⼆进制⽂件写到数据库Android数据库中存取图⽚通常使⽤两种⽅式,⼀种是保存图⽚所在路径,⼆是将图⽚以⼆进制的形式存储(sqlite3⽀持BLOB数据类型)。对于两种⽅法的使⽤,好像第⼆种⽅法不如第⼀种⽅法更受程序员欢迎,他们认为,在很多数据库语⾔⾥,处理⼤字段都是不容易的,像图⽚这样的⽂件放在数据库⾥会有问题:对数据库的读写速度永远赶不上⽂件系统的处理速度,使数据库变得巨⼤;但也有很多⼈认为像图⽚这样的数据存放在数据库中也有好处:易于备份,且备份速度绝对⽐备份⽂件快,⽐较容易数据迁移等等。其实这两种⽅法都有优缺点,具体使⽤哪种⽅法要视情况⽽定。个⼈倾向于使⽤数据库存取图⽚,因为个⼈认为存到数据库⾥的数据不会因外部数据的变化⽽丢失改变,⽐如你拍照获得⼀张图⽚,如果是将路径存到数据库,当这张照⽚被删除之后,下次读取数据库就得不到想要的结果了。
2023年8月3日发(作者:)
SQLite使⽤原⽣的Sql语句进⾏增删改查SQLite 介绍SQLite 是⼀款内置到移动设备上的轻量型的数据库,SQLite 数据库是⽆类型的,可以向⼀个integer 的列中添加⼀个字符串。嵌⼊式的数据库,体积⼩ 功能强⼤。有⼤量相似数据的时候使⽤数据库存储。在Android平台上,集成了⼀个嵌⼊式关系型数据库—SQLite,SQLite3⽀持 NULL、INTEGER、REAL(浮点数字)、TEXT(字符串⽂本)和BLOB(⼆进制对象)数据类型,虽然它⽀持的类型只有五种,但实际上sqlite3也接受varchar(n)、char(n)、decimal(p,s) 等数据类型,只不过在运算或保存时会转成对应的五种数据类型。 SQLite最⼤的特点是你可以把各种类型的数据保存到任何字段中,但是主键只能是Integer类型的。Sqlite数据库⼀般要求主键是_id,当然也可以是数据类型⼀般数据采⽤的固定的静态数据类型,⽽SQLite采⽤的是动态数据类型,会根据存⼊值⾃动判断。SQLite具有以下常⽤的数据类型:NULL: 这个值为空值;VARCHAR(n):长度不固定且其最⼤长度为 n 的字串,n不能超过 4000;CHAR(n):长度固定为n的字串,n不能超过 254;INTEGER: 值被标识为整数,依据值的⼤⼩可以依次被存储为1,2,3,4,5,6,7,8;REAL: 所有值都是浮动的数值,被存储为8字节的IEEE浮动标记序号;TEXT: 值为⽂本字符串,使⽤数据库编码存储(TUTF-8, UTF-16BE or UTF-16-LE);BLOB: 值是BLOB数据块,以输⼊的数据格式进⾏存储。如何输⼊就如何存储,不改变格式;DATA :包含了 年份、⽉份、⽇期;TIME: 包含了 ⼩时、分钟、秒;使⽤sql语句对数据库进⾏增删改查使⽤步骤1. 创建数据管理类:SQLiteOpenHelper 是Android 提供的⼀个抽象⼯具类,负责管理数据库的创建、升级⼯作。如果我们想创建数据库,就需要⾃定义⼀个类继承SQLiteOpenHelper,然后覆写其中的抽象⽅法。SqliteOpenHelper的⽅法介绍:1、getReadableDatabase() 创建或者打开⼀个可读写的数据库,如果出现问题(磁盘满等),则打开⼀个只读的数据库。2、getWritableDatabase() 获得⼀个可读写的数据库。如果磁盘满则会抛异常。3、onCreate(SQLiteDatabase db) 只有第⼀次创建这个数据库的时候调⽤。⼀般在这个⽅法中创建数据的相应表。4、onOpen(SQLiteDatabase db) 当每次打开数据库的时候都会调⽤。这个⽅法很少使⽤5、onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion) 当升级数据库即数据库的版本号发⽣改变的时候调⽤,⼀般如果需要修改表结构就写在这⾥.//L(“alert 表名 add 列名列数据类型”);6、close() 关闭打开的所有数据库对象2. 实例化数据库管理类,创建数据库SQLiteOpenHelper 有两个⽅法均可返回SQLiteDatabase 对象:⼀、getWritableDatabase():该⽅法返回的对象和另外⼀个⽅法返回的对象没有任何差异,返回的对象对数据库都可以进⾏读、写操作,当磁盘已满或者权限不⾜的情况下该⽅法会抛出异常。⼆、getReadableDatabase():跟另外⼀个⽅法相⽐,在磁盘已满的情况下,该⽅法不会抛出异常,⽽是返回⼀个只读的数据库操作对象。根据这两种⽅法返回对象的差异,如果需要对数据库进⾏查询操作则推荐使⽤后者,如果添加、修改、删除数据则推荐使⽤前者。案例SQLiteOpenHelper/** * Created by : xiaoyehai * Create date : 2019/9/11 20:33 * description :数据库管理类,负责管理数据库的创建、升级⼯作 */public class MyDbHelper extends SQLiteOpenHelper { //数据库名字 public static final String DB_NAME = ""; //数据库版本 public static final int DB_VERSION = 1; public MyDbHelper(Context context) { super(context, DB_NAME, null, DB_VERSION); } /** *
在数据库⾸次创建的时候调⽤,创建表以及可以进⾏⼀些表数据的初始化 * * @param db */ @Override public void onCreate(SQLiteDatabase db) { //创建表 //_id为主键并且⾃增长⼀般命名为_id String sql = "create table person(_id integer primary key autoincrement,name text)"; L(sql); //可以给表初始化⼀些数据 //L("insert into person(name) values('⼩⽶')"); } /** *
数据库升级的时候回调该⽅法,在数据库版本号DB_VERSION升级的时候才会调⽤ * * @param db * @param oldVersion * @param newVersion */ @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { //给表添加⼀个字段 //L("alter table person add age integer"); } /** *
数据库打开的时候回调该⽅法 * * @param db */ @Override public void onOpen(SQLiteDatabase db) { (db); Log.e("xyh", "onOpen: "); }}数据库操作类,封装数据库的增删改查⽅法/** * Created by : xiaoyehai * Create date : 2019/9/11 20:39 * description :
数据库操作类 */public class DataBaseDao { private final MyDbHelper mDbHelper; public DataBaseDao(Context context) { //实例化数据库管理类 mDbHelper = new MyDbHelper(context); } /** *
插⼊ * * @param list */ public void insert(List
更新 * * @param id * @param personBean */ public void update(int id, PersonBean personBean) { SQLiteDatabase db = tableDatabase(); if (()) { L("update person set name=? where _id=?", new Object[]{e(), id}); (); } } /** *
根据id删除 */ public void delete(int id) { SQLiteDatabase db = tableDatabase(); if (()) { L("delete from person where _id=?", new Object[]{id}); (); } } /** *
删除所有 */ public void deleteAll() { SQLiteDatabase db = tableDatabase(); if (()) { L("delete from person"); //设置id从1开始(sqlite默认id从1开始),若没有这⼀句,id将会延续删除之前的id L("update sqlite_sequence set seq=0 where name='person'"); (); } } /** *
查询所有 */ public List
根据id查询 */ public List
删除所有 */ public void deleteAll() { SQLiteDatabase db = tableDatabase(); if (()) { L("delete from person"); //设置id从1开始(sqlite默认id从1开始),若没有这⼀句,id将会延续删除之前的id L("update sqlite_sequence set seq=0 where name='person'"); (); } }2. sqlite 删除⼀些数据后怎么把主键数据重新排序SQLite保存图⽚BLOB (binary large object),⼆进制⼤对象,是⼀个可以存储⼆进制⽂件的容器。在计算机中,BLOB常常是数据库中⽤来存储⼆进制⽂件的字段类型。BLOB是⼀个⼤⽂件,典型的BLOB是⼀张图⽚或⼀个声⾳⽂件,由于它们的尺⼨,必须使⽤特殊的⽅式来处理(例如:上传、下载或者存放到⼀个数据库)。1. 把图⽚转为⼆进制(即字节数组)2. 把⼆进制⽂件写到数据库Android数据库中存取图⽚通常使⽤两种⽅式,⼀种是保存图⽚所在路径,⼆是将图⽚以⼆进制的形式存储(sqlite3⽀持BLOB数据类型)。对于两种⽅法的使⽤,好像第⼆种⽅法不如第⼀种⽅法更受程序员欢迎,他们认为,在很多数据库语⾔⾥,处理⼤字段都是不容易的,像图⽚这样的⽂件放在数据库⾥会有问题:对数据库的读写速度永远赶不上⽂件系统的处理速度,使数据库变得巨⼤;但也有很多⼈认为像图⽚这样的数据存放在数据库中也有好处:易于备份,且备份速度绝对⽐备份⽂件快,⽐较容易数据迁移等等。其实这两种⽅法都有优缺点,具体使⽤哪种⽅法要视情况⽽定。个⼈倾向于使⽤数据库存取图⽚,因为个⼈认为存到数据库⾥的数据不会因外部数据的变化⽽丢失改变,⽐如你拍照获得⼀张图⽚,如果是将路径存到数据库,当这张照⽚被删除之后,下次读取数据库就得不到想要的结果了。
发布评论