第一行代码 第三版 第七章 7.4 SQLite数据库

7.4 SQLite

SQLite是一款轻量级的关系型数据库,支持标准的SQL语法,还遵循了数据库的ACID事务。
用于存储大量复杂的关系型数据

7.4.1 创建数据库

SQLiteOpneHelper类:可以非常简单的对数据库进行创建和升级。它是一个抽象类。如果我们要使用它,就需要创建一个自己的帮助类去继承它。
必须重写类中的两个方法:onCreateView() :创建数据库 onUpgrade() :升级数据库

两个非常重要的实例方法:
两个方法都可以创建或打开一个现有的数据库,并返回一个可对数据库进行读写操作的对象。

  • getReadableDatabase() :返回的对象将以只读方式打开。
  • getWritableDatabase() :在数据库不可写入时,会出现异常。

SQLiteOpneHelper中有两个构造方法可供重写.。选择其中一个参数少的即可。接受四个参数:1. Context 2.数据库名 3.一个可以自定义的Cursor对象,一般传入null 4.版本号。
数据库文件放在/data/data/<.package name>/databases/目录下。

class MyDatabaseHelper (val context: Context,name:String,version :Int):SQLiteOpenHelper(context,name,null,version) {
//创建表语句
    private val createBook ="create table Book ("+
            " id integer primary key autoincrement,"+
            "author text," +
            "price real," +
            "pages integer," +
            "name text)"

    override fun onCreate(db: SQLiteDatabase?) {
        db?.execSQL(createBook)//执行建表语句
        Toast.makeText(context,"Create Database succeeded",Toast.LENGTH_SHORT).show()//提示建表成功
    }

    override fun onUpgrade(db: SQLiteDatabase?, oldVersion: Int, newVersion: Int) {
        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
    }
}

//调用方式
val dbHelper = MyDatabaseHelper(this,"BookStore.db",1)
        createDatabase.setOnClickListener {
            dbHelper.writableDatabase
        }

onCreate 一般只在第一次程序时执行。

如要添加新的表:需要在更新版本号,同时在onUpgrade() 进行处理。

7.4.3 添加数据

CRUD :添加(create)、查询(retrieve)、更新(update)、删除(delete)
借助SQLiteDatabase对象可以对数据进行CRUD操作。

  • 添加数据:insert()方法 :接受是三个参数,第一个参数:表名;第二个人参数:用于在未指定添加数据的情况下为某些可以为空的列自动赋值为NULL ,一般用不上,直接传入null;第三个参数:ContentValues对象,它提供了一系列的put()方法,用于向ContentValues中添加数据。只需要将表中的每一列名以及对应的待添加的数据传入即可。
 addData.setOnClickListener {
            val db=dbHelper.writableDatabase//获取SQLiteDatabase 对象
            val value1= ContentValues().apply {
                put("name","The Da Vinci Code")
                put("author","Dan Brown")
                put("pages",454)
                put("price",16.96)
            }
            db.insert("Book",null,value1)//插入第一条数据
            val value2= ContentValues().apply {
                put("name","The Lost Symbol")
                put("author","Dan Brown")
                put("pages",510)
                put("price",19.95)
            }
            db.insert("Book",null,value2)//插入第二条数据
        }

7.4.4 更新数据

update()方法:接受四个参数,第一个参数:表名;
第二个参数: ContentValues
第三,四参数:用于约束更新的某一行或某几行中的数据,不指定就会默认更新所有行。

updateData.setOnClickListener {
            val db=dbHelper.writableDatabase
            val value1 = ContentValues().apply {
                put("price",11.99)
            }
            
            db.update("Book",value1,"name = ?", arrayOf("The Da Vinci Code"))
            Toast.makeText(this,"update Data succeeded",Toast.LENGTH_SHORT).show()
        }

//第三个参数对应的SQL语句的where部分,表示更新所有name等于?的行,而?是占位符
//可以通过第四个参数提供的一个字符串数组,为第三个参数中的每一个占位符指定相应的内容、
//arrayOf()是kotlin提供的一种用于便捷创建数组的内置方法.

扫描二维码关注公众号,回复: 11135564 查看本文章

7.4 .5 删除数据

delete()方法 :接受三个参数 :第一个:表名,第二第三个参数,用于约束删除某一行或某几行的数据,不指定默认删除所有行。

deleteData.setOnClickListener {
            val db=dbHelper.writableDatabase
            db.delete("Book","pages>?", arrayOf("500"))
            Toast.makeText(this,"Delete Data succeeded",Toast.LENGTH_SHORT).show()
        }

7.4.6 查询数据

query()方法 :(最少)七个参数:参数1:表名;参数2:用于指定去查询哪几列,不指定默认所有列;参数3.4:用于约束查询某行或某几行的数据,不指定默认查询所有列;参数5:用于指定需要去group by 的列,不指定则表示不对查询结果进行group by 操作;参数6:用于对于group by 之后的数据进行进一步过滤,不指定则不过滤;参数7:用于指定查询结果的排序方式,不指定使用默认的排序方式。

调用query()方法后会返回一个Cursor对象,查询到的所有数据都将从这个对象中取出。

queryData.setOnClickListener {
            val db=dbHelper.writableDatabase
            val cursor=db.query("Book",null,null,null,null,null,null)
            if(cursor.moveToFirst()){
                do {
                    //遍历Cursor对象,取出数据并打印
                    val name=cursor.getString(cursor.getColumnIndex("name"))
                    val author=cursor.getString(cursor.getColumnIndex("author"))
                    val pages=cursor.getString(cursor.getColumnIndex("pages"))
                    val price = cursor.getString(cursor.getColumnIndex("price"))
                    Log.d("MainActivity","book name is $name")
                    Log.d("MainActivity","book author is $author")
                    Log.d("MainActivity","book pages is $pages")
                    Log.d("MainActivity","book price is $price")
                }while (cursor.moveToNext())
            }
            cursor.close()
        }
发布了28 篇原创文章 · 获赞 11 · 访问量 2402

猜你喜欢

转载自blog.csdn.net/Y_an_Y/article/details/105720634