「安卓数据库注册登录代码」教程全解析 (安卓数据库注册登录代码怎么写)

安卓数据库注册登录代码教程全解析

随着移动互联网的普及,移动应用的开发变得越来越重要。而在移动应用中,用户注册登录是最基础、也是最通用的功能,是每个应用必须要解决的问题。而在安卓应用中,如何实现用户注册和登录功能呢?就需要用到安卓数据库技术了。

本文将为大家详细介绍安卓数据库注册登录代码的实现方法,包括数据库的创建、表结构的设计、代码的编写等多个方面。

之一步:创建数据库

在安卓应用中,使用 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() 函数用于用户登录。当用户注册时,会先通过用户名查询数据库中是否已经存在该用户,如果没有,则将该用户的用户名和密码存入数据库表中。而当用户登录时,会先通过用户名查询数据库中是否存在该用户,如果不存在,则提示“用户名不存在”;如果存在,则将该用户的密码和输入的密码进行比较,如果密码相同,则提示“登录成功”,否则提示“密码不正确”。

需要注意的是,以上代码纯粹为了演示数据库的业务逻辑,实际应用开发中需要优化代码、加入容错机制、进行网络安全性等处理。

结语


数据运维技术 » 「安卓数据库注册登录代码」教程全解析 (安卓数据库注册登录代码怎么写)