什么是Sqlite
小型的、可嵌入、开源的关系型数据库,效率高,无数据类型,支持事务操作,程序驱动。
- 跨平台的磁盘文件
- 代码量少
- api简单易用
1. sqlite数据库支持的数据类型
Integer、varchar(10)、float、double、char(10)、text
2. sql语句回顾
2.1. 创建表
create table 表名(字段名称 数据类型 约束, 字段类型,数据类型 约束...)
create table person(_id Integer primary key, name varchar(10), age Integer not null)
### 2.2 删除表
drop table 表名
drop table person
### 2.3 插入数据
insert into 表名[字段,字段] values(值1,值2)
insert into person(_id, age) values(1, 20)
insert into values(2, "zs", 30)
### 2.4 修改数据
update 表名 set 字段=新值 where 修改的条件
update person set name="ls", age = 20, where _id = 1
2.5 删除数据
delete from 表名 where 删除的条件
delete from person from where _id = 2
2.6 查询语句
select 字段名 from 表名 where 查询条件 group by 分组的字段 having 筛选条件 order by 排序字段
select * from person;
select _id, name from person
select * from person where _id = 1
select * from person where _id <> 1
select * from person where _id = 1 and age > 18
select * from person where name like "%小%"
select * from person where name like "_小%"
select * from person where name is null
select * from person where name age between 10 and 20
select * from person where age > 18 order by _id
Sqlite 数据库创建
- SQLiteOpenHelper: 帮助类
- onCreate(): 创建方法
- onUpdate(): 数据库升级方法
- onOpen(): 打开数据库方法
1. 主界面
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="18dp" android:paddingRight="18dp"
android:paddingLeft="40dp" android:paddingTop="50dp"
android:orientation="vertical"
tools:context=".MainActivity">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="创建数据库"
android:onClick="createDb"
android:background="@android:color/holo_blue_dark"/>
<Button
android:id="@+id/btn_insert"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="插入数据"
android:onClick="click"
android:background="@android:color/holo_blue_dark"
android:layout_marginTop="20dp"/>
<Button
android:id="@+id/btn_update"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="修改数据"
android:onClick="click"
android:layout_marginTop="20dp"
android:background="@android:color/holo_blue_dark"/>
<Button
android:id="@+id/btn_delete"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="删除数据"
android:onClick="click"
android:background="@android:color/holo_blue_dark"
android:layout_marginTop="20dp"/>
<Button
android:id="@+id/btn_insertApi"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="插入数据API"
android:onClick="onClick"
android:background="@android:color/holo_blue_dark"
android:layout_marginTop="20dp"/>
<Button
android:id="@+id/btn_updateApi"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="修改数据API"
android:onClick="onClick"
android:background="@android:color/holo_blue_dark"
android:layout_marginTop="20dp"/>
</LinearLayout>
2. 实现MySqliteHelper并继承自SQLiteOpenHelper
/**
* 1. 提供了onCreate() onUpgrade()等创建数据库更新数据库的方法
* 2. 提供了获取数据库对象的函数
*/
public class MySqlitHelper extends SQLiteOpenHelper {
/**
* 构造函数
* @param context 上下文对象
* @param name 当前创建数据库的名称
* @param factory 游标工厂
* @param version 表示创建的数据库的版本 >= 1
*/
public MySqlitHelper(@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
}
public MySqlitHelper(Context context) {
super(context, Constant.DATABASE_NAME, null, Constant.DATABASE_VERSION);
}
/**
* 当数据库创建时回调的函数
* @param db 数据库对象
*/
@Override
public void onCreate(SQLiteDatabase db) {
Log.i("tag", "--------onCreate--------");
String sql = "create table " + Constant.TABLE_NAME + "(" + Constant._ID +
" Integer primary key, " + Constant.NAME + " varchar(10), " + Constant.AGE +" Integer)";
db.execSQL(sql);
}
/**
* 当数据库版本更新时回调的函数
* @param sqLiteDatabase 数据库对象
* @param i 数据库旧版本
* @param i1 数据库新版本
*/
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
}
/**
* 当数据库打开时回调的函数
* @param db
*/
@Override
public void onOpen(SQLiteDatabase db) {
Log.i("tag:", "-----------onOpen-------------");
super.onOpen(db);
}
}
3. 定义DbManager类来管理数据库
/**
* 主要是对数据库操作的工具类
*/
public class DbManager {
private static MySqlitHelper helper;
public static MySqlitHelper getInstance(Context context) {
if (helper == null) {
helper = new MySqlitHelper(context);
}
return helper;
}
/**
* 根据sql语句在数据库中执行语句
* @param db 数据库对象
* @param sql sql语句
*/
public static void execSQL(SQLiteDatabase db, String sql) {
if (db != null) {
if (sql != null && !"".equals(sql)) {
db.execSQL(sql);
}
}
}
}
4. 定义常量类来存储项目相关的常量
public class Constant {
public static final String DATABASE_NAME = "info.db";
public static final int DATABASE_VERSION = 1;
public static final String TABLE_NAME = "person";
public static final String _ID = "_id";
public static final String NAME = "name";
public static final String AGE = "age";
}
5. 在MainActivity中实现相关逻辑
package com.example.sqlitedemo;
import androidx.appcompat.app.AppCompatActivity;
import android.content.ContentValues;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
private MySqlitHelper helper;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
helper = DbManager.getInstance(this);
}
/**
* 点击按钮创建数据库
*/
public void createDb(View view) {
/**
* 创建或打开数据库,如果数据不存在则创建数据库,如果数据存在则直接打开数据库
* 默认情况下,两个函数都表示打开过着创建可读可写的数据库对象,如果磁盘已满或者是数据本身权限等情况下
* getReadableDatabase()打开的是只读数据库
*/
SQLiteDatabase db = helper.getWritableDatabase();
}
public void click(View view) {
switch (view.getId()) {
case R.id.btn_insert:
SQLiteDatabase db = helper.getWritableDatabase();
String sql = "insert into "+Constant.TABLE_NAME+" values(1, 'zhangsan', 20)";
DbManager.execSQL(db, sql);
String sql2 = "inert into "+Constant.TABLE_NAME+" values(2, 'lisi', 25)";
DbManager.execSQL(db, sql2);
db.close();
break;
case R.id.btn_update:
db = helper.getWritableDatabase();
String updateSql = "update person set name = 'xiaoming' where _id = 1";
DbManager.execSQL(db, updateSql);
db.close();
break;
case R.id.btn_delete:
db = helper.getWritableDatabase();
String delSql = "delete from person where _id = 2";
DbManager.execSQL(db, delSql);
db.close();
break;
}
}
public void onClick(View view) {
SQLiteDatabase db = helper.getWritableDatabase();
switch (view.getId()) {
case R.id.btn_insertApi:
/**
* insert(String table, String nullColumnHack, ContentValues values)
*/
ContentValues values = new ContentValues();
values.put(Constant._ID, 3);
values.put(Constant.NAME, "张三");
values.put(Constant.AGE, 30);
long result = db.insert(Constant.TABLE_NAME, null, values);
if (result > 0) {
Toast.makeText(this, "插入数据成功", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(this, "插入数据失败", Toast.LENGTH_SHORT).show();
}
case R.id.btn_updateApi:
/**
* update(String table, ContentValues values, String whereClause, String[] whereArgs)
* 返回值表示修改的条数
*/
ContentValues cv = new ContentValues();
cv.put(Constant.NAME, "小木"); // 需要修改的字段名称,修改后的字段值
int count = db.update(Constant.TABLE_NAME, cv, "_id=?", new String[]{"3"});
}
}
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。