本代码使用的Android版本:android-studio-2024.2.1.11-windows
要先在java项目下创建一个DBHelper类来装载我们的代码,在其中获取WDB和RDB对象,来帮我们对于数据库进行操作,而不是一次又一次的写sql语句,我是比较热衷于调用读写实例完成操作,毕竟sql语句比较容易写错。
基础模板如下:
package com.example.wechattest.AllHelper;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
import com.example.wechattest.POJO.Friend;
import com.example.wechattest.POJO.User;
import java.util.ArrayList;
import java.util.List;
public class DBHelper extends SQLiteOpenHelper {
//数据库名称 //这边名称为user.db
private static String DB_NAME = "user.db";
//数据库版本
private static final int DB_VISION = 1;
// 自己建造本身的唯一单例模式对象
private static DBHelper mHelper = null;
//后面主要是使用SQLiteDatabase 和 SQLiteDatabase 来实现操作(增删改查等)
//数据库读实例
private SQLiteDatabase mRDB = null;
//数据库写实例
private SQLiteDatabase mWDB = null;
//调用父类构造方法(私有构造方法)
private DBHelper(Context context) {
// 数据库名 数据库版本
super(context, DB_NAME, null, DB_VISION);
}
// 利用单例模式获取数据库帮助器的唯一实例
public static DBHelper getInstance(Context context) {
if (mHelper == null) {
mHelper = new DBHelper(context);
}
return mHelper;
}
//获取读实例
public SQLiteDatabase getmWDB() {
return mWDB;
}
//获取写实例
public SQLiteDatabase getmRDB() {
return mRDB;
}
//创建打开数据库的读链接
public SQLiteDatabase openReadLink() {
//数据库实例为空或未打开时再建立连接
if (mRDB == null || !mRDB.isOpen()) {
mRDB = mHelper.getReadableDatabase();
}
return mRDB;
}
//创建打开数据库的写链接
public SQLiteDatabase openWriteLink() {
//数据库实例为空或未打开时再建立连接
if (mWDB == null || !mWDB.isOpen()) {
mWDB = mHelper.getWritableDatabase();
}
return mWDB;
}
//关闭数据库链接
public void closeLink() {
if (mRDB != null && mRDB.isOpen()) {
mRDB.close();
mRDB = null;
}
if (mWDB != null && mWDB.isOpen()) {
mWDB.close();
mWDB = null;
}
}
//创建数据库,执行建表语句
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
//这部分创建表格sql语句需要更具自己的数据库需求来写
String sql = "CREATE TABLE IF NOT EXISTS user_info " +
"(AccountId INTEGER PRIMARY KEY AUTOINCREMENT," +//账号编号
//...数据库结构省略
"temp3 VARCHAR NOT NULL," +//temp3
"temp4 VARCHAR NOT NULL );";//temp4
//执行sql语句
sqLiteDatabase.execSQL(sql);
}
//更新数据库
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
//后续补充的方法插入在这个下面
//...
}
下面是补充的方法,懒人可以改改直接使用:
查找方法:
检索在某一列中数值为field变量的一行(Cursor),封装成对象,加入Arraylist中返回
/**
* @param tableName 您需要查的表格
* @param field 按照Field列名来查表格
* @param fieldValue 该列名所需要比对的数值
* @return 返回一个查到符合料件的Object的list对象
*/
public List<Object> queryByField_List(String tableName, String field, String fieldValue) {
List<Object> list = new ArrayList<>();
//根据读实例,获取一个充满信息的Cursor对象,后续进行遍历,便可以获取数据库中内容
Cursor cursor = mRDB.query(tableName, null, field + "=?", new String[]{fieldValue}, null, null, null, null);
//对比数据名称,对应多种情况的数据库获取信息
if (tableName.equals("user_info")) {
//如果数据库名为user_info,则将cursor内容遍历出来,用user来装载,后续放入list中,作为返回值传递出去
//循环读取userInfo游标
while (cursor.moveToNext()) {
User user = new User();
//获取数据库第对应的列
user.setAccountId(cursor.getInt(0));
//...内容重复性过长,省略cursor1-18的获取部分
user.setTemp4(cursor.getString(19));
list.add(user);
}
return list;
}else if(tableName.split("_")[0].equals("user")){
//如果数据库名为user_xxx,则将cursor内容遍历出来,用user来装载,后续放入list中,作为返回值传递出去
//循环读取userInfo游标
while (cursor.moveToNext()) {
Friend friend = new Friend();
//获取数据库第对应的列
friend.setAccountId(cursor.getString(0));
//...内容重复性过长,省略cursor1-17的获取部分
friend.setTemp4(cursor.getString(18));
list.add(friend);
}
return list;
}else{
//如果你有更多的表,可以再后面添加
Log.d("error", "insertIntoTableByObject: DBHelper");
}
return null;
}
查找方法:
根据所需对比字段,查询对应一行,返回所需的结果,返回值类型为该列的类型
/**
* @param tableName 表名
* @param field 根据类别查询
* @param fieldValue 根据对应类别的值
* @param resultType 查找的对应的列名,即返回的属性
* @return 查找到的列名所对应的数值
*/
public String queryByField_single(String tableName, String field, String fieldValue, String resultType) {
List<User> list = new ArrayList<>();
//根据读实例获取cursor
Cursor cursor = mRDB.query(tableName, null, field + "=?", new String[]{fieldValue}, null, null, null, null);
//获取field变量对应的列索引
int indexFind = cursor.getColumnIndex(field);
//获取所需返回值(resultType)变量对应的列索引
int indexReturn = cursor.getColumnIndex(resultType);
String Result = "";
//循环读取对应表的游标
while (cursor.moveToNext()) {
if (cursor.getString(indexFind).equals(fieldValue)) {
Result = cursor.getString(indexReturn);
}
}
return Result;
}
查找方法:
查找对应数据库中所有对象,并且封装成Object,返回Arraylist对象
/**
* 查找表格中所有的对象
*
* @param tableName
* @return
*/
public List<Object> queryTable_All(String tableName) {
List<Object> list = new ArrayList<>();
//该部分其实和第一个查询,有很大的相似程度,只是更改读实例的检索条件↓
Cursor cursor = mRDB.query(tableName, null, null, null, null, null, null, null);
if (tableName.equals("user_info")) {
//循环读取userInfo游标
while (cursor.moveToNext()) {
User user = new User();
//获取数据库第对应的列
user.setAccountId(cursor.getInt(0));
//...内容重复性过长,省略cursor1-18的获取部分
user.setTemp4(cursor.getString(19));
list.add(user);
}
return list;
}else if(tableName.split("_")[0].equals("user")){
//循环读取userInfo游标
while (cursor.moveToNext()) {
Friend friend = new Friend();
//获取数据库第对应的列
friend.setAccountId(cursor.getString(0));
//...内容重复性过长,省略cursor1-17的获取部分
friend.setTemp4(cursor.getString(18));
list.add(friend);
}
return list;
}else{
//如果你还有别的表,请在后面添加
Log.d("error", "insertIntoTableByObject: DBHelper");
}
return null;
}
插入方法:
查找对应数据库中所有对象,并且封装成Object,返回Arraylist对象
public Long insertIntoTableByObject(String tableName, Object object) {
//创建一个新的ContentValues,用于存储键值对(存入数据库一一对应的数据)
ContentValues contentValues = new ContentValues();
if (tableName.equals("user_info")) {
User user = (User) object;
contentValues.put("WeChatId", user.getWeChatId());
//省略过多重复的contentValues添加方法,根据所需数据库自行添加
contentValues.put("Temp4", user.getTemp4());
}else if(tableName.split("_")[0].equals("user")){//查找以user
//Log.d("Code", "insertIntoTableByObject: 进入内部插入");
Friend friend = (Friend)object;
contentValues.put("AccountId",friend.getAccountId());
//省略过多重复的contentValues添加方法,根据所需数据库自行添加
contentValues.put("Temp4", friend.getTemp4());
}else{
Log.d("error", "insertIntoTableByObject: DBHelper");
}
//如果需要插入不同的表请在后面加使用else
long i = 0;
//TODO:事务处理
try {
//开始事务处理
mWDB.beginTransaction();
// 表名 之前存储的键值对
i = mWDB.insert(tableName, null, contentValues);
//如果上面那条语句执行成功则事务传递成功,如果上面的语句出错则不会执行这条语句
mWDB.setTransactionSuccessful();
} catch (Exception e) {
e.printStackTrace();
} finally {
//结束事务处理
mWDB.endTransaction();
}
return i;
}
删除方法:
通过按照某一列名去查找一条数据来实现删除功能,一般列名为主键
/**
* 通过按照某一列名去查找一条数据来实现删除功能,一般列名为主键
*
* @param tableName 删除的数据的表名
* @param field 查找数据的列名
* @param fieldValue 查找数据的值
* @return
*/
public Long deleteIntoTableByObject_Single(String tableName, String field, String fieldValue) {
long i = 0;
//TODO:事务处理
try {
//开始事务处理
mWDB.beginTransaction();
// 表名
i = mWDB.delete(tableName, "" + field + "=?", new String[]{fieldValue});
//如果上面那条语句执行成功则事务传递成功,如果上面的语句出错则不会执行这条语句
mWDB.setTransactionSuccessful();
} catch (Exception e) {
e.printStackTrace();
} finally {
//结束事务处理
mWDB.endTransaction();
}
return i;
}
修改方法:
通过按照某一列名去查找一条数据来实现删除功能,一般列名为主键
/**
* 根据查找到的对应列名的属性值,修改其这一列的结果
*
* @param tableName 修改的表格
* @param object 修改后的对象
* @param field 查找的列名
* @param fieldValue 对应的值
* @param updateField 更新的列
* @param updateFieldValue 更新的值
* @return
*/
public Long updateIntoTableByObject(String tableName, Object object, String field, String fieldValue, String updateField, String updateFieldValue) {
long i = 0;
ContentValues contentValues = new ContentValues();
if (tableName.equals("user_info")) {
User user = (User) object;
//获取值
contentValues.put("WeChatId", user.getWeChatId());
//省略过多重复的contentValues添加方法,根据所需数据库自行添加
contentValues.put("Temp4", user.getTemp4());
}else if(tableName.split("_")[0].equals("user")){//查找以user
//Log.d("Code", "insertIntoTableByObject: 进入内部插入");
Friend friend = (Friend)object;
contentValues.put("AccountId",friend.getAccountId());
//省略过多重复的contentValues添加方法,根据所需数据库自行添加
contentValues.put("Temp4", friend.getTemp4());
}else{
Log.d("error", "insertIntoTableByObject: DBHelper");
}
//如果是别的表,请往后添加
if(updateField !=null&& updateFieldValue !=null){
contentValues.put(updateField, updateFieldValue);
}
//
//事务处理
try {
//开始事务处理
mWDB.beginTransaction();
i = mWDB.update(tableName, contentValues, "" + field + "=?", new String[]{fieldValue});
mWDB.setTransactionSuccessful();
} catch (Exception e) {
e.printStackTrace();
} finally {
//结束事务处理
mWDB.endTransaction();
}
return i;
}
通过使用实例执行sql语句方法:
通过使用WDB实例对象执行sql语句方法
public void doSql(String sql) {
mWDB.execSQL(sql);
}
第一次写博客,文章有需要改进的地方,还希望大家可以发挥主观能动性自己修改下啦
今天分享就到这啦,觉得实用的别忘了收藏哇
标签:附可,SQLite,String,数据库,tableName,user,RDB,mWDB,null From: https://blog.csdn.net/rawmeat/article/details/144226209