SQLite是一个进程内的库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。它是一个零配置的数据库,这意味着与其他数据库不一样,您不需要在系统中配置。就像其他数据库,SQLite 引擎不是一个独立的进程,可以按应用程序需求进行静态或动态连接。SQLite 直接访问其存储文件。
轻量
兼容
多端
无需配置
无外部依赖
拥有简单易懂的API
安全
Android 提供的 SQLiteOpenHelper.java 是一个抽象类。那么在Eclipse中创建Class类时,选择此抽象类模板即可,而在Android Studio中,必须自己写一个类来继承它,根据平时类名称简洁易懂的习惯上,我们创建的都是MyDataBaseHelper.java或DataBaseHelper.java简写DBHelper.java。
new
,选择新建Class
输入类名称
public class DBHelper extends SQLiteOpenHelper{
}
//带有全部参数的构造函数,此构造函数是必须需要的。Eclipse和Android Studio均有自动填充功能
public DatabaseHelper(Context context, String name, CursorFactory factory, int version) {
super(context, name, factory, version);
}
@Override
public void onCreate(SQLiteDatabase db) {
//创建数据库sql语句
String sql = "create table user(name varchar(20))";
//执行sql语句
db.execSQL(sql);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
new
,选择新建Class
SQLiteOpenHelper
Finish
即创建成功创建数据库
//创建数据库sql语句
//创建一个数据库,表名为“user”,内含有一个名字为name,类型为varchar类型的数据库表
String sql = "create table user(name varchar(20))";
//执行sql语句
db.execSQL(sql);
第一句代码中,创建Activity时会自动生成。在Activity中创建数据库,这里我们给数据库起名为“info.db”,数据库版本号为1,代码如下:
//依靠DatabaseHelper带全部参数的构造函数创建数据库
DBHelper dbHelper = new DBHelper(MainActivity.this, "info.db",null,1);
//通过SQLiteDatabase指定数据库读写权限
SQLiteDatabase db = dbHelper.getWritableDatabase();
db.insert();
db.delete();
db.update();
Cursor cursor = db.rawQuery("select * from info.db", null);
if (cursor.getCount() != 0) {
}
解析:创建完毕数据库(
SQLiteOpenHelper
)类后,需要在类的OnCreate方法中通过SQL命令创建数据库
代码:
@Override
public void onCreate(SQLiteDatabase db) {
//创建数据库
db.execSQL("create table user (\_id integer primary key autoincrement,username text,passward text)");
//向数据库插入数据
db.execSQL("insert into user (username,passward)values(?,?)", new String[]{"admin", "123456"});
}
然后在需要用到数据库的类、Activity或Fragment中新建数据库对象并绑定
private MyDataBaseHelper dbHelper;
private SQLiteDatabase db;
dbHelper = new MyDataBaseHelper(getApplicationContext(), "info.db", null, 2);
db = dbHelper.getWritableDatabase();
解析:用户注册时,主要是用数据库的插入指令。基本题目要求同一用户名只能注册一次,即当用户名已注册时无法再次进行注册。
使用
if(){}else{}
判断条件,当满足某一条件时进行判断用户名是否存在并插入数据库完成注册功能。
数据库代码:
//db执行sql命令:insert into(插入到) user(你的数据库表名) username,passward(你的数据库列名) values(?,?)(正则匹配,values前括号内有几个参数,后面要跟相同数量的问号) new String[]{}(传入参数,相同数据库语句内有几个参数,后面要传入相同数量的参数)
db.execSQL("insert into user (username,passward)values(?,?)",new String[]{参数1,参数2});
可参照图片:
如何判断用户是否已存在?
解析:使用
Cursor
游标方法类,从数据库获取列表并比对。
//使用游标获取数据库列表并匹配参数
Cursor cursor = db.rawQuery("select \* from user where username = ?", new String[]{"参数1"});
if (cursor.moveToNext()) {
//条件满足,游标移动,即数据库中已有匹配数据
Toast.makeText(this, "用户名已存在", Toast.LENGTH\_SHORT).show();
} else {
//条件不满足,游标未移动,即数据库中未找到相匹配数据
Toast.makeText(this, "用户名不存在", Toast.LENGTH\_SHORT).show();
}
如何插入数据库(即用户名不存在时注册成功)
解析:使用
Cursor
游标方法类,从数据库获取列表并比对,最后通过判断来执行sql语句
//使用游标获取数据库列表并匹配参数(释义:查找user数据表中的username列中参数值和“参数1”相同的位置并移动游标)
Cursor cursor = db.rawQuery("select \* from user where username = ?", new String[]{"参数1"});
//判断条件:游标是否移动
if (cursor.moveToNext()) {
//条件满足,游标移动,即数据库中已有匹配数据
Toast.makeText(this, "用户名已存在", Toast.LENGTH\_SHORT).show();
} else {
//条件不满足,游标未移动,即数据库中未找到相匹配数据,所以插入数据库注册成功
db.execSQL("insert into user (username,passward)values(?,?)", new String[]{"参数1", "参数2"});
//给出提示
Toast.makeText(this, "注册成功", Toast.LENGTH\_SHORT).show();
}
解析:用户登录的逻辑和注册基本一致,但是登录相对来说要精简一些
代码:
//使用游标获取数据库列表并匹配参数(释义:查找user数据表中的username、passward两个列中参数值和“参数1”、“参数2”同时相同的位置并移动游标)
Cursor cursor = db.rawQuery("select \* from user where username = ? and passward = ?", new String[]{"参数1","参数2"});
//判断条件:游标是否移动
if (cursor.moveToNext()) {
//条件满足,游标移动,即数据库中可以找到匹配数据,登陆成功
Toast.makeText(this, "登录成功", Toast.LENGTH\_SHORT).show();
} else {
//条件不满足,游标未移动,即数据库中未找到相匹配数据,登录失败
Toast.makeText(this, "用户名或密码输入错误", Toast.LENGTH\_SHORT).show();
}
至此,技能赛大概会用到的SQL数据库基本学习完毕。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。