赞
踩
目录
SQLite是一个轻量级的嵌入数据库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。您不需要在系统中安装配置。SQLite 引擎不是一个独立的进程,可以按应用程序需求进行静态或动态连接。SQLite 直接访问其存储文件
Android为了让用户能够更加方便地管理数据库,专门提供了一个 SQLiteOpenHelper帮助类,借助这个类就可以非常简单地对数据库进行创建。SQLiteOpenHelper是一个抽象类,这意味着如果想使用它的话,这就需要自己 创建一个类去继承SQLiteOpenHelper帮助类就可以了
- class MyDBOpenHelper(context:Context,name:String,factory:CursorFactory,version
- : Int) : SQLiteOpenHelper(context,name,factory,version) {
- }
SQLiteOpenHelper有三个构造方法可供重写,一般使用参数少点的那个构造方 法即可,必须要有它才能对数据库进行操作,这个构造方法中,接受4个参数
Cursor游标结果集 游标是一段私有的SQL工作区,即一段内存区域,用于暂时存放受SQL语句影响到的数据。通俗理解就是将受影响的数据暂时存放到一个内存区域的虚表中,这个虚表就是游标。 游标在数据库的事务回滚中有非常重要的作用。由于对数据库的操作会暂时存放在游标中,只要不提交,就可以根据游标中的内容进行回滚。这样有利于数据库的安全。 |
SQLiteOpenHelper 有两个抽象方法 onCreate() 和 onUpgrade()。我们必须在自己的帮助类中重写这两个方法。除外,其中还有两个重要的实例方法getReadableDatabase()和getWritableDatabase()。
这两个方法都可以创建或打开一个现有的数据库(如果一个数据库存在则直接打开,否则新建一个新的数据库),并返回一个可以对数据库进行读 [写] 操作的对象。不同的是:当数据库不可写入(如磁盘空间满时),getReadableDatabase()返回的对象是将以只读方式打开数据库,另一个会抛出一个异常
- class MyDBOpenHelper(context:Context,name:String,factory:CursorFactory,version: Int)
- : SQLiteOpenHelper(context,name,factory,version) {
- //创建数据库
- override fun onCreate(db: SQLiteDatabase?) {
- //可能为null要用空安全操作 >>> ?.
- db?.execSQL("create table stu_info(" +
- "id INTEGER primary key autoincrement," +
- "sex varchar(10)," +
- "name varchar(20))")
- }
- //升级数据库
- override fun onUpgrade(db: SQLiteDatabase?, p1: Int, p2: Int) {
- }
- }
对数据库中的数据表的操作,一共有四种:添加、查询、更新、删除。每一种 操作又各自对应了一种SQL命令:insert(添加),select(查询),update(更新),delete(删除)。
方法有三个参数
创建stu_db数据库和stu_info学生表,对表进行添加和动态查询操作,效果图:
- class MyDBOpenHelper(context:Context)
- : SQLiteOpenHelper(context,"stu_db",null,1) {
- //创建数据库
- override fun onCreate(db: SQLiteDatabase?) {
- //db要用空安全操作?.
- db?.execSQL("create table stu_info(" +
- "id INTEGER primary key autoincrement," +
- "sex varchar(10)," +
- "name varchar(20))")
- }
-
- //升级数据库
- override fun onUpgrade(db: SQLiteDatabase?, p1: Int, p2: Int) {
- }
- }
- class MainActivity : AppCompatActivity() {
- private var result = "" //反馈文本字符串
- private var myDBHelper:SQLiteOpenHelper?= null//定义数据库帮助类对象
- private var db:SQLiteDatabase?=null//定义一个可以操作的数据库对象
- override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
- setContentView(R.layout.activity_main)
- initView() //初始化方法
- butAdd() //添加按钮监听器
- butQuery() // 查询按钮监听器
- }
- //初始化方法
- fun initView(){
- myDBHelper = MyDBOpenHelper(this)//实例化数据库帮助类
- db = myDBHelper?.writableDatabase //创建获取可读写操作的数据库
- }
- //添加按钮监听器
- fun butAdd(){
- insert?.setOnClickListener {
- var contentValues = ContentValues() //用 contentValue 表示一行
- //把输入的id,name,sex放到对应的列
- contentValues.put("id",idText.text.toString())
- contentValues.put("name",nameText.text.toString())
- contentValues.put("sex",sexText.text.toString())
- //调用insert()添加
- var insert = db?.insert("stu_info", null, contentValues)
- //提示框
- if(insert!=null){
- Toast.makeText(this,"添加成功!",Toast.LENGTH_SHORT).show()
- }else{
- Toast.makeText(this,"添加失败!",Toast.LENGTH_SHORT).show()
- }
- }
- }
- // 查询按钮监听器
- fun butQuery(){
- query?.setOnClickListener {
- var paramName:String = "id" //定义查询条件,默认根据id查询
- var arrayOf = arrayOf<String?>(null) //查询条件参数数组
- //如果id未输入根据 name查 ?: sex查
- if (idText?.text.toString()!=""){
- arrayOf[0]=idText?.text.toString() //获取id框数据,放入数组
- }else if(nameText?.text.toString()!=""){
- paramName = "name"
- arrayOf[0]=nameText?.text.toString()//获取name框数据,放入数组
- }else if(sexText?.text.toString()!=""){
- paramName = "sex"
- arrayOf[0]=sexText?.text.toString()//获取sex框数据,放入数组
- }
- //调用rawQuery传入sql和参数,获取cursor结果集
- var cursor = db?.rawQuery(
- "select * from stu_info where ${paramName}=?" , arrayOf)
- if (cursor?.count!=0){
- result = "" //清空结果反馈字符串
- //遍历结果集,追加反馈文本字符串
- while (cursor?.moveToNext() == true){
- result = "${result}\n" +
- "学号:${cursor.getString(0)} 性别:${cursor.getString(1)} 姓名:${cursor.getString(2)}\n" +
- ">>>>>>>>>>>"
- }
- tv.text = result//tv框打印反馈字符串
- }else{
- //如果结果集为空,tv打印对应提示
- tv.text = "${paramName}=${arrayOf[0]},不存在"
- }
- }
- }
- }
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:app="http://schemas.android.com/apk/res-auto"
- xmlns:tools="http://schemas.android.com/tools"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- tools:context=".MainActivity"
- android:orientation="vertical"
- >
-
- <TextView
- android:id="@+id/tv"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:gravity="center"
- android:text="(^-^)"
- android:textSize="20sp"
- android:layout_margin="40dp"
- android:layout_gravity="center"/>
- <EditText
- android:hint="学号:"
- android:id="@+id/idText"
- android:layout_width="match_parent"
- android:layout_height="wrap_content" />
- <EditText
- android:hint="姓名:"
- android:id="@+id/nameText"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"/>
- <EditText
- android:hint="性别:"
- android:id="@+id/sexText"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"/>
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="horizontal"
- >
- <Button
- android:id="@+id/insert"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="添加"
- android:textSize="25sp"
- android:layout_margin="2dp"
- android:layout_weight="1"
- />
- <Button
- android:id="@+id/clear"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="清除"
- android:textSize="25sp"
- android:layout_margin="2dp"
- android:layout_weight="1"
- />
- </LinearLayout>
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="horizontal">
-
- <Button
- android:id="@+id/query"
- android:layout_margin="3dp"
- android:layout_weight="1"
- android:text="查询"
- android:textSize="25sp"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"/>
- </LinearLayout>
- </LinearLayout>
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。