「安卓数据库注册登录代码」教程全解析 (安卓数据库注册登录代码怎么写)
安卓数据库注册登录代码教程全解析
随着移动互联网的普及,移动应用的开发变得越来越重要。而在移动应用中,用户注册登录是最基础、也是最通用的功能,是每个应用必须要解决的问题。而在安卓应用中,如何实现用户注册和登录功能呢?就需要用到安卓数据库技术了。
本文将为大家详细介绍安卓数据库注册登录代码的实现方法,包括数据库的创建、表结构的设计、代码的编写等多个方面。
之一步:创建数据库
在安卓应用中,使用 SQLite 嵌入式数据库进行数据存储,可以轻松地实现注册登录功能。而要使用 SQLite 数据库,就需要先创建一个数据库。
创建数据库需要以下步骤:
1. 创建 DatabaseHelper 类
在创建数据库之前,需要先定义一个 DatabaseHelper 类,用于管理数据库的创建、升级等操作。在客户端应用程序中,一般会有多个 Activity,如果每个 Activity 都进行数据库的创建和操作,会产生不必要的重复劳动,造成代码冗余。而通过这个 DatabaseHelper 类,可以将数据库的创建和操作集中起来,实现了数据和业务的逻辑分离,提供了良好的代码组织方式。
“`kotlin
class DataBaseHelper(context: Context) : SQLiteOpenHelper(context,DATABASE_NAME,null, DATABASE_VERSION) {
companion object {
private val DATABASE_NAME = “sample.db”
private val DATABASE_VERSION = 1
}
override fun onCreate(db: SQLiteDatabase) {
db.execSQL(UserDataSQL.SQL_CREATE_TABLE)
}
override fun onUpgrade(db: SQLiteDatabase, oldVersion: Int, newVersion: Int) {
db.execSQL(UserDataSQL.SQL_DELETE_TABLE)
onCreate(db)
}
}
“`
以上代码中,我们定义了一个名为 DataBaseHelper 的类,继承自 SQLiteOpenHelper。其中,DATABASE_NAME 表示数据库名称,DATABASE_VERSION 表示数据库版本号。还重载了 onCreate() 和 onUpgrade() 方法,onCreate() 方法会在之一次创建数据库时执行,用于创建数据库表结构;而 onUpgrade() 方法用于更新数据库版本时执行,可以根据不同的版本更新表结构。需要注意的是,当表发生变化时,需要先删除旧表再创建新表。
2. 调用 getWritableDatabase() 方法创建数据库
在 BaseActivity 里加下面的代码:
“`kotlin
var database: SQLiteDatabase? = null
val db: SQLiteDatabase
get() {
if (database == null) {
database = DBHelper(this).writableDatabase
}
return database!!
}
override fun onDestroy() {
super.onDestroy()
database?.close()
database = null
}
“`
以上代码中,我们定义了一个名为 db 的变量,变量类型为 SQLiteDatabase,旨在提供方便的获取数据库实例的方式。当调用 db 对象时,首先判断 database 是否为 null,如果是,则通过 DBHelper 类获取数据库实例,否则直接返回 database 的实例,并且当 Activity 被销毁时需要关闭数据库。
第二步:设计表结构
在创建好数据库之后,还需要设计一个表结构,用于存储用户的信息,包括用户名、密码等。在安卓中,SQLite 数据库提供了轻量级、快速的本地数据存储方案。SQLite 数据库存储数据的方式是关系型数据库,因此在设计表结构时能够使数据采用行列式的结构进行组织,表格中的每行表示一条记录,表格中的每列则表示一种数据类型。
在用户登录和注册功能的场景中,一般需要存储用户的用户名和密码。因此我们可以设计一张名为 User 的表,表中包含三个字段:id、username、password。
在本文中,我们通过 Kotlin 语言来实现 SQLite 嵌入式数据库的表创建。
UserData.kt
“`kotlin
class UserData {
var id: Int = 0
var username: String = “”
var password: String = “”
}
“`
UserDataSQL.kt
“`kotlin
object UserDataSQL{
private const val TABLE_NAME = “users”
private const val ID = “id”
private const val USERNAME = “username”
private const val PASSWORD = “password”
private const val SQL_CREATE_TABLE = “CREATE TABLE IF NOT EXISTS $TABLE_NAME ($ID INTEGER PRIMARY KEY AUTOINCREMENT, $USERNAME TEXT, $PASSWORD TEXT)”
private const val SQL_DELETE_TABLE = “DROP TABLE IF EXISTS $TABLE_NAME”
fun insert(user: UserData): Long {
val values = ContentValues()
values.put(USERNAME, user.username)
values.put(PASSWORD, user.password)
return db.insert(TABLE_NAME, null, values)
}
fun update(user: UserData): Int {
val values = ContentValues()
values.put(USERNAME, user.username)
values.put(PASSWORD, user.password)
val selection = “$ID = ?”
val selectionArgs = arrayOf(user.id.toString())
return db.update(TABLE_NAME, values, selection, selectionArgs)
}
fun deleteAll(): Int {
return db.delete(TABLE_NAME, null, null)
}
fun delete(user: UserData): Int {
val selection = “$ID = ?”
val selectionArgs = arrayOf(user.id.toString())
return db.delete(TABLE_NAME, selection, selectionArgs)
}
fun queryAll(): List {
val cursor = db.query(TABLE_NAME, null, null, null, null, null, null)
return cursorToUsers(cursor)
}
fun queryByUsername(username: String): List {
val selection = “$USERNAME = ?”
val selectionArgs = arrayOf(username)
val cursor = db.query(TABLE_NAME, null, selection, selectionArgs, null, null, null)
return cursorToUsers(cursor)
}
private fun cursorToUsers(cursor: Cursor): List {
val users = ArrayList()
while (cursor.moveToNext()) {
val user = UserData()
user.id = cursor.getInt(cursor.getColumnIndex(ID))
user.username = cursor.getString(cursor.getColumnIndex(USERNAME))
user.password = cursor.getString(cursor.getColumnIndex(PASSWORD))
users.add(user)
}
cursor.close()
return users
}
}
“`
以上是用户表的具体代码实现,我们在 UserData 类中定义了用户信息的三个字段(id、username、password)。而 UserDataSQL 类则实现了对这三个字段的 CRUD(增、删、改、查)操作。此类中的静态自执行语句 SQL_CREATE_TABLE 用来定义表的结构,而 SQL_DELETE_TABLE 语句用来删除表。
除此之外,还需要注意创建表格假如已经存在,则不会重新创建,而是会直接退出。在这里,我们使用了 insert 命令来插入一条新的记录,使用 update 命令来更新已有的记录,使用 delete 命令来删除记录,使用 query 命令来查询记录。以上 5 个命令均是针对 SQLite 数据库的操作,具体用法可以参见官方文档。
第三步:实现注册和登录
上述代码实现了数据库的创建和表结构的设计,但是没有涉及到注册登录的业务逻辑。因此我们接下来来看一下怎么实现用户注册和登录。
用户名和密码在注册和登录的过程中,需要通过用户输入来获取。当用户注册时,对输入的信息进行插入操作;当用户登录时,对输入的信息进行查询操作。
接下来看下面这两个函数:
“`kotlin
fun signUp(username: String, password: String) {
if (username.isNotEmpty() && password.isNotEmpty()) {
val users = UserDataSQL.queryByUsername(username)
if (users.isNotEmpty()) {
Toast.makeText(this, “用户名已经存在!”, Toast.LENGTH_SHORT).show()
} else {
val user = UserData()
user.username = username
user.password = password
UserDataSQL.insert(user)
Toast.makeText(this, “注册成功!”, Toast.LENGTH_SHORT).show()
}
} else {
Toast.makeText(this, “用户名和密码不能为空!”, Toast.LENGTH_SHORT).show()
}
}
fun signIn(username: String, password: String) {
if (username.isNotEmpty() && password.isNotEmpty()) {
val users = UserDataSQL.queryByUsername(username)
if (users.isEmpty()) {
Toast.makeText(this, “用户名不存在!”, Toast.LENGTH_SHORT).show()
} else {
for (user in users) {
if (user.password == password) {
Toast.makeText(this, “登录成功!”, Toast.LENGTH_SHORT).show()
return
}
}
Toast.makeText(this, “密码不正确!”, Toast.LENGTH_SHORT).show()
}
} else {
Toast.makeText(this, “用户名和密码不能为空!”, Toast.LENGTH_SHORT).show()
}
}
“`
以上代码分别实现了用户注册和登录的业务逻辑,其中 signUp() 函数用于用户注册,signIn() 函数用于用户登录。当用户注册时,会先通过用户名查询数据库中是否已经存在该用户,如果没有,则将该用户的用户名和密码存入数据库表中。而当用户登录时,会先通过用户名查询数据库中是否存在该用户,如果不存在,则提示“用户名不存在”;如果存在,则将该用户的密码和输入的密码进行比较,如果密码相同,则提示“登录成功”,否则提示“密码不正确”。
需要注意的是,以上代码纯粹为了演示数据库的业务逻辑,实际应用开发中需要优化代码、加入容错机制、进行网络安全性等处理。
结语