日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
「安卓數(shù)據(jù)庫注冊登錄代碼」教程全解析(安卓數(shù)據(jù)庫注冊登錄代碼怎么寫)

安卓數(shù)據(jù)庫注冊登錄代碼教程全解析

隨著移動互聯(lián)網(wǎng)的普及,移動應(yīng)用的開發(fā)變得越來越重要。而在移動應(yīng)用中,用戶注冊登錄是最基礎(chǔ)、也是最通用的功能,是每個(gè)應(yīng)用必須要解決的問題。而在安卓應(yīng)用中,如何實(shí)現(xiàn)用戶注冊和登錄功能呢?就需要用到安卓數(shù)據(jù)庫技術(shù)了。

本文將為大家詳細(xì)介紹安卓數(shù)據(jù)庫注冊登錄代碼的實(shí)現(xiàn)方法,包括數(shù)據(jù)庫的創(chuàng)建、表結(jié)構(gòu)的設(shè)計(jì)、代碼的編寫等多個(gè)方面。

之一步:創(chuàng)建數(shù)據(jù)庫

在安卓應(yīng)用中,使用 SQLite 嵌入式數(shù)據(jù)庫進(jìn)行數(shù)據(jù)存儲,可以輕松地實(shí)現(xiàn)注冊登錄功能。而要使用 SQLite 數(shù)據(jù)庫,就需要先創(chuàng)建一個(gè)數(shù)據(jù)庫。

創(chuàng)建數(shù)據(jù)庫需要以下步驟:

1. 創(chuàng)建 DatabaseHelper 類

在創(chuàng)建數(shù)據(jù)庫之前,需要先定義一個(gè) DatabaseHelper 類,用于管理數(shù)據(jù)庫的創(chuàng)建、升級等操作。在客戶端應(yīng)用程序中,一般會有多個(gè) Activity,如果每個(gè) Activity 都進(jìn)行數(shù)據(jù)庫的創(chuàng)建和操作,會產(chǎn)生不必要的重復(fù)勞動,造成代碼冗余。而通過這個(gè) DatabaseHelper 類,可以將數(shù)據(jù)庫的創(chuàng)建和操作集中起來,實(shí)現(xiàn)了數(shù)據(jù)和業(yè)務(wù)的邏輯分離,提供了良好的代碼組織方式。

“`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)

}

}

“`

以上代碼中,我們定義了一個(gè)名為 DataBaseHelper 的類,繼承自 SQLiteOpenHelper。其中,DATABASE_NAME 表示數(shù)據(jù)庫名稱,DATABASE_VERSION 表示數(shù)據(jù)庫版本號。還重載了 onCreate() 和 onUpgrade() 方法,onCreate() 方法會在之一次創(chuàng)建數(shù)據(jù)庫時(shí)執(zhí)行,用于創(chuàng)建數(shù)據(jù)庫表結(jié)構(gòu);而 onUpgrade() 方法用于更新數(shù)據(jù)庫版本時(shí)執(zhí)行,可以根據(jù)不同的版本更新表結(jié)構(gòu)。需要注意的是,當(dāng)表發(fā)生變化時(shí),需要先刪除舊表再創(chuàng)建新表。

2. 調(diào)用 getWritableDatabase() 方法創(chuàng)建數(shù)據(jù)庫

在 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

}

“`

以上代碼中,我們定義了一個(gè)名為 db 的變量,變量類型為 SQLiteDatabase,旨在提供方便的獲取數(shù)據(jù)庫實(shí)例的方式。當(dāng)調(diào)用 db 對象時(shí),首先判斷 database 是否為 null,如果是,則通過 DBHelper 類獲取數(shù)據(jù)庫實(shí)例,否則直接返回 database 的實(shí)例,并且當(dāng) Activity 被銷毀時(shí)需要關(guān)閉數(shù)據(jù)庫。

第二步:設(shè)計(jì)表結(jié)構(gòu)

在創(chuàng)建好數(shù)據(jù)庫之后,還需要設(shè)計(jì)一個(gè)表結(jié)構(gòu),用于存儲用戶的信息,包括用戶名、密碼等。在安卓中,SQLite 數(shù)據(jù)庫提供了輕量級、快速的本地?cái)?shù)據(jù)存儲方案。SQLite 數(shù)據(jù)庫存儲數(shù)據(jù)的方式是關(guān)系型數(shù)據(jù)庫,因此在設(shè)計(jì)表結(jié)構(gòu)時(shí)能夠使數(shù)據(jù)采用行列式的結(jié)構(gòu)進(jìn)行組織,表格中的每行表示一條記錄,表格中的每列則表示一種數(shù)據(jù)類型。

在用戶登錄和注冊功能的場景中,一般需要存儲用戶的用戶名和密碼。因此我們可以設(shè)計(jì)一張名為 User 的表,表中包含三個(gè)字段:id、username、password。

在本文中,我們通過 Kotlin 語言來實(shí)現(xiàn) SQLite 嵌入式數(shù)據(jù)庫的表創(chuàng)建。

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

}

}

“`

以上是用戶表的具體代碼實(shí)現(xiàn),我們在 UserData 類中定義了用戶信息的三個(gè)字段(id、username、password)。而 UserDataSQL 類則實(shí)現(xiàn)了對這三個(gè)字段的 CRUD(增、刪、改、查)操作。此類中的靜態(tài)自執(zhí)行語句 SQL_CREATE_TABLE 用來定義表的結(jié)構(gòu),而 SQL_DELETE_TABLE 語句用來刪除表。

除此之外,還需要注意創(chuàng)建表格假如已經(jīng)存在,則不會重新創(chuàng)建,而是會直接退出。在這里,我們使用了 insert 命令來插入一條新的記錄,使用 update 命令來更新已有的記錄,使用 delete 命令來刪除記錄,使用 query 命令來查詢記錄。以上 5 個(gè)命令均是針對 SQLite 數(shù)據(jù)庫的操作,具體用法可以參見官方文檔。

第三步:實(shí)現(xiàn)注冊和登錄

上述代碼實(shí)現(xiàn)了數(shù)據(jù)庫的創(chuàng)建和表結(jié)構(gòu)的設(shè)計(jì),但是沒有涉及到注冊登錄的業(yè)務(wù)邏輯。因此我們接下來來看一下怎么實(shí)現(xiàn)用戶注冊和登錄。

用戶名和密碼在注冊和登錄的過程中,需要通過用戶輸入來獲取。當(dāng)用戶注冊時(shí),對輸入的信息進(jìn)行插入操作;當(dāng)用戶登錄時(shí),對輸入的信息進(jìn)行查詢操作。

接下來看下面這兩個(gè)函數(shù):

“`kotlin

fun signUp(username: String, password: String) {

if (username.isNotEmpty() && password.isNotEmpty()) {

val users = UserDataSQL.queryByUsername(username)

if (users.isNotEmpty()) {

Toast.makeText(this, “用戶名已經(jīng)存在!”, 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()

}

}

“`

以上代碼分別實(shí)現(xiàn)了用戶注冊和登錄的業(yè)務(wù)邏輯,其中 signUp() 函數(shù)用于用戶注冊,signIn() 函數(shù)用于用戶登錄。當(dāng)用戶注冊時(shí),會先通過用戶名查詢數(shù)據(jù)庫中是否已經(jīng)存在該用戶,如果沒有,則將該用戶的用戶名和密碼存入數(shù)據(jù)庫表中。而當(dāng)用戶登錄時(shí),會先通過用戶名查詢數(shù)據(jù)庫中是否存在該用戶,如果不存在,則提示“用戶名不存在”;如果存在,則將該用戶的密碼和輸入的密碼進(jìn)行比較,如果密碼相同,則提示“登錄成功”,否則提示“密碼不正確”。

需要注意的是,以上代碼純粹為了演示數(shù)據(jù)庫的業(yè)務(wù)邏輯,實(shí)際應(yīng)用開發(fā)中需要優(yōu)化代碼、加入容錯(cuò)機(jī)制、進(jìn)行網(wǎng)絡(luò)安全性等處理。

結(jié)語

相關(guān)問題拓展閱讀:

  • 如何實(shí)現(xiàn)登陸操作安卓sqlite
  • 網(wǎng)站登錄代碼怎么寫

如何實(shí)現(xiàn)登陸操作安卓sqlite

首先寫javabean

  由于該類很簡單,只是定義id,username,password,age,sex,所以在此不在給出!直接說service層業(yè)務(wù)類的代碼:

  使用SQLiteOpenHelper抽象類建立沒畝數(shù)據(jù)庫

  抽象類SQLiteOpenHelper用來對數(shù)據(jù)庫進(jìn)行版本管理,不是必須使用的。

  為了實(shí)現(xiàn)對數(shù)據(jù)庫版本進(jìn)行管理, SQLiteOpenHelper 類提供了兩個(gè)重要的方法 , 分別onCreate(SQLiteDatabasedb) 和 onUpgrade(SQLiteDatabase db, int oldVersion, intnewVersion)用于初次使用軟件時(shí)生成數(shù)據(jù)庫表,后者用于升級軟件時(shí)更新數(shù)據(jù)庫表結(jié)構(gòu)。

  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);

  }

  //只弊察源在創(chuàng)建的時(shí)候用一次

  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) 可以用來執(zhí)行非查詢 SQL 指令,這些指令沒有結(jié)果

包括: CREATE TABLE / DROP TABLE / INSERT 等等

  然后就是UserService.java實(shí)現(xiàn)對表的操作:

  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=”租態(tài)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 使用游標(biāo) (Cursors) 來導(dǎo)航瀏覽查詢結(jié)果

游標(biāo) (Cursors) 被 android.database.Cursor 對象來描述

一個(gè)游標(biāo) (Cursors) 是一個(gè)簡單的指針,它從查詢結(jié)果的一

一個(gè)或是 …… )

游標(biāo) (Cursors) 在它定位位置的那一刻返回元組數(shù)據(jù)

有以下代碼來解釋:

  // 為了創(chuàng)建一個(gè) Cursor( 游標(biāo) ) ,必須執(zhí)行一個(gè)查詢,要么通過 SQL 使用 rawQuery() 方法

  // 或是更精心設(shè)計(jì)的方法,像 query() 方法

  Cursor cur=my_DataBase.rawQuery( “SELECT * FORM test” , null null null null );

  ifififif (cur!= null null null null ){ // 游標(biāo)不為空

  // 返回給定名稱的列的基于 0 開始的 index ,如果該屬性列不存在則返回 -1

  // 通過它們的 index 來檢索屬性值

  int int int int numColumn=cur.getColumnIndex( “someNumber” );

  ifififif (cur. moveToFirst() ){

  // cur.moveToFirst() 讓游標(biāo)指向之一行, 如果游標(biāo)指向之一行,則返回 true

  do {

  int int int int num =cur.getInt(numColumn); / / 獲得當(dāng)前行該屬性的值

  / * Cursor 提供了不同的方法來回索不同的數(shù)據(jù)類型

  例如 getInt( int index)/getString( int index) 等等 */

  /* 做一些事情 */

  } while while while while (cur.moveToNext());

  / * 游標(biāo)移動到下一行,如果游標(biāo)已經(jīng)通過了結(jié)果集中的最后,

  即沒有行可以移動時(shí),則返回 false */

  // 其他可能移動的是 previous() 和 first() 方法

  }

  }

  最后要關(guān)閉游標(biāo)!?。?/p>

下面是測試代碼:

  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:

  這個(gè)錯(cuò)誤基本上都是sql有問題導(dǎo)致的,仔細(xì)檢查sql即可。

  最后想說:在寫好了實(shí)現(xiàn)類以后更好再寫這個(gè)測試類來測試一下,不然以后碰到錯(cuò)很麻煩,所以把所有的測試都通過了,再寫界面和activity,界面和activity的代碼就不給出了,源碼地址給出,有興趣的同學(xué)可以下載來參考參考?。?!

網(wǎng)站登錄代碼怎么寫

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

安卓數(shù)據(jù)庫注冊登錄代碼怎么寫的介紹就聊到這里吧,感謝你花時(shí)間閱讀本站內(nèi)容,更多關(guān)于安卓數(shù)據(jù)庫注冊登錄代碼怎么寫,「安卓數(shù)據(jù)庫注冊登錄代碼」教程全解析,如何實(shí)現(xiàn)登陸操作安卓sqlite,網(wǎng)站登錄代碼怎么寫的信息別忘了在本站進(jìn)行查找喔。

創(chuàng)新互聯(lián)服務(wù)器托管擁有成都T3+級標(biāo)準(zhǔn)機(jī)房資源,具備完善的安防設(shè)施、三線及BGP網(wǎng)絡(luò)接入帶寬達(dá)10T,機(jī)柜接入千兆交換機(jī),能夠有效保證服務(wù)器托管業(yè)務(wù)安全、可靠、穩(wěn)定、高效運(yùn)行;創(chuàng)新互聯(lián)專注于成都服務(wù)器托管租用十余年,得到成都等地區(qū)行業(yè)客戶的一致認(rèn)可。


文章題目:「安卓數(shù)據(jù)庫注冊登錄代碼」教程全解析(安卓數(shù)據(jù)庫注冊登錄代碼怎么寫)
當(dāng)前URL:http://www.5511xx.com/article/ccssejs.html