当前位置:   article > 正文

SQLite数据库

sqlite数据库

目录

SQLite数据库

在Android中的使用

SQLiteOpenHelper中的方法

增删改查

添加数据 insert()

查询数据 query(),rawQuery()

查询和添加案例

数据库帮助类:

MainActivity:

Activity_main.xml:

SQLite数据库

        SQLite是一个轻量级的嵌入数据库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。您不需要在系统中安装配置。SQLite 引擎不是一个独立的进程,可以按应用程序需求进行静态或动态连接。SQLite 直接访问其存储文件

Android中的使用

        Android为了让用户能够更加方便地管理数据库,专门提供了一个 SQLiteOpenHelper帮助类,借助这个类就可以非常简单地对数据库进行创建。SQLiteOpenHelper是一个抽象类,这意味着如果想使用它的话,这就需要自己 创建一个类去继承SQLiteOpenHelper帮助类就可以了

  1. class MyDBOpenHelper(context:Context,name:String,factory:CursorFactory,version
  2.                 : Int) : SQLiteOpenHelper(context,name,factory,version) {
  3. }

        SQLiteOpenHelper有三个构造方法可供重写,一般使用参数少点的那个构造方 法即可,必须要有它才能对数据库进行操作,这个构造方法中,接受4个参数

Cursor游标结果集

        游标是一段私有的SQL工作区,即一段内存区域,用于暂时存放受SQL语句影响到的数据。通俗理解就是将受影响的数据暂时存放到一个内存区域的虚表中,这个虚表就是游标。

        游标在数据库的事务回滚中有非常重要的作用。由于对数据库的操作会暂时存放在游标中,只要不提交,就可以根据游标中的内容进行回滚。这样有利于数据库的安全。

SQLiteOpenHelper中的方法

        SQLiteOpenHelper  有两个抽象方法 onCreate() onUpgrade()。我们必须在自己的帮助类中重写这两个方法。除外,其中还有两个重要的实例方法getReadableDatabase()getWritableDatabase()

        这两个方法都可以创建或打开一个现有的数据库(如果一个数据库存在则直接打开,否则新建一个新的数据库),并返回一个可以对数据库进行读 [] 操作的对象。不同的是:当数据库不可写入(如磁盘空间满时),getReadableDatabase()返回的对象是将以只读方式打开数据库,另一个会抛出一个异常

  1. class MyDBOpenHelper(context:Context,name:String,factory:CursorFactory,version: Int)
  2.                                  : SQLiteOpenHelper(context,name,factory,version) {
  3.     //创建数据库
  4.     override fun onCreate(db: SQLiteDatabase?) {
  5.         //可能为null要用空安全操作 >>> ?.
  6.         db?.execSQL("create table stu_info(" +
  7.                 "id INTEGER primary key autoincrement," +
  8.                 "sex varchar(10)," +
  9.                 "name varchar(20))")
  10.     }
  11.     //升级数据库
  12.     override fun onUpgrade(db: SQLiteDatabase?, p1: Int, p2: Int) {
  13.     }
  14. }

增删改查

        对数据库中的数据表的操作,一共有四种:添加、查询、更新、删除。每一种 操作又各自对应了一种SQL命令:insert(添加),select(查询),update(更新),delete(删除)。

添加数据 insert()

方法有三个参数

  1. 第一个参数表名
  1. 第二个参数是某些为空的列自动赋值
  1. 第三个参数是ContentValue对象,它提供了一系列put()方法重载,用于向ContentValues中添加对象,只需要将表中的每个列名以及相应的待添加的数 据传入即可。

查询数据 query(),rawQuery()

  1. query(表名, 要查询出来的列名, 查询条件, 对应于selection语句中占位符的值, groupBy, having, orderBy, limit)
  1. rawQuery(sql语句String[ ]  是?的条件参数,如果?这个内占位符容为null的话就表示把所有的都查出来)

查询和添加案例

创建stu_db数据库和stu_info学生表,对表进行添加和动态查询操作,效果图:

数据库帮助类:

  1. class MyDBOpenHelper(context:Context)
  2.                                  : SQLiteOpenHelper(context,"stu_db",null,1) {
  3.     //创建数据库
  4.     override fun onCreate(db: SQLiteDatabase?) {
  5.         //db要用空安全操作?.
  6.         db?.execSQL("create table stu_info(" +
  7.                 "id INTEGER primary key autoincrement," +
  8.                 "sex varchar(10)," +
  9.                 "name varchar(20))")
  10.     }
  11.     //升级数据库
  12.     override fun onUpgrade(db: SQLiteDatabase?, p1: Int, p2: Int) {
  13.     }
  14. }

MainActivity

  1. class MainActivity : AppCompatActivity() {
  2.     private var result = "" //反馈文本字符串
  3.     private var myDBHelper:SQLiteOpenHelper?= null//定义数据库帮助类对象
  4.     private var db:SQLiteDatabase?=null//定义一个可以操作的数据库对象
  5.     override fun onCreate(savedInstanceState: Bundle?) {
  6.         super.onCreate(savedInstanceState)
  7.         setContentView(R.layout.activity_main)
  8.         initView() //初始化方法
  9.         butAdd() //添加按钮监听器
  10.         butQuery() // 查询按钮监听器
  11.     }
  12.     //初始化方法
  13.     fun initView(){
  14.         myDBHelper = MyDBOpenHelper(this)//实例化数据库帮助类
  15.         db = myDBHelper?.writableDatabase //创建获取可读写操作的数据库
  16.     }
  17.     //添加按钮监听器
  18.     fun butAdd(){
  19.         insert?.setOnClickListener {
  20.             var contentValues = ContentValues() //用 contentValue 表示一行
  21.             //把输入的id,name,sex放到对应的列
  22.             contentValues.put("id",idText.text.toString())
  23.             contentValues.put("name",nameText.text.toString())
  24.             contentValues.put("sex",sexText.text.toString())
  25.             //调用insert()添加
  26.             var insert = db?.insert("stu_info", null, contentValues)
  27.             //提示框
  28.             if(insert!=null){
  29.                 Toast.makeText(this,"添加成功!",Toast.LENGTH_SHORT).show()
  30.             }else{
  31.                 Toast.makeText(this,"添加失败!",Toast.LENGTH_SHORT).show()
  32.             }
  33.         }
  34.     }
  35.     // 查询按钮监听器
  36.     fun butQuery(){
  37.         query?.setOnClickListener {
  38.            var paramName:String = "id" //定义查询条件,默认根据id查询
  39.             var arrayOf = arrayOf<String?>(null) //查询条件参数数组
  40.             //如果id未输入根据 name查 ?: sex查
  41.             if (idText?.text.toString()!=""){
  42.                 arrayOf[0]=idText?.text.toString() //获取id框数据,放入数组
  43.            }else if(nameText?.text.toString()!=""){
  44.                paramName = "name"
  45.                 arrayOf[0]=nameText?.text.toString()//获取name框数据,放入数组
  46.            }else if(sexText?.text.toString()!=""){
  47.                paramName = "sex"
  48.                 arrayOf[0]=sexText?.text.toString()//获取sex框数据,放入数组
  49.            }
  50.             //调用rawQuery传入sql和参数,获取cursor结果集
  51.             var cursor = db?.rawQuery(
  52.                     "select * from stu_info where ${paramName}=?" , arrayOf)
  53.             if (cursor?.count!=0){
  54.                 result = "" //清空结果反馈字符串
  55.                 //遍历结果集,追加反馈文本字符串
  56.                 while (cursor?.moveToNext() == true){
  57.                    result = "${result}\n" +
  58.  "学号:${cursor.getString(0)} 性别:${cursor.getString(1)} 姓名:${cursor.getString(2)}\n" +
  59.                             ">>>>>>>>>>>"
  60.                 }
  61.                 tv.text = result//tv框打印反馈字符串
  62.             }else{
  63.                 //如果结果集为空,tv打印对应提示
  64.                 tv.text = "${paramName}=${arrayOf[0]},不存在"
  65.             }
  66.         }
  67.     }
  68. }

Activity_main.xml:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3.     xmlns:app="http://schemas.android.com/apk/res-auto"
  4.     xmlns:tools="http://schemas.android.com/tools"
  5.     android:layout_width="match_parent"
  6.     android:layout_height="match_parent"
  7.     tools:context=".MainActivity"
  8.     android:orientation="vertical"
  9.     >
  10.     <TextView
  11.         android:id="@+id/tv"
  12.         android:layout_width="match_parent"
  13.         android:layout_height="wrap_content"
  14.         android:gravity="center"
  15.         android:text="(^-^)"
  16.         android:textSize="20sp"
  17.         android:layout_margin="40dp"
  18.         android:layout_gravity="center"/>
  19.     <EditText
  20.         android:hint="学号:"
  21.         android:id="@+id/idText"
  22.         android:layout_width="match_parent"
  23.         android:layout_height="wrap_content" />
  24.     <EditText
  25.         android:hint="姓名:"
  26.         android:id="@+id/nameText"
  27.         android:layout_width="match_parent"
  28.         android:layout_height="wrap_content"/>
  29.     <EditText
  30.         android:hint="性别:"
  31.         android:id="@+id/sexText"
  32.         android:layout_width="match_parent"
  33.         android:layout_height="wrap_content"/>
  34.     <LinearLayout
  35.         android:layout_width="match_parent"
  36.         android:layout_height="wrap_content"
  37.         android:orientation="horizontal"
  38.         >
  39.         <Button
  40.             android:id="@+id/insert"
  41.             android:layout_width="wrap_content"
  42.             android:layout_height="wrap_content"
  43.             android:text="添加"
  44.             android:textSize="25sp"
  45.             android:layout_margin="2dp"
  46.             android:layout_weight="1"
  47.             />
  48.         <Button
  49.             android:id="@+id/clear"
  50.             android:layout_width="wrap_content"
  51.             android:layout_height="wrap_content"
  52.             android:text="清除"
  53.             android:textSize="25sp"
  54.             android:layout_margin="2dp"
  55.             android:layout_weight="1"
  56.             />
  57.     </LinearLayout>
  58.     <LinearLayout
  59.         android:layout_width="match_parent"
  60.         android:layout_height="wrap_content"
  61.         android:orientation="horizontal">
  62.         <Button
  63.             android:id="@+id/query"
  64.             android:layout_margin="3dp"
  65.             android:layout_weight="1"
  66.             android:text="查询"
  67.             android:textSize="25sp"
  68.             android:layout_width="wrap_content"
  69.             android:layout_height="wrap_content"/>
  70.     </LinearLayout>
  71. </LinearLayout>

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/木道寻08/article/detail/785078
推荐阅读
相关标签
  

闽ICP备14008679号