Androide SQLiteDatabase数据库操作(转)
SQLite可以解析大部分的标准SQL语句:
建表语句:create table 表名(主键名 integer primary key autoincrement(设置为自增列),其他列名及属性)或(主键名 integer primary key )SQLite数据库中将所有声明为“integer primary key”的列自动识别为自增列。
查询语句:select * from 表名 where 条件子句 group by 分组子句 having…order by 排序子句 DESC(降序)(ASC 升序)。
分页语句:select * from 表名 limit 记录数 offset 开始位置
或者 select * from 表名 limit 开始位置,记录数
插入语句:insert into 表名(字段列表) values (值列表)
更新语句:update 表名 set 字段名=值 where 条件子句
删除语句:delete from 表名 where 条件子句
删表语句:drop table if exists 表名
增加字段语句:
alter table 表名 add column 列名 字段类型
修改数据库名称
alter table 表名 rename to 新表名
而为了方便对数据库进行版本管理,建议在开发项目的时候使用SQLiteOpenHelper类,它提供了两个重要的方法,分别是
onCreate(SQLiteDatabase db)——用于初次使用软件时生成数据库,一旦数据库存在则不会调用此方法。函数是在第一次创建数据库的时候执行的,仅仅生成DataBaseHelper对象的时候是不会调用该函数的,而只有当实现DataBaseHelper对象的getReadableDataBase时或者是调用了getWritableDataBase时,如果是第一次创建数据库,那么就一定会调用onCreate()函数 。
onUpgrade(SQLiteDatabase db,int oldVersion,int vewVersion)——用于升级软件时更新数据库表结构,如增加表、列字段等操作。
提示一下,在软件升级前,最好对原有数据进行备份,在新表建好后把数据导入新表中。
实现了这两个方法,就可以用他的getWritableDatabase()和getReadableDatabase()来获得数据库。
强调下:当第一次创建数据库时,当实现DataBaseHelper对象的getReadableDataBase时或者是调用了getWritableDataBase时,系统自动调用oncreater()方法(当然程序中也可以调用);
如果用户需要升级数据库表结构,需要主动调用onUpgrade(SQLiteDatabase db,int oldVersion,int vewVersion),传入一个新的版本的号。
查询操作:在使用SQLite的进行查询时最好用占位符“?”来代替各值,注意直接用?而不是'?'。
例如:
SQLiteDatabase db=databaseHelper.getWritableDatabase();
db.execSQL(“update person set name=?,age=? where personid=?”,new Obect{person.getName(),person.getAge(),person.getId()});
execSQL()方法是用来执行除查找语句外的sql语句,查找语句用rawQuery()来执行它会放回一个Cursor。当然,他还提供了封装好的Java类方法供我们操作。具体方法不介绍了,可以直接查看文档中SQLiteDatabase类的用法。
插入操作:
插入一行记录,可以通过三种方式实现:
第一种,封装列-值对,调用 db.insert(table, nullColumnHack, values)或者db.insertOrThrow(table, nullColumnHack, values)方法插入,插入成功返回行号,失败时返回-1.
ContentValues values=new ContentValues();
values.put(MyHelper.COUNTRY, "中国");
values.put(MyHelper.CODE,86);
//插入一行数据
db.insert(MyHelper.TD_NAME, MyHelper.ID, values);
如果传入的values为空的话,则将插入一行各列指为NULL或0的数据,(如果列是Integer类型,则0,其它类型为NULL)。
第二种,组织SQL语句,使用 db.execSQL(String sql)或 db.execSQL(String sql,Object[] data)执行,无返回值。
String sql1="insert into "
+MyHelper.TD_NAME+"("
+MyHelper.COUNTRY+","
+MyHelper.CODE+")values"
+"(?,789)";
String[] data={"Japan"};
db.execSQL(sql1, data);
第三种,使用update(String table, ContentValues values, String whereClause, String[] whereArgs)
更新行数据,注意WhereClause为update的where条件,不带关键字where:如:
SQLiteDatabase db = this.getWritableDatabase();
String where = BOOK_ID + " = ?";
String[] whereValue = { Integer.toString(id) };
ContentValues cv = new ContentValues();
cv.put(BOOK_NAME, bookname);
cv.put(BOOK_AUTHOR, author);
db.update(TABLE_NAME, cv, where, whereValue);
公众号【一个码农的日常】 技术群:319931204 1号群: 437802986 2号群: 340250479
出处:http://zhangs1986.cnblogs.com/
码云:https://gitee.com/huanzui
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?