安卓Kotlin实现简单图书管理系统(SQlite数据库)保姆级教程

                                        前言

        这学期刚刚开设Android和数据库的课,一直想找一个项目练手,毕竟:纸上得来终觉浅,绝知此事要躬行。只有多敲代码和多学习结合才能提高自己的开发能力。恰好看到了一个页面简洁,功能简单的图书管理系统,于是记录一下自己克隆的过程,也为刚入门的新手提供一个参考。

                                           简介

 1.图标

        

2.登录页面

 3.查询页面

                                                教程

        1.Book类

         很简单的一个kotlin创建类的方式,这里使用的是直接在构造器中定义类的属性,这里再举一个别的例子。

          2.DB类

        在这里,我们使用了SQlite数据库,在Android Stdio,主要用三种数据库的存储方式。

          我们这里主要使用SQLiteOpenHelper,使用的方法是自定义一个DB子类派生自SQLiteOpenHelper,然后重写其onCreate()和onUpdate()方法

         这里,我们把需要执行的SQL建表语句定义为了CREATE_BOOK方便以后调用。

如果你对SQLite建表不熟悉,请看:

                 execSQL()是可以执行insert、delete、update、和createtable之类有更改行为的SQL语句。

        3.BookDao

这里是lateinit是延迟初始化,有的时候我们声明的时候无法做到初始化,所以我们使用lateinit关键字来延迟初始化。

这个部分主要是操作数据库。

        对于插入,这里涉及到了ContentValues对象,ContentValue提供了put()方法重载,用于向ContentValues添加数据,分别是列名和待添加项,然后调用insert方法,insert()方法有三个参数,分别是表名,为未指定添加数据的某些列赋NULL(一般直接传入null即可),和ContentValues对象

        对于ContentValues()对象,可以看做和HashTable类似的存储机制,但是牵着只能存储基本数据类型,而HashTable可以存储对象。

        类似的,还有delete和update ,第一个参数仍然是表名,第二、第三个方法是用于约束某一行或者某几行的数据

        对于查询数据,可以使用query()

         这个方法的重载需要用到个参数,分别是:表名、指定查询列、约束查询行、指定需要用group by的列、用于对group by之后的数据进一步过滤、指定查询结果的排序方式。

         在这里,我们只给表名赋值,表示查询所有的数据。返回一个Cursor对象,调用movetoFirst()方法移动到第一行,循坏直到下一行为空。

·关于cursor对象, 大致上可以理解为每行的集合。如何理解这个每行?实际上就是满足我们query方法传入的条件参数的所有行。在遍历所有的cursor内容的时候,一定要首先moveToFirst(),否则cursor的position的值为-1,在表上方,我们需要让他在表内首行,所以使用moveToFIrst(),使用moveToNext()也可以。当cursor无内容的时候,moveToFirst()和moveToNext()会自动返回false

类似的,还有加一个id判断的依据书编号查询。 至此,有关数据库的内容就基本结束。

4LoginActivity MainActivity BookAdapter

        这三个类主要完成的就是UI设计、登录功能的实现等等,放在一起说。 

 

         布局图如上,都是非常基本的内容,并没有什么复杂的设计。

        而在LoginActivity和MainActivity上,还是用了视图绑定(View Binding),用来避免反反复复调用findViewById()。

        可以制定所有的XML布局文件生成一个Binding类,完成实例化以后,就可以直接通过与id值相同的属性名直接访问控件。

        首先需要在buildFeatures中加入viewBinding true,然后把XML改成驼峰式大小写,并且在末尾加Binding一词,例如activity_main.xml,对应数据绑定的类名为ActivityMainBinding

        在启动视图绑定以后,Activity的初始化代码需要略作修改,关键在于实例化视图绑定对象的2实例,然后把根控件传递个Activity

        

         另外,这里有两个activity文件,还使用到了多activity编程。

               首先需要修改AndroidManifest.xml,并且注册Activity,然后使用Intent进行activity之间的交流。

        对于intent,可以理解为联系各个组件的纽带,可以实现访问外部或者页面组件的跳转。

在MainActivity里,还通过重写onClick方法实现数据库相关各个函数的调用,以及弹出Toast提示用户。

 

另外,还有Adapter作为数据和视图交互的中介。以及下图中的利用键对值SharedPreferences来存储数据。

        具体方法是:首先,实例化SharPreferences对象,然后实例化SharedPreferences.Editor对象,然后采用putString的方法保存数据,用commit提交数据以后,SharedPreferences会把数据保存在test.xml文件中。

保存完后,也可以通过getString方法获取数据。

理论上,这样可以实现登录注册等等功能。

 

                                总结

         最后,我们就基本完成了这个项目的构建。总而言之,看起来很简单的使用数据库整理图书的小项目做起来却不太容易,实践中往往会遇到一个又一个bug,例如忘记在xml文件中声明activity,图片保存在res中采用了错误的文件名等等。

        还是那句,纸上得来终觉浅,绝知此事要躬行。一个小项目往往可以训练到很多知识点的,而且在实践中,往往会得到不一样的体会。

        

         如果需要获取源码,链接:百度网盘 请输入提取码 ,提取码:0c8e

 

  • 6
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
可以使用Kotlin中的SQLiteOpenHelper类来创建和管理SQLite数据库。下面是一个简单的示例代码: ``` import android.content.Context import android.database.sqlite.SQLiteDatabase import android.database.sqlite.SQLiteOpenHelper class MyDatabaseHelper(context: Context) : SQLiteOpenHelper(context, DATABASE_NAME, null, DATABASE_VERSION) { companion object { private const val DATABASE_NAME = "mydatabase.db" private const val DATABASE_VERSION = 1 // Define table and columns private const val TABLE_NAME = "mytable" private const val COLUMN_ID = "id" private const val COLUMN_NAME = "name" private const val COLUMN_AGE = "age" } override fun onCreate(db: SQLiteDatabase?) { val createTable = "CREATE TABLE $TABLE_NAME ($COLUMN_ID INTEGER PRIMARY KEY, $COLUMN_NAME TEXT, $COLUMN_AGE INTEGER)" db?.execSQL(createTable) } override fun onUpgrade(db: SQLiteDatabase?, oldVersion: Int, newVersion: Int) { val dropTable = "DROP TABLE IF EXISTS $TABLE_NAME" db?.execSQL(dropTable) onCreate(db) } } ``` 在这个示例中,我们定义一个`MyDatabaseHelper`类来扩展`SQLiteOpenHelper`类。我们定义了数据库的名称和版本,并在`onCreate`方法中创建表格。在`onUpgrade`方法中,我们删除旧表并创建一个新表,以保证数据库升级时数据的正确性。您可以通过调用以下代码来创建数据库: ``` val dbHelper = MyDatabaseHelper(context) val db = dbHelper.writableDatabase ``` 在这个代码中,我们创建一个`MyDatabaseHelper`实例,然后获取一个可读写的数据库实例。现在,您可以使用SQLite的API来执行SQL操作,例如插入、更新和查询数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值