android中SQLite使用及特点

作者:穷少年 时间:2023-07-24 23:33:28 

1.SQLite的特点

  • SQLite是一个轻量级数据库,它设计目标是嵌入式的,而且占用资源非常低

  • SQLite没有服务器进程,通过文件保存数据,该文件是跨平台的

  • 支持null,integer,real,text,blob五种数据类型,实际上SQLite也接受varchar,char,decimal等数据类型,只不过在运算中或保存时会转换成对应的5种数据类型,因此,可以将各种类型数据保存到任何字段中

2.SQLite的使用

 2.1数据库的创建

在android中,创建SQLite数据库非常简单。Android系统推荐使用SQLiteOpenHelper的子类创建数据库,因此需要创建一个类继承自SQLiteOpenHelper,并重写该类的onCreateonUpgrade方法即可

android中SQLite使用及特点


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

标签:android,使用,SQLite
0
投稿

猜你喜欢

  • Springboot-admin整合Quartz实现动态管理定时任务的过程详解

    2023-08-26 03:01:07
  • C#实现对Json字符串处理实例

    2023-06-21 08:26:24
  • Android中WebView图片实现自适应的方法

    2021-11-15 06:37:32
  • android studio使用SQLiteOpenHelper()建立数据库的方法

    2023-10-28 12:50:35
  • Android 使用flow实现倒计时的方式

    2023-04-13 10:36:29
  • Android集成Flutter

    2023-07-06 13:07:33
  • Java Class 加密工具 ClassFinal详解

    2023-02-10 14:58:48
  • eclipse导入appcompat项目报错解决办法

    2021-11-10 14:25:57
  • SpringBoot--- SpringSecurity进行注销权限控制的配置方法

    2022-11-11 03:49:54
  • C#实现猜数字游戏

    2021-11-16 07:29:58
  • Android 仿今日头条简单的刷新效果实例代码

    2022-06-16 12:19:18
  • SpringCloud-Alibaba-Nacos启动失败解决方案

    2023-12-19 05:34:45
  • MyBatis @Select注解介绍:基本用法与动态SQL拼写方式

    2023-07-17 05:56:43
  • C# Winfom 中ListBox的简单用法详解

    2023-03-14 20:38:47
  • linux(center OS7)安装JDK、tomcat、mysql 搭建java web项目运行环境

    2022-07-04 07:02:37
  • C#如何自动识别文件的编码

    2022-10-08 01:41:43
  • SpringBoot整合Docker实现一次构建到处运行的操作方法

    2023-01-23 04:32:14
  • C#实现类似新浪微博长URL转短地址的方法

    2023-06-02 12:59:28
  • c# 代理模式

    2022-02-19 09:48:31
  • Prometheus 入门教程之SpringBoot 实现自定义指标监控

    2022-08-02 12:58:54
  • asp之家 软件编程 m.aspxhome.com