android SQLite数据库总结

发布时间 - 2026-01-10 22:23:51    点击率:

SQLite

SQLite是一种超轻量级的嵌入式数据库,大小只有几百KB,但是其语法支持标准SQL语法,同时还遵循了数据库的ACID事务,所以学过其他数据库的开发人员都很容易掌握其使用。

sql语法就不介绍了,直接看在android中的使用

SQLiteOpenHelper——封装好的数据库操作辅助类,需重写

重写方法

onCreate:初始化数据库,创建表,添加初始数据

onUpgrade:数据库版本升级时的数据库操作,如备份删除数据库等

常用方法

getReadableDatabase()    获取SQLiteDatabase对象,操作数据库

getWritableDatabase()        获取SQLiteDatabase对象,操作数据库

区别:在磁盘空间满或不可写时,1方法将获得只读的数据库对象,而2方法会报错,在正常情况下,获取到的都是可读写的数据库对象。

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class DBHelper extends SQLiteOpenHelper {
 private static final String name="my";//数据库名
 private static final int version=1;//版本号
 //重写构造方法的时候选择参数少的一项
 public DBHelper(Context context) {
  //1:上下文 2:数据库名称 3:游标创建工厂 4:数据库版本 版本只能是整数 1 2 3..
  super(context, name, null, version);
 }
 //数据库的初始化 SQLiteDatabase数据库操作对象
 //一般只在第一次运行和版本更新的时候调用
 @Override
 public void onCreate(SQLiteDatabase db) {
  //创建数据库 主键默认自增
  db.execSQL("create table student(" +
    "_id integer not null primary key autoincrement," +
    "name varchar(20)," +
    "phone varchar(11)," +
    "gender varchar(2))");
  //添加一条测试数据
  db.execSQL("insert into student values(null,?,?,?)"
    ,new Object[]{"小黑","12345678901","男"});
 }
 /**
  * 在版本升级的时候调用
  * 修改version 为2 表示版本升级 就会调用这个方法
  * @param db 数据库操作对象
  * @param oldVersion 旧版本号
  * @param newVersion 新版本号
  */
 @Override
 public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
 }
}

在android数据库的创建是需要创建对象才能创建的

在activity类中创建出一个数据库类对象

创建好数据对象就可以操作数据了 通过SQLiteDatabase获取   两种获取方法的区别上面已经提到过了

     //创建数据
  DBHelper helper =new DBHelper(this);
  //调用数据操作对象
  SQLiteDatabase dbWrite=helper.getWritableDatabase();
  SQLiteDatabase dbRead=helper.getReadableDatabase();

SQLiteDatabase给我们提供了很多操作数据的方法 

删除:(int) delete(String table,String whereClause,String[] whereArgs) 

   table: 表名

   whereClause:where条件  列名 占位符  id=?

   whereArgs:参数值数组

添加:(long) insert(String table,String nullColumnHack,ContentValues values)  

    nullColumnHack:为空列

    ContentValues values:通过键值对存储添加的数据  key为列 value为值

    insert方法 底层是通过拼接字符串的方式 如果ContentValues是空的 拼接成的sql语句无法执行会报错 所以给一个可以为空的列当ContentValues为空时也可以执行 有兴趣的可以看一下源码

更新:(int) update(String table, ContentValues values, String whereClause, String[] whereArgs)

   参数意思同上

查询:(Cursor) query(boolean distinct,String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit)

    返回值是一个游标   这个query参数较多 简单的查询就还是写一条sql语句简单点

      boolean distinct 去重复

      String table 表名

      String[] columns要查询的列

      String selection查询条件

      String[] selectionArgs查询参数值

      String groupBy分组

      String having分组条件

      String orderBy排序

      String limit分页查询限制

关闭数据库:(void) close()

执行一条sql语句:(void) execSQL(String sql) 增删改查

查询查询sql:(Cursor) rawQuery(String sql, String[] selectionArgs)

事务

try {
   db.beginTransaction();//开启事务
   // db.update();
   // db.insert();
   db.setTransactionSuccessful(); //没有设置事物成功 finally就会回滚
  } catch (Exception e) {
   e.printStackTrace();
  }finally {
   db.endTransaction();
  }

贴代码咯  执行sql语句 和封装好的方法

查询

private void query() {
  StringBuffer sb=new StringBuffer("select * from student where 1=1");
  //参数集合
  List<String> params=new ArrayList<>();
  if(!TextUtils.isEmpty(id)){
   sb.append(" and _id=?");
   params.add(id);
  }
  if(!TextUtils.isEmpty(phone)){
   sb.append(" and phone=?");
   params.add(phone);
  }
  if(!TextUtils.isEmpty(name)){
   sb.append(" and name=?");
   params.add(name);
  }
  if(!TextUtils.isEmpty(gender)){
   sb.append(" and gender=?");
   params.add(gender);
  }
  SQLiteDatabase db=helper.getReadableDatabase();
  String [] projection=new String [params.size()];
  params.toArray(projection);
  //返回值 游标
  Cursor cursor=db.rawQuery(sb.toString(),projection);
    //判断游标是否为空,是否有一个值
  while(cursor!=null&&cursor.moveToNext()){
   // getColumnIndex获取列的下标 cursor.getXXXX()获取指定列的值
   String name=cursor.getString(cursor.getColumnIndex("name"));
   Integer id=cursor.getInt(cursor.getColumnIndex("_id"));
  }
 }

用不到的参数就让它为空吧   遍历数据就while循环就好咯

Cursor c = db.query("student",null,null,null,null,null,null);//查询并获得游标

更新

private void update() {
  StringBuffer sb=new StringBuffer("update student set ");
  List params=new ArrayList();
  if(!TextUtils.isEmpty(phone)){
   sb.append("phone=?,");
   params.add(phone);
  }
  if(!TextUtils.isEmpty(name)){
   sb.append("name=?,");
   params.add(name);
  }
  if(!TextUtils.isEmpty(gender)){
   sb.append("gender=?,");
   params.add(gender);
  }
  if (params.size()!=0){
   //更新操作拼接字符串末尾有一个","需要去除
   //删除最后一位的“,”
   sb.setLength(sb.length()-1);
   sb.append(" where 1=1");
   //通过id指定 更新那行数据
   if(!TextUtils.isEmpty(id)){
    sb.append(" and _id=?");
    params.add(id);
   }else{
    Toast.makeText(this,"请填写id",Toast.LENGTH_SHORT).show();
    return;
   }
   SQLiteDatabase db=helper.getWritableDatabase();
   Object [] o=new Object[params.size()];
   params.toArray(o);//将数据存放到指定的数组中
   db.execSQL(sb.toString(),o);
  }
 }
ContentValues cv = new ContentValues();//实例化ContentValues
cv.put("name","123");//添加要更改的字段及内容
String whereClause = "phone=?";//修改条件
String[] whereArgs = {"12312313213"};//修改条件的参数
db.update("student",cv,whereClause,whereArgs);//执行修改

删除

private void delete() {
  getAllText();
  //拼接sql语句
  StringBuffer sb=new StringBuffer("delete from student where 1=1");
  //保存参数的list
  List params=new ArrayList();
  //判断条件 动态拼接
  if(!TextUtils.isEmpty(id)){
   sb.append(" and _id=?");
   params.add(id);
  }
  if(!TextUtils.isEmpty(phone)){
   sb.append(" and phone=?");
   params.add(phone);
  }
  if(!TextUtils.isEmpty(name)){
   sb.append(" and name=?");
   params.add(name);
  }
  if(!TextUtils.isEmpty(gender)){
   sb.append(" and gender=?");
   params.add(gender);
  }
  SQLiteDatabase db=helper.getWritableDatabase();
  if (params.size()!=0){
   Object [] o=new Object[params.size()];
   params.toArray(o);//将数据存放到指定的数组中
   //执行删除
   db.execSQL(sb.toString(),o);
  }else{
   db.execSQL(sb.toString());
  }
  Toast.makeText(this,"删除完成",Toast.LENGTH_SHORT).show();
 }
String whereClause = "name=?";//删除的条件
String[] whereArgs = {"123"};//删除的条件参数
db.delete("student",whereClause,whereArgs);//执行删除

增加

private void insert() {//保存数据到object数组
  Object [] o=new Object[]{name,phone,gender};
  //获取数据库操作对象
  SQLiteDatabase db=helper.getWritableDatabase();
  //sql:sql语句 bingArgs:参数数组
  db.execSQL("insert into student values(null,?,?,?)",o);
  //关闭连接
  db.close();
  Toast.makeText(this,"增加成功",Toast.LENGTH_SHORT).show();
 }
ContentValues cv = new ContentValues();//实例化一个ContentValues用来装载待插入的数据
cv.put("name","123"); 
db.insert("student",null,cv);//执行插入操作

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!


# android  # SQLite  # Android编程之SQLite数据库操作方法详解  # Android SQLite事务处理结合Listview列表显示功能示例  # Android开发笔记SQLite优化记住密码功能  # Android利用listview控件操作SQLite数据库实例  # Android批量插入数据到SQLite数据库的方法  # Android SQLite数据库基本操作方法  # Android使用SQLite数据库的示例  # Android SQLite数据库版本升级的管理实现  # 为空  # 重写  # 就会  # 报错  # 装好  # 有一个  # 返回值  # 组中  # 都是  # 是一个  # 是一种  # 过了  # 就不  # 就好  # 两种  # 遍历  # 给我们  # 都很  # 有兴趣  # 较多 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Internet Explorer官网直接进入 IE浏览器在线体验版网址  教你用AI将一段旋律扩展成一首完整的曲子  Android okhttputils现在进度显示实例代码  如何在阿里云ECS服务器部署织梦CMS网站?  Laravel如何设置自定义的日志文件名_Laravel根据日期或用户ID生成动态日志【技巧】  Laravel怎么实现软删除SoftDeletes_Laravel模型回收站功能与数据恢复【步骤】  网页设计与网站制作内容,怎样注册网站?  为什么php本地部署后css不生效_静态资源加载失败修复技巧【技巧】  如何用西部建站助手快速创建专业网站?  高配服务器限时抢购:企业级配置与回收服务一站式优惠方案  SQL查询语句优化的实用方法总结  如何撰写建站申请书?关键要点有哪些?  php8.4header发送头信息失败怎么办_php8.4header函数问题解决【解答】  rsync同步时出现rsync: failed to set times on “xxxx”: Operation not permitted  微博html5版本怎么弄发语音微博_语音录制入口及时长限制操作【教程】  大同网页,大同瑞慈医院官网?  佛山网站制作系统,佛山企业变更地址网上办理步骤?  Laravel怎么处理异常_Laravel自定义异常处理与错误页面教程  网站制作大概多少钱一个,做一个平台网站大概多少钱?  详解jQuery停止动画——stop()方法的使用  家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?  如何在IIS中新建站点并配置端口与IP地址?  在线ppt制作网站有哪些软件,如何把网页的内容做成ppt?  利用vue写todolist单页应用  谷歌Google入口永久地址_Google搜索引擎官网首页永久入口  Laravel如何理解并使用服务容器(Service Container)_Laravel依赖注入与容器绑定说明  Laravel如何为API编写文档_Laravel API文档生成与维护方法  ,交易猫的商品怎么发布到网站上去?  如何在阿里云香港服务器快速搭建网站?  想要更高端的建设网站,这些原则一定要坚持!  Android自定义listview布局实现上拉加载下拉刷新功能  如何自定义建站之星网站的导航菜单样式?  Edge浏览器怎么启用睡眠标签页_节省电脑内存占用优化技巧  网站图片在线制作软件,怎么在图片上做链接?  Laravel如何配置中间件Middleware_Laravel自定义中间件拦截请求与权限校验【步骤】  购物网站制作费用多少,开办网上购物网站,需要办理哪些手续?  如何快速上传自定义模板至建站之星?  Claude怎样写约束型提示词_Claude约束提示词写法【教程】  网易LOFTER官网链接 老福特网页版登录地址  iOS中将个别页面强制横屏其他页面竖屏  Laravel怎么使用Intervention Image库处理图片上传和缩放  如何在云主机快速搭建网站站点?  JavaScript如何实现继承_有哪些常用方法  免费网站制作appp,免费制作app哪个平台好?  如何在搬瓦工VPS快速搭建网站?  如何用AI一键生成爆款短视频文案?小红书AI文案写作指令【教程】  Laravel如何实现API资源集合?(Resource Collection教程)  php读取心率传感器数据怎么弄_php获取max30100的心率值【指南】  Laravel辅助函数有哪些_Laravel Helpers常用助手函数大全  Laravel如何使用Eloquent进行子查询