盒子
盒子
文章目录
  1. 简单应用
    1. 加密

数据库

简单应用

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;

public class DatabaseHelper extends SQLiteOpenHelper{
// 带全部参数的构造函数,此构造函数必不可少
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))";
db.execSQL(sql);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// 版本变化时调用
}
}
// -------- 应用 --------
//依靠DatabaseHelper的构造函数创建数据库
DatabaseHelper dbHelper = new DatabaseHelper(MainActivity.this, "test_db", null, 1);
db = dbHelper.getWritableDatabase();

// -- 插入 --
db.insert("user", null, values);

// -- 删除 --
db.delete("user", "name=?", new String[]{deleteData});

// -- 更新 --
db.update("user", values2, "name = ?", new String[]{beforeUpdateData});

// -- 查询 --
// 创建游标对象
Cursor cursor = db.query("user", new String[]{"name"}, null, null, null, null, null);
// 利用游标遍历所有数据对象
while (cursor.moveToNext()) {
String name = cursor.getString(cursor.getColumnIndex("name"));
}

加密

// https://github.com/sqlcipher/android-database-sqlcipher
implementation "net.zetetic:android-database-sqlcipher:4.3.0@aar"
implementation "androidx.sqlite:sqlite:2.1.0"

// 补充全局初始化
SQLiteDatabase.loadLibs(this);

// 替换导入
import net.sqlcipher.Cursor;
import net.sqlcipher.database.SQLiteDatabase;
import net.sqlcipher.database.SQLiteOpenHelper;

// 数据库操作句柄
public SQLiteDatabase reader() {
return this.getReadableDatabase("test");
}

public SQLiteDatabase writer() {
return this.getWritableDatabase("test");
}
// DEMO
import android.content.ContentValues;
import android.content.Context;
import android.util.Log;

import net.sqlcipher.Cursor;
import net.sqlcipher.database.SQLiteDatabase;
import net.sqlcipher.database.SQLiteOpenHelper;

public class DatabaseHelper extends SQLiteOpenHelper {
private static final String TAG = DatabaseHelper.class.getSimpleName();
private static final String DB_FILE = "testdb";
private static final String DB_KEY = "test";

public static void loadLibs(Context context) {
SQLiteDatabase.loadLibs(context);
}

public static void test(Context context) {
loadLibs(context); // 一定要优先调用

DatabaseHelper helper = new DatabaseHelper(context, DB_FILE, null, 1);
SQLiteDatabase db = helper.writer();
helper.insert("赵大", 1);
helper.insert("李二", 2);
helper.insert("张三", 3);
helper.insert("李四", 4);
helper.insert("王五", 5);
Cursor cursor = helper.query("赵大");

if (cursor.getCount() > 0) {
int nameIndex = cursor.getColumnIndex("name");
int ageIndex = cursor.getColumnIndex("age");
while (cursor.moveToNext()) {
String name = cursor.getString(nameIndex);
int age = cursor.getInt(ageIndex);
Log.e(TAG, String.format("name: %s, age: %d", name, age));
}
}
}

// 带全部参数的构造函数,此构造函数必不可少
public DatabaseHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
}

@Override
public void onCreate(SQLiteDatabase db) {
String sql = "CREATE TABLE test(name VARCHAR(20), age INT)";
db.execSQL(sql);
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

}

public SQLiteDatabase reader() {
return this.getReadableDatabase(DB_KEY);
}

public SQLiteDatabase writer() {
return this.getWritableDatabase(DB_KEY);
}

public void insert(String name, int age) {
ContentValues values = new ContentValues();
values.put("name", name);
values.put("age", age);
this.writer().insert("test", null, values);
}

public Cursor query(String name) {
return this.reader().rawQuery("SELECT * FROM test WHERE name=?", new String[]{name});
}
}
支持一下
扫一扫,支持一下
  • 微信扫一扫
  • 支付宝扫一扫