了解SQLite与Android进行简单的应用

SQLite

一、为什么要用SQLite

1.不需要一个单独的服务器进程或操作的系统(无服务器的)。
2.SQLite 不需要配置,这意味着不需要安装或管理。
3.一个完整的 SQLite 数据库是存储在一个单一的跨平台的磁盘文件。
4.SQLite 是非常小的,是轻量级的,完全配置时小于 400KiB,省略可选功能配置时小于250KiB。
5.SQLite 是自给自足的,这意味着不需要任何外部的依赖。
6.SQLite 事务是完全兼容 ACID 的,允许从多个进程或线程安全访问。
7.SQLite 支持 SQL92(SQL2)标准的大多数查询语言的功能。
8.SQLite 使用 ANSI-C 编写的,并提供了简单和易于使用的 API。
9.SQLite 可在 UNIX(Linux, Mac OS-X, Android, iOS)和 Windows(Win32, WinCE, WinRT)中运行。

二、什么是SQLite

SQLite是一个进程内的库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。它是一个零配置的数据库,这意味着与其他数据库一样,您不需要在系统中配置。就像其他数据库,SQLite 引擎不是一个独立的进程,可以按应用程序需求进行静态或动态连接。SQLite 直接访问其存储文件。

三、如何创建数据库和数据表

1.SQLiteOpenHelper帮助类,借助这个类就可以非常简单地对数据库进行创建和升级。 SQLiteOpenHelper 是一个抽象类
2.SQLiteOpenHelper 中有两个抽象方法,分别是onCreate()和 onUpgrade(),我们必须在自己的帮助类里面重写这两个方法,然后分别在这两个方法中去实现创建、升级数据库的逻辑
3.SQLiteOpenHelper中还有两个非常重要的实例方法, getReadableDatabase()和getWritableDatabase()这两个方法都可以创建或打开一个现有的数据库(如果数据库已存在则直接打开,否则创建一个新的数据库),并返回一个可对数据库进行读写操作的对象。不同的是,当数据库不可写入的时候(如磁盘空间已满)getReadableDatabase()方法返回的对象将以只读的方式去打开数据库,而getWritableDatabase()方法则将出现异常。
(参考:SQLite

四、创建注册登录的布局,利用SQLite进行注册登录

1、新建一个DBHelper 继承SQLiteOpenHelper

package com.example.mysql;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class DBHelper extends SQLiteOpenHelper {

///DATABASE_NAME数据库名称
private final static String DB_NAME = "Data.db";
///DATABASE_VERSION数据库版本
private final static int DATABASE_VERSION = 1;
public DBHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
    super(context, DB_NAME, factory, DATABASE_VERSION);
}

@Override
public void onCreate(SQLiteDatabase db) {
    //创建表
    String usersInfo_table = "create table usertable" +
            "(id integer primary key autoincrement, username text," +
            "password text)";
    db.execSQL(usersInfo_table);
}

	@Override
	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
	    db.execSQL("alter table usertable add column other string");	
	}
}

2、注册逻辑代码

注册

	package com.example.mysql;
	
	import android.content.ContentValues;
	import android.content.Intent;
	import android.database.Cursor;
	import android.database.sqlite.SQLiteDatabase;
	import android.os.Bundle;
	import android.text.TextUtils;
	import android.view.View;
	import android.widget.Button;
	import android.widget.EditText;
	import android.widget.Toast;
	
	import androidx.appcompat.app.AppCompatActivity;
	
	
	public class RegisterActivity extends AppCompatActivity implements View.OnClickListener {
	
	private EditText account,pwd,re_pwd;
	private Button btn_regist;
	private DBHelper dbHelper;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
	    super.onCreate(savedInstanceState);
	    setContentView(R.layout.activity_register);
	    dbHelper = new DBHelper(this, "Data.db", null, 1);
	    initView();
	}
	
	private void initView() {
	    account = (EditText) findViewById(R.id.account);
	    pwd = (EditText) findViewById(R.id.pwd);
	    re_pwd = (EditText) findViewById(R.id.re_pwd);
	    btn_regist = (Button) findViewById(R.id.btn_regist);
	
	    btn_regist.setOnClickListener(this);
	}
	
	@Override
	public void onClick(View v) {
	    if (v.getId() == R.id.btn_regist) {
	        register();
	    }
	}
	
	///注册
	private void register() {
	    ///获取账号文本框的值
	    String accountString = account.getText().toString().trim();
	    if (TextUtils.isEmpty(accountString)) {
	        Toast.makeText(this, "accountString不能为空", Toast.LENGTH_SHORT).show();
	        return;
	    }
	    ///获取密码文本框的值
	    String pwdString = pwd.getText().toString().trim();
	    if (TextUtils.isEmpty(pwdString)) {
	        Toast.makeText(this, "pwdString不能为空", Toast.LENGTH_SHORT).show();
	        return;
	    }
	    ///获取确认密码文本框的值
	    String repwd = re_pwd.getText().toString().trim();
	    if (TextUtils.isEmpty(repwd)) {
	        Toast.makeText(this, "pwd不能为空", Toast.LENGTH_SHORT).show();
	        return;
	    }
	    ///判断两次输入密码是否一致
	    if (pwdString.equals(repwd)) {
	    ///检验用户名是否已经注册
	        if (CheckIsDataAlreadyInDBorNot(accountString)) {
	            Toast.makeText(this, "该用户名已被注册,注册失败", Toast.LENGTH_SHORT).show();
	        }else {
	    ///进行数据库访问写入账号、密码
	            registerUserInfo(accountString,pwdString);
	            Toast.makeText(this, "注册成功!", Toast.LENGTH_SHORT).show();
	            Intent register_intent = new Intent(RegisterActivity.this,LoginActivity.class);
	            startActivity(register_intent);
	        }
	    } else {
	        Toast.makeText(this, "两次输入密码不同,请重新输入!",
	                Toast.LENGTH_SHORT).show();
	    }
	}
	/**
	 * 利用sql创建嵌入式数据库进行注册访问
	 */
	private void registerUserInfo(String username, String userpassword) {
	    SQLiteDatabase db = dbHelper.getWritableDatabase();
	    ContentValues values = new ContentValues();
	    values.put("username", username);
	    values.put("password", userpassword);
	    db.insert("usertable", null, values);
	    db.close();
	}
	
	/**
	 * 检验用户名是否已经注册
	 */
	private boolean CheckIsDataAlreadyInDBorNot(String value) {
	    SQLiteDatabase db = dbHelper.getWritableDatabase();
	    String Query = "Select * from usertable where username =?";
	    Cursor cursor = db.rawQuery(Query, new String[]{value});
	    if (cursor.getCount() > 0) {
	        cursor.close();
	        return true;
	    }
	    cursor.close();
	    return false;
	}
}

3、登录逻辑代码

登录

package com.example.mysql;

import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import androidx.appcompat.app.AppCompatActivity;

public class LoginActivity extends AppCompatActivity implements View.OnClickListener {

private EditText account;
private EditText pwd;
private Button btn_login;
private TextView btn_register;
private DBHelper dbHelper;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_login);
    initView();
}

private void initView() {
	    account = (EditText) findViewById(R.id.account);
	    pwd = (EditText) findViewById(R.id.pwd);
	    btn_login = (Button) findViewById(R.id.btn_login);
	    btn_register = (TextView) findViewById(R.id.btn_register);
	
	
	btn_login.setOnClickListener(this);
	btn_register.setOnClickListener(this);
	
	}
	
	@Override
	public void onClick(View v) {
	    switch (v.getId()) {
	        case R.id.btn_login:
	            ///登录
	            login();
	            break;
	        case R.id.btn_register:
	            ///跳转到注册页面
	            Intent login_intent = new Intent(LoginActivity.this,
	                    RegisterActivity.class);
	            startActivity(login_intent);
	            break;
	    }
	}
	
	///登录代码逻辑
	private void login() {
	    String accountString = account.getText().toString().trim();
	    if (TextUtils.isEmpty(accountString)) {
	        Toast.makeText(this, "请输入账号", Toast.LENGTH_SHORT).show();
	        return;
	    }
	
	String pwdString = pwd.getText().toString().trim();
	if (TextUtils.isEmpty(pwdString)) {
	    Toast.makeText(this, "请输入密码", Toast.LENGTH_SHORT).show();
	}else {
	    ///读取Data.db中的用户信息
	    readUserInfo();
	}        
	
	}
	
	/**
	 * 读取Data.db中的用户信息
	 * */
	protected void readUserInfo() {
	    String accountString = 
	
	account.getText().toString().trim();
	        String pwdString = pwd.getText().toString().trim();
	
	if (login(accountString, pwdString)) {
	    Toast.makeText(this, "登陆成功!", Toast.LENGTH_SHORT).show();
	    ///验证成功,跳转到主页面
	    Intent intent = new Intent(LoginActivity.this, MainActivity.class);
	    startActivity(intent);
	} else {
	    Toast.makeText(this, "账户或密码错误,请重新输入!!", Toast.LENGTH_SHORT).show();
	}
	
	}
	/**
	 * 验证登录信息
	 * */
	public boolean login(String username, String password) {
	    SQLiteDatabase db = dbHelper.getWritableDatabase();
	    String sql = "Select * from usertable where username=? and password=?";
	    Cursor cursor = db.rawQuery(sql, new String[]{username, password});
	
	    if (cursor.moveToFirst()) {
	        cursor.close();
	        return true;
	    }
	    return false;
	}
}

总结:

通过对SQLite的了解,如何创建数据库和数据表,还有注册登录的示例,就可以快速了解SQLite在Android的实际应用,当然这是初步了解,有什么问题或遇到什么bug的话,欢迎评论区留言评论。如果可以,我们一起继续深入学习吧!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值