前言:
SQLite 简介: 是一款轻型的数据库, 是遵守 ACID 的关系型数据库管理系统, 它包含在一个相对小的 C 库中. 它是 D.RichardHipp 建立的公有领域项目. 它的设计目标是嵌入式的, 而且目前已经在很多嵌入式产品中使用了它, 它占用资源非常的低, 在嵌入式设备中, 可能只需要几百 K 的内存就够了. 它能够支持 Windows/Linux/Unix 等等主流的操作系统, 同时能够跟很多程序语言相结合, 比如 Tcl,C#,PHP,Java 等, 还有 ODBC 接口, 同样比起 MySQL,PostgreSQL 这两款开源的世界著名数据库管理系统来讲, 它的处理速度比他们都快. SQLite 第一个 Alpha 版本诞生于 2000 年 5 月.
SQLite 数据库, 它广泛用于包括浏览器, iOS,Android 以及一些便携需求的小型 web 应用系统.
接下来, 我会通过一个登录功能来介绍一下 SQLite 数据库在实际 Android 项目中的使用.
SQLite 数据库的常用操作:
包含建表, 删除表, 增, 删, 改, 查, SQL 语法如下:
建表:
create table if not exists 表名 (字段 1 类型 (长度), 字段 2 类型 (长度),...)
删除表:
drop table if exists 表名
增:
insert into 表名 (字段 1, 字段 2, 字段 3 ...) values (值 1, 值 2, 值 3 ...);
insert into 目标数据表 select * from 源数据表;
删:
delete from 表名 where 条件表达式
改:
update 表名 set 字段 1 = 值 1, 字段 2 = 值 2... where 条件表达式
查:
select * from 表名 where 条件表达式
实例:
1, 首先先创建一个 DBHelper 类 (DBOpenHelper.java)
在这里会执行建库, 建表的操作
- package com.hyl.dao;
- import Android.content.Context;
- import Android.database.SQLite.SQLiteDatabase;
- import Android.database.SQLite.SQLiteOpenHelper;
- import Android.database.SQLite.SQLiteDatabase.CursorFactory;
- /**
- * @programName: DBOpenHelper.java
- * @programFunction: database helper class
- * @createDate: 2018/09/29
- * @author: AnneHan
- * @version:
- * xx. yyyy/mm/dd ver author comments
- * 01. 2018/09/29 1.00 AnneHan New Create
- */
- public class DBOpenHelper extends SQLiteOpenHelper {
- public DBOpenHelper(Context context,String name, CursorFactory factory,
- int version){
- super(context, name, factory, version);
- }
- @Override
- // 首次创建数据库的时候调用, 一般可以执行建库, 建表的操作
- //SQLite 没有单独的布尔存储类型, 它使用 INTEGER 作为存储类型, 0 为 false,1 为 true
- public void onCreate(SQLiteDatabase db){
- //user table
- db.execSQL("create table if not exists user_tb(_id integer primary key autoincrement," +
- "userID text not null," +
- "pwd text not null)");
- }
- @Override// 当数据库的版本发生变化时, 会自动执行
- public void onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion){
- }
- }
- View Code
2, 进入登录界面
在点击登录按钮时, 会去数据库里面进行查询, 判断账号是否存在 (Query 查询范例)
- /**
- * login event
- * @param v
- */
- public void OnMyLoginClick(View v){
- // 判断账号 / 密码是否有输入的处理...
- // 调用 DBOpenHelper (qianbao.db 是创建的数据库的名称)
- DBOpenHelper helper = new DBOpenHelper(this,"qianbao.db",null,1);
- SQLiteDatabase db = helper.getWritableDatabase();
- // 根据画面上输入的账号 / 密码去数据库中进行查询 (user_tb 是表名)
- Cursor c = db.query("user_tb",null,"userID=? and pwd=?",new String[]{参数 1 的值, 参数 2 的值},null,null,null);
- // 如果有查询到数据
- if(c!=null && c.getCount()>= 1){
- // 可以把查询出来的值打印出来在后台显示 / 查看
- /*String[] cols = c.getColumnNames();
- while(c.moveToNext()){
- for(String ColumnName:cols){
- Log.i("info",ColumnName+":"+c.getString(c.getColumnIndex(ColumnName)));
- }
- }*/
- c.close();
- db.close();
- this.finish();
- }
- // 如果没有查询到数据
- else{
- Toast.makeText(this, "手机号或密码输入错误!", Toast.LENGTH_SHORT).show();
- }
- }
3, 如果账号不存在, 则需要去注册一个新账号 (Insert 新增范例)
- import com.hyl.dao.DBOpenHelper;
- import Android.content.ContentValues;
- import Android.database.Cursor;
- import Android.database.SQLite.SQLiteDatabase;
- /**
- * register event
- * @param v
- */
- public void OnMyRegistClick(View v){
- // 对用户输入的值的格式进行判断的处理...
- // 调用 DBOpenHelper
- DBOpenHelper helper = new DBOpenHelper(this,"qianbao.db",null,1);
- SQLiteDatabase db = helper.getWritableDatabase();
- // 根据画面上输入的账号去数据库中进行查询
- Cursor c = db.query("user_tb",null,"userID=?",new String[]{参数 1 的值},null,null,null);
- // 如果有查询到数据, 则说明账号已存在
- if(c!=null && c.getCount()>= 1){
- Toast.makeText(this, "该用户已存在", Toast.LENGTH_SHORT).show();
- c.close();
- }
- // 如果没有查询到数据, 则往数据库中 insert 一笔数据
- else{
- //insert data
- ContentValues values= new ContentValues();
- values.put("userID","画面上输入的值");
- values.put("pwd","画面上输入的值");
- long rowid = db.insert("user_tb",null,values);
- Toast.makeText(this, "注册成功", Toast.LENGTH_SHORT).show();// 提示信息
- this.finish();
- }
- db.close();
- }
4, 如果用户忘记密码, 则需要进行密码重置 (Update 修改范例)
- /**
- * confirm event
- */
- private void confirmInfo() {
- // 对界面上用户输入的值进行判断的处理...
- // 调用 DBOpenHelper
- DBOpenHelper helper = new DBOpenHelper(this,"qianbao.db",null,1);
- SQLiteDatabase db = helper.getWritableDatabase();
- // 根据画面上输入的账号 / 密码去数据库中进行查询
- Cursor c = db.query("user_tb",null,"userID=?",new String[]{editPhone.getText().toString()},null,null,null);
- // 如果有查询到数据, 说明账号存在, 可以进行密码重置操作
- if(c!=null && c.getCount()>= 1){
- ContentValues cv = new ContentValues();
- cv.put("pwd", editPhone.getText().toString());//editPhone 界面上的控件
- String[] args = {String.valueOf(editPhone.getText().toString())};
- long rowid = db.update("user_tb", cv, "userID=?",args);
- c.close();
- db.close();
- Toast.makeText(this, "密码重置成功!", Toast.LENGTH_SHORT).show();
- this.finish();
- }
- // 如果没有查询到数据, 提示用户到注册界面进行注册
- else{
- new AlertDialog.Builder(this)
- .setTitle("提示")
- .setMessage("该用户不存在, 请到注册界面进行注册!")
- .setPositiveButton("确定", new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog, int whichButton) {
- setResult(RESULT_OK);
- Intent intent=new Intent(当前重置密码界面. this, 注册界面. class);
当前重置密码界面. this.startActivity(intent);
- }
- })
- .setNegativeButton("取消", new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog, int whichButton) {
- return;
- }
- })
- .show();
- }
- }
以上是一个登录功能完整的处理流程, 包含了建库, 增 / 改 / 查数据等操作, 希望能让大家对 SQLite 数据库在实际项目中的使用有一个大概了解, 不足之处, 欢迎指正.
来源: https://www.cnblogs.com/AnneHan/p/9724688.html