一,SQLite简介
也是使用SQL语句,操作数据库的;也是关系型数据库的一种;特点:运算速度快,占用资源少;
二,创建SQLiteOpenHelper
Android使用SQLite数据库,就必须继承SQLiteOpenHelper,而且必须实现三个方法,这三个方法缺一不可,是固定的形式;一个是构造函数(一般是四个参数的构造),onCreate,onUpgrade;
public class DBHelper extends SQLiteOpenHelper {
public DBHelper(@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
}
@Override
public void onCreate(SQLiteDatabase db) {
//创建表的SQL语句
String table = "create table user(id int ,name varchar(20))";
db.execSQL(table);
Log.d("","数据库创建了");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Log.d("","数据库升级 了");
}
}
构造函数四个参数:
- Context:上下文,这个相信都知道
- name:就是要创建的数据库名字;
- CursorFactory:游标工厂,相当于结果集;传参的时候一般传入null,系统默认使用默认的Cursor;
- version:版本号,当version改变时就会调用onUpgrade方法升级;注意版本号不能回退;
三,创建数据库
创建数据库对象;
public class TestDB extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//创建数据库 名字可以不带.db,为了增加可读性,最好加上.db
DBHelper helper = new DBHelper(this, "login.db", null, 1);
//如果数据库不存在,则创建数据库,然后获取可读可写的数据库对象,如果存在,直接打开;
SQLiteDatabase writableDatabase = helper.getWritableDatabase();
//如果存储空间满了,获取一个只读数据库对象;
SQLiteDatabase readableDatabase = helper.getReadableDatabase();
}
}
四,创建表
一般时创建数据库的时候创建表,而且数据库一但创建成功onCreate方法就不会在调用;所以一般在再onCreate方法中创建表;
五,CRUD
直接SQL语句执行增删改查;SQL语句不清楚可以查看这篇文章,详细介绍了CRUD的使用https://blog.csdn.net/ezconn/article/details/103840699
增(插入数据)
public void insert() {
DBHelper helper = new DBHelper(this, "user.db", null, 1);
//如果数据不存在,则创建数据,然后获取可读可写的数据库对象,如果存在,直接打开;
SQLiteDatabase writableDatabase = helper.getWritableDatabase();
writableDatabase.execSQL("insert into user(id,name,phone) values(?,?,?)", new Object[]{1, "藏三","13888"});
writableDatabase.execSQL("insert into user(id,name,phone) values(?,?,?)", new Object[]{2, "李四","15888"});
writableDatabase.execSQL("insert into user(id,name,phone) values(?,?,?)", new Object[]{3, "王五","16888"});
writableDatabase.execSQL("insert into user(id,name,phone) values(?,?,?)", new Object[]{4, "赵六","17888"});
writableDatabase.close();
}
删除数据
private void delete() {
DBHelper helper = new DBHelper(this, "user.db", null, 1);
//如果数据不存在,则创建数据,然后获取可读可写的数据库对象,如果存在,直接打开;
SQLiteDatabase writableDatabase = helper.getWritableDatabase();
writableDatabase.execSQL("delete from user where name = ?", new Object[]{"藏三"});
writableDatabase.close();
}
修改数据
private void update() {
DBHelper helper = new DBHelper(this, "user.db", null, 1);
//如果数据不存在,则创建数据,然后获取可读可写的数据库对象,如果存在,直接打开;
SQLiteDatabase writableDatabase = helper.getWritableDatabase();
writableDatabase.execSQL("update user set id = ? where name = ?", new Object[]{6,"王五"});
writableDatabase.close();
}
查询数据
private void select() {
DBHelper helper = new DBHelper(this, "user.db", null, 1);
//如果数据不存在,则创建数据,然后获取可读可写的数据库对象,如果存在,直接打开;
SQLiteDatabase writableDatabase = helper.getWritableDatabase();
Cursor cursor = writableDatabase.rawQuery("select name from user",null);
while (cursor.moveToNext()) {
String name = cursor.getString(cursor.getColumnIndex("name"));
Log.d("查询name的值:", name);
}
writableDatabase.close();
}
SQLite Android API操作增删改查(CRUD)
增加数据
public void insertApi() {
DBHelper helper = new DBHelper(this, "user.db", null, 1);
//如果数据库不存在,则创建数据,然后获取可读可写的数据库对象,如果存在,直接打开;
SQLiteDatabase db = helper.getWritableDatabase();
//把插入的数据全部封装到ContentValues对象中
ContentValues values = new ContentValues();
values.put("id",10);
values.put("name","阿龙");
values.put("phone","11112233");
db.insert("user", null, values);
}
删除数据
private void deleteApi() {
DBHelper helper = new DBHelper(this, "user.db", null, 1);
//如果数据不存在,则创建数据,然后获取可读可写的数据库对象,如果存在,直接打开;
SQLiteDatabase db = helper.getWritableDatabase();
//删除name=阿龙 id=10的记录
db.delete("user","name =? and id = ?",new String[]{"阿龙","10"});
}
修改数据
private void updateApi() {
DBHelper helper = new DBHelper(this, "user.db", null, 1);
//如果数据不存在,则创建数据,然后获取可读可写的数据库对象,如果存在,直接打开;
SQLiteDatabase db = helper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("name", "张三丰");
//修改id=1的记录中的name = 张三丰
db.update("user", values, "id = ?", new String[]{"1"});
}
查询数据
查询表中所有数据
private void selectApi() {
DBHelper helper = new DBHelper(this, "user.db", null, 1);
//如果数据不存在,则创建数据,然后获取可读可写的数据库对象,如果存在,直接打开;
SQLiteDatabase db = helper.getWritableDatabase();
//查询数据所有数据
Cursor cursor = db.query("user", null, null, null, null, null, null,null);
while (cursor.moveToNext()) {
String name = cursor.getString(cursor.getColumnIndex("name"));
String phone = cursor.getString(cursor.getColumnIndex("phone"));
Log.d("查询name的值:", name + " phone: " + phone);
}
}
方法及参数说明
public Cursor query(String table,String[] columns,String selection,String[] selectionArgs,String groupBy,String having,String orderBy,String limit);
各个参数的意义说明:
table:表名称
columns:列名称数组
selection:条件语句,相当于where
selectionArgs:条件字句,参数数组
groupBy:分组列
having:分组条件
orderBy:排序列
limit:分页查询限制
Cursor:返回值,相当于结果集ResultSet
事务
SQLite也是支持事务的
总结
SQLite不检查数据类型,都是以字符串的形式存入数据库的;会存在隐患,使用的过程中一定规范数据类型;