一、前言
这篇文章主要针对Android自带的轻量级数据库SQLite 实现增删改查。该数据库常用于本地数据的储存喝管理。例如,可以将用户信息,日志数据等重要信息存储在SQLite数据库中。
二、代码实现
1.创建MySqliteOpenHelp作为工具类
/**
* MySqliteOpenHelp作为工具类 使用单例模式(1.构造函数私有化:不让外界访问。2.对外提供函数)
*/
public class MySqliteOpenHelper extends SQLiteOpenHelper {
//2.对外界提供函数 单例模式
private static SQLiteOpenHelper mInstance;
public static synchronized SQLiteOpenHelper getInstance(Context context){
if (mInstance == null){
mInstance = new MySqliteOpenHelper(context,"AnglinDB",null,1);//想要数据库升级把1改为2
}
return mInstance;
}
//为什么要有含参构造函数,因为需要传给父类上下文,数据库名称,工厂,版本号等参数
//第一步:构造函数私有化:不让外界访问
private MySqliteOpenHelper(@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);//传给父类
}
//创建表 表数据初始化 数据库第一次创建的时候调用。第二次发现有了就不会重复创建了。也意味着:函数只执行一次。
//数据库初始化
@Override
public void onCreate(SQLiteDatabase db) {
//创建表 :person
//主键:primary key必须唯一的
//自动增长:例如 1,2,3,4,5 autoincrement
//_id标准的写法(要求1) 只能使用:主键只能使用Integer类型的(要求2)
//id 写法不标准
String sql = "create table person(_id integer primary key autoincrement, name text)";
db.execSQL(sql);
}
//数据库升级
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
}
}
2.实现数据库的增删改查
//SQLite增删改查
public class DBActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_dbactivity);
}
/**
* 生成DB文件
*
* @param view
*/
public void createDB(View view) {
SQLiteOpenHelper helper = MySqliteOpenHelper.getInstance(this);
//database文件夹创建靠下面这句话
SQLiteDatabase readableDatabase = helper.getReadableDatabase();
}
/**
* 查询
*
* @param view
*/
public void query(View view) {
SQLiteOpenHelper helper = MySqliteOpenHelper.getInstance(this);
//database文件夹创建靠下面这句话
SQLiteDatabase db = helper.getReadableDatabase();
if (db.isOpen()) {//确保数据库打开才能放心操作
//返回游标
Cursor cursor = db.rawQuery("select * from person", null);
//迭代游标往下面移动来迭代数据
while (cursor.moveToNext()) {
@SuppressLint("Range")
int _id = cursor.getInt(cursor.getColumnIndex("_id"));
@SuppressLint("Range")
String name = cursor.getString(cursor.getColumnIndex("name"));
Log.d("Anglin", "query:_id " + _id +","+ "name:" + name);
}
//一定要记得关闭游标,否则会耗费性能
cursor.close();
//数据库也要关闭
db.close();
}
}
/**
* 插入数据到数据库
*
* @param view
*/
public void insert(View view) {
SQLiteOpenHelper helper = MySqliteOpenHelper.getInstance(this);
//database文件夹创建靠下面这句话
SQLiteDatabase db = helper.getWritableDatabase();
if (db.isOpen()) {//确保数据库打开才能放心操作
//插入语句
String sql = "insert into person(name)values('Anglin')";
db.execSQL(sql);
//规范:必须关闭数据库
db.close();
}
}
/**
* 修改第3条数据 为恭喜发财
*
* @param view
*/
public void update(View view) {
SQLiteOpenHelper helper = MySqliteOpenHelper.getInstance(this);
//database文件夹创建靠下面这句话
SQLiteDatabase db = helper.getWritableDatabase();
if (db.isOpen()) {//确保数据库打开才能放心操作
//修改语句
String sql = "update person set name =? where _id =?";
db.execSQL(sql, new Object[]{"恭喜发财", 3});
//规范:必须关闭数据库
db.close();
}
}
/**
* 删除:第四条数据
*
* @param view
*/
public void delete(View view) {
SQLiteOpenHelper helper = MySqliteOpenHelper.getInstance(this);
//database文件夹创建靠下面这句话
SQLiteDatabase db = helper.getWritableDatabase();
if (db.isOpen()) {//确保数据库打开才能放心操作
//修改语句
String sql = "delete from person where _id =?";
db.execSQL(sql, new Object[]{4});
//规范:必须关闭数据库
db.close();
}
}
}
页面布局
<?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:orientation="vertical"
tools:context=".study.DBSQLite.DBActivity">
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="createDB"
android:text="生成DB文件"
tools:layout_editor_absoluteX="191dp"
tools:layout_editor_absoluteY="261dp" />
<Button
android:id="@+id/button3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="query"
android:text="查询" />
<Button
android:id="@+id/button4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="insert"
android:text="插入" />
<Button
android:id="@+id/button5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="update"
android:text="修改" />
<Button
android:id="@+id/button6"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="delete"
android:text="删除" />
</LinearLayout>