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

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

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

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

之一步:创建数据库

在安卓应用中,使用 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,网站登录代码怎么写的信息别忘了在本站进行查找喔。


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