安卓数据库注册登录代码教程全解析
随着移动互联网的普及,移动应用的开发变得越来越重要。而在移动应用中,用户注册登录是最基础、也是最通用的功能,是每个应用必须要解决的问题。而在安卓应用中,如何实现用户注册和登录功能呢?就需要用到安卓数据库技术了。
本文将为大家详细介绍安卓数据库注册登录代码的实现方法,包括数据库的创建、表结构的设计、代码的编写等多个方面。
之一步:创建数据库
在安卓应用中,使用 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() 函数用于用户登录。当用户注册时,会先通过用户名查询数据库中是否已经存在该用户,如果没有,则将该用户的用户名和密码存入数据库表中。而当用户登录时,会先通过用户名查询数据库中是否存在该用户,如果不存在,则提示“用户名不存在”;如果存在,则将该用户的密码和输入的密码进行比较,如果密码相同,则提示“登录成功”,否则提示“密码不正确”。
需要注意的是,以上代码纯粹为了演示数据库的业务逻辑,实际应用开发中需要优化代码、加入容错机制、进行网络安全性等处理。
结语
相关问题拓展阅读:
如何实现登陆操作安卓sqlite
首先写javabean
由于该类很简单,只是定义id,username,password,age,sex,所以在此不在给出!直接说service层业务类的代码:
使用SQLiteOpenHelper抽象类建立没亩数据库
抽象类SQLiteOpenHelper用来对数据库进行版本管理,不是必须使用的。
为了实现对数据库版本进行管理, SQLiteOpenHelper 类提供了两个重要的方法 , 分别onCreate(SQLiteDatabasedb) 和 onUpgrade(SQLiteDatabase db, int oldVersion, intnewVersion)用于初次使用软件时生成数据库表,后者用于升级软件时更新数据库表结构。
DatabaseHelper.java
public class DatabaseHelper extends SQLiteOpenHelper {
static String name=”user.db”;
static int dbVersion=1;
public DatabaseHelper(Context context) {
super(context, name, null, dbVersion);
}
//只弊察源在创建的时候用一次
public void onCreate(SQLiteDatabase db) {
String sql=”create table user(id integer primary key autoincrement,username varchar(20),password varchar(20),age integer,sex varchar(2))”;
db.execSQL(sql);
}
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
SQLiteDatabase.execSQL(String sql) 可以用来执行非查询 SQL 指令,这些指令没有结果
包括: CREATE TABLE / DROP TABLE / INSERT 等等
然后就是UserService.java实现对表的操作:
public class UserService {
private DatabaseHelper dbHelper;
public UserService(Context context){
dbHelper=new DatabaseHelper(context);
}
//登录用
public boolean login(String username,String password){
SQLiteDatabase sdb=dbHelper.getReadableDatabase();
String sql=”租态select * from user where username=? and password=?”;
Cursor cursor=sdb.rawQuery(sql, new String{username,password});
if(cursor.moveToFirst()==true){
cursor.close();
return true;
}
return false;
}
//注册用
public boolean register(User user){
SQLiteDatabase sdb=dbHelper.getReadableDatabase();
String sql=”insert into user(username,password,age,sex) values(?,?,?,?)”;
Object obj={user.getUsername(),user.getPassword(),user.getAge(),user.getSex()};
sdb.execSQL(sql, obj);
return true;
}
}
Android 使用游标 (Cursors) 来导航浏览查询结果
游标 (Cursors) 被 android.database.Cursor 对象来描述
一个游标 (Cursors) 是一个简单的指针,它从查询结果的一
一个或是 …… )
游标 (Cursors) 在它定位位置的那一刻返回元组数据
有以下代码来解释:
// 为了创建一个 Cursor( 游标 ) ,必须执行一个查询,要么通过 SQL 使用 rawQuery() 方法
// 或是更精心设计的方法,像 query() 方法
Cursor cur=my_DataBase.rawQuery( “SELECT * FORM test” , null null null null );
ifififif (cur!= null null null null ){ // 游标不为空
// 返回给定名称的列的基于 0 开始的 index ,如果该属性列不存在则返回 -1
// 通过它们的 index 来检索属性值
int int int int numColumn=cur.getColumnIndex( “someNumber” );
ifififif (cur. moveToFirst() ){
// cur.moveToFirst() 让游标指向之一行, 如果游标指向之一行,则返回 true
do {
int int int int num =cur.getInt(numColumn); / / 获得当前行该属性的值
/ * Cursor 提供了不同的方法来回索不同的数据类型
例如 getInt( int index)/getString( int index) 等等 */
/* 做一些事情 */
} while while while while (cur.moveToNext());
/ * 游标移动到下一行,如果游标已经通过了结果集中的最后,
即没有行可以移动时,则返回 false */
// 其他可能移动的是 previous() 和 first() 方法
}
}
最后要关闭游标!!!
下面是测试代码:
public class UserTest extends AndroidTestCase {
public void datatest() throws Throwable{
DatabaseHelper dbhepler=new DatabaseHelper(this.getContext());
dbhepler.getReadableDatabase();
}
//注册
public void registerTest() throws Throwable{
UserService uService=new UserService(this.getContext());
User user=new User();
user.setUsername(“renhaili”);
user.setPassword(“123”);
user.setAge(20);
user.setSex(“女”);
uService.register(user);
}
//登录
public void loginTest() throws Throwable{
UserService uService=new UserService(this.getContext());
String username=”renhaili”;
String password=”123″;
boolean flag=uService.login(username, password);
if(flag){
Log.i(“TAG”,”登录成功”);
}else{
Log.i(“TAG”,”登录失败”);
}
}
}
常见异常
android.database.sqlite.SQLiteException:Can’t upgrade read-only database from version 0 to 1:
这个错误基本上都是sql有问题导致的,仔细检查sql即可。
最后想说:在写好了实现类以后更好再写这个测试类来测试一下,不然以后碰到错很麻烦,所以把所有的测试都通过了,再写界面和activity,界面和activity的代码就不给出了,源码地址给出,有兴趣的同学可以下载来参考参考!!!
网站登录代码怎么写
yonghu=request.Form(“yonghu”)
mima= request.Form(“mima”)
SqlStr = “select * from Where yonghu=”&yonghu&” and mima=”旁悔& mima &” order by id desc”谈旦
Set Rs = Server.CreateObject(“adodb.recordset”)
Rs.Open SqlStr, Conn, 1, 1
IF Not(Rs.bof and Rs.EOF) Then
response.write(“登陆成功含启扰”)
Else
response.write(“登陆失败”)
End If
Rs.close
安卓数据库注册登录代码怎么写的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于安卓数据库注册登录代码怎么写,「安卓数据库注册登录代码」教程全解析,如何实现登陆操作安卓sqlite,网站登录代码怎么写的信息别忘了在本站进行查找喔。