android中SQLite使用及特点
作者:穷少年 发布时间:2023-07-24 23:33:28
标签:android,使用,SQLite
1.SQLite的特点
SQLite是一个轻量级数据库,它设计目标是嵌入式的,而且占用资源非常低
SQLite没有服务器进程,通过文件保存数据,该文件是跨平台的
支持null,integer,real,text,blob五种数据类型,实际上SQLite也接受varchar,char,decimal等数据类型,只不过在运算中或保存时会转换成对应的5种数据类型,因此,可以将各种类型数据保存到任何字段中
2.SQLite的使用
2.1数据库的创建
在android中,创建SQLite数据库非常简单。Android系统推荐使用SQLiteOpenHelper
的子类创建数据库,因此需要创建一个类继承自SQLiteOpenHelper
,并重写该类的onCreate
和onUpgrade
方法即可
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class DBHelper extends SQLiteOpenHelper {
/**
* 作为SQLiteOpenHelper子类必须有的构造方法
* @param context 上下文参数
* @param name 数据库名字
* @param factory 游标工厂 ,通常是null
* @param version 数据库的版本
*/
public DBHelper(@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
}
/**
* 数据库第一次被创建时调用该方法
* @param db
*/
@Override
public void onCreate(SQLiteDatabase db) {
// 初始化数据库的表结构,执行一条建表的SQL语句
db.execSQL("create table user(u_id int not null primary key,u_name varchar(50) not null,age int)");
}
/**
* 当数据库的版本号增加调用
* @param db
* @param oldVersion
* @param newVersion
*/
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
2.2新增(insert)
public void insert(String name,int age){
// 通过DBHelper类获取一个读写的SQLiteDatabase对象
SQLiteDatabase db=dbHelper.getWritableDatabase();
// 创建ContentValue设置参数
ContentValues contentValues=new ContentValues();
contentValues.put("name",name);
contentValues.put("age",age);
// 插入数据
// insert方法参数1:要插入的表名
// insert方法参数2:如果发现将要插入的行为空时,会将这个列名的值设为null
// insert方法参数3:contentValue
long i=db.insert("user",null ,contentValues);
// 释放连接
db.close();
}
2.3修改(update)
public void update(String name,int age){
// 通过DBHelper类获取一个读写的SQLiteDatabase对象
SQLiteDatabase db=dbHelper.getWritableDatabase();
// 创建ContentValue设置参数
ContentValues contentValues=new ContentValues();
contentValues.put("age",age);
// 修改数据
// 参数1:tablename
// 参数2:修改的值
// 参数3:修改的条件(SQL where语句)
// 参数4:表示whereClause语句中的表达式的占位符参数列表,这些字符串会替换where条件中?
db.update("user",contentValues,"name=?",new String[]{name});
// 释放连接
db.close();
}
2.4删除(delete)
public void delete(long id) {
// 通过DBHelper类获取一个读写的SQLiteDatabase对象
SQLiteDatabase db = dbHelper.getWritableDatabase();
// 参数1:tablename
// 参数2:删除的条件(SQL语句)
// 参数3:给修改的条件注入参数,一个或多个
db.delete("user", "u_id=?", new String[]{id + ""});
// 释放连接
db.close();
}
2.5查询(query)
public void query() {
// 通过DBHelper类获取一个读写的SQLiteDatabase对象
SQLiteDatabase db = dbHelper.getWritableDatabase();
// 参数1:table_name
// 参数2:columns 要查询出来的列名。相当于 select *** from table语句中的 ***部分
// 参数3:selection 查询条件字句,在条件子句允许使用占位符“?”表示条件值
// 参数4:selectionArgs :对应于 selection参数 占位符的值
// 参数5:groupby 相当于 select *** from table where && group by ... 语句中 ... 的部分
// 参数6:having 相当于 select *** from table where && group by ...having %%% 语句中 %%% 的部分
// 参数7:orderBy :相当于 select ***from ?? where&& group by ...having %%% order by@@语句中的@@ 部分,如: personid desc(按person 降序)
Cursor cursor = db.query("user", null, null, null, null, null, null);
// 将游标移到开头
cursor.moveToFirst();
while (!cursor.isAfterLast()) { // 游标只要不是在最后一行之后,就一直循环
int id=cursor.getInt(0);
String name=cursor.getString(1);
// 将游标移到下一行
cursor.moveToNext();
}
db.close();
}
3.使用SQL语句进行数据库操作
// 通过DBHelper类获取一个读写的SQLiteDatabase对象
SQLiteDatabase db = dbHelper.getWritableDatabase();
// insert
db.execSQL("insert into user (id,name,age) values (?,?,?)",new Object[]{1,"张三",18});
// update
db.execSQL("update user set name=? where id=?",new Object[]{"张三",1});
// delete
db.execSQL("delete from user where id=1");
// query
Cursor cursor = db.rawQuery("select * from user where id=?", new String[]{"1"});
4.SQLite事务
SQLite数据库同样支持事务
事务操作后一定要使用
endTransaction
()方法关闭事务,当执行到endTransaction
()时,首先会检查是否有事务执行成功标记,有则提交数据库,无则回滚数据
DBHelper dbHelper = new DBHelper(MainActivity.this, "test.db", null, 0);
// 通过DBHelper类获取一个读写的SQLiteDatabase对象
SQLiteDatabase db = dbHelper.getWritableDatabase();
// 开始事务
db.beginTransaction();
try {
// 标记数据库事务执行成功
db.setTransactionSuccessful();
}catch (Exception e){
Log.i("事务处理失败",e.getMessage());
}finally {
db.endTransaction(); //关闭事务
db.close(); // 关闭数据库
}
来源:https://blog.csdn.net/qq_42418169/article/details/115799941


猜你喜欢
- 循环依赖所谓循环依赖就是多个Bean之间依赖关系形成一个闭环,例如A->B->C->...->A 这种情况,当然,最
- Logback日志基础配置logback日志配置有很多介绍,但是有几个非常基础的,容易忽略的。下面是最简单的一个配置,注意加粗的描述<
- 简介对于一个APP来说,肯定会有一个AppBar,这个AppBar一般包含了APP的导航信息等。虽然我们可以用一个固定的组件来做为AppBa
- 本文实例讲述了C#实现在Form里面内嵌dos窗体的方法。分享给大家供大家参考。具体如下:using System;using System
- 上一篇文章谈到音频剪切、混音、拼接与转码,也详细介绍cMake配置与涉及FFmpeg文件的导入: android端采用FFmpeg进行音频混
- 详解房卡麻将分析系列 "牌局回放" 之 播放处理 昨天红孩儿给大伙讲了讲”牌局回放“的数据记录处
- 委托这个东西不是很好理解,可是工作中又经常用到,你随处可以看到它的身影,真让人有一种又爱又恨的感觉,我相信许多人被它所困扰过。一提到委托,如
- 视图绑定通过视图绑定功能,您可以更轻松地编写可与视图交互的代码。在模块中启用视图绑定之后,系统会为该模块中的每个 XML 布局文件生成一个绑
- 本文实例讲述了C#中异步回调函数用法。分享给大家供大家参考。具体如下:static void Main(string[] args){ Fu
- 本次就是记录一下我的开发过程,不是教程,纯属自己做个笔记。现在项目有个需求,需要用户在公众号发送图片消息的时候,我后台程序能接收到这个图片,
- 目录介绍需求来源传统算法问题新算法特点性能数据效果“我”是什么适用范围能用多久★★集成建议★★常规集成大型分布式集成配置变更代码示例运行环境
- 前置知识在微服务项目中,如果我们想实现服务间调用,一般会选择Feign。之前介绍过一款HTTP客户端工具Retrofit,配合SpringB
- using System.IO;using System.IO.Compression;using System.Web;using Sys
- Java读文件修改默认换行符Java默认换行符是'\n'。但有时数据并不以'\n'进行换行方法如下publi
- 要求:取指定目录下面的所有图片,以表格的型式展示并显示该图片的相对路径。服务端代码: public partial class ViewIc
- 向上转型:子类对象转为父类,父类可以是接口。公式:Father f = new Son();Father是父类或接口,son是子类。向下转型
- 一、在学习枚举之前,首先来听听枚举的优点。1、枚举能够使代码更加清晰,它允许使用描述性的名称表示整数值。2、枚举使代码更易于维护,有助于确保
- 简介一个APP如果没有页面跳转那么是没有灵魂的,页面跳转的一个常用说法就是Navigator,flutter作为一个最为优秀的前端框架,Na
- 工厂接口定义/// <summary> /// 工厂接口定义 &nbs
- 前言在开发过程中需要快速新建getXXX();setXXX()方法的时候,就会想能否批量实现呢?例如实现如下代码,一次性操作,不是一个一个码