Android SQLite 一个工具类搞定基本的数据增删改查

本文介绍了一个Android SQLite工具类,用于轻松实现数据库的基本增删改查操作,帮助开发者高效管理应用程序的数据存储。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

           最近因为项目需要,不能使用第三方的数据库工具了,比如 ormlite。所以自己写了一个工具类,可以完成基本的增删改查的通用SQlite工具,很长时间没有怎么研究过SQLite,写的不好的地方,请见谅,使用有什么问题可以留言,我尽能力解决,有建议也很欢迎提出。另外其中会用到LogUtil.("","");方法,这个是自己封装的一个log类,也会在下面贴出来,很简单。

一、SQLite操作类:

package com.sp.util.db;


import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Date;
import java.util.Map;


import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;


import com.sp.util.commonutils.LogUtil;


/**
 * 数据库简易操作类,提供增删改查的方法,具体请查看注释 注意: 1、数据库各表的主键id字段为:_id;
 * 2、数据库各表各列字段名为initEDB时传入的对象的类的成员变量名
 * (仅支持成员变量的类型为int、long、float、double、boolean、string、date);
 * 3、需存入数据库的数据所属的类必须有对应的自动生成的get\set方法; 4、请调用本类公开的方法,或根据需求添加方法,请不要删除或修改既有方法或参数;
 * 5、调用:SQLiteEasyHelper.getInstance().initEDB(context,
 * classes);,必须先调用initEDB创建需要的数据库和表
 * ,然后可调用其它增删改查方法,调用方式相同:SQLiteEasyHelper.getInstance().~~~
 * 
 * @author songyuan
 * 
 */
public class SQLiteEasyHelper {
<span style="white-space:pre">	</span>/**
<span style="white-space:pre">	</span> * 数据库名称
<span style="white-space:pre">	</span> * 
<span style="white-space:pre">	</span> */
<span style="white-space:pre">	</span>private String dbName = "";
<span style="white-space:pre">	</span>/**
<span style="white-space:pre">	</span> * 数据库版本
<span style="white-space:pre">	</span> */
<span style="white-space:pre">	</span>private final static int DB_VERSION = 1;
<span style="white-space:pre">	</span>/**
<span style="white-space:pre">	</span> * 表主键id字段
<span style="white-space:pre">	</span> */
<span style="white-space:pre">	</span>private final static String RECORD_ID = "_id";
<span style="white-space:pre">	</span>/**
<span style="white-space:pre">	</span> * 数据库创建、更新工具对象
<span style="white-space:pre">	</span> */
<span style="white-space:pre">	</span>private static SQLiteOpenHelper sqLiteOpenHelper = null;
<span style="white-space:pre">	</span>/**
<span style="white-space:pre">	</span> * 数据库表数据实际操作对象(增删改查)
<span style="white-space:pre">	</span> */
<span style="white-space:pre">	</span>private static SQLiteDatabase sqDB = null;


<span style="white-space:pre">	</span>private static SQLiteEasyHelper sqLiteEasyHelper = null;


<span style="white-space:pre">	</span>private SQLiteEasyHelper() {
<span style="white-space:pre">	</span>}


<span style="white-space:pre">	</span>/**
<span style="white-space:pre">	</span> * 初始化该简单数据库操作类
<span style="white-space:pre">	</span> * 
<span style="white-space:pre">	</span> * @param context
<span style="white-space:pre">	</span> * @param cs
<span style="white-space:pre">	</span> * @return
<span style="white-space:pre">	</span> */
<span style="white-space:pre">	</span>public static SQLiteEasyHelper getInstance() {


<span style="white-space:pre">		</span>if (sqLiteEasyHelper == null) {
<span style="white-space:pre">			</span>sqLiteEasyHelper = new SQLiteEasyHelper();
<span style="white-space:pre">		</span>}
<span style="white-space:pre">		</span>openDB();
<span style="white-space:pre">		</span>return sqLiteEasyHelper;
<span style="white-space:pre">	</span>}


<span style="white-space:pre">	</span>/**
<span style="white-space:pre">	</span> * 实例化数据库创建、更新工具对象SQLiteOpenHelper,并预先创建各 表
<span style="white-space:pre">	</span> * 
<span style="white-space:pre">	</span> * @param context
<span style="white-space:pre">	</span> * @param dbName
<span style="white-space:pre">	</span> * @param cs
<span style="white-space:pre">	</span> *            class的集合,其中的每个class的成员变量的字段类型仅支持:int、long、float、double、boolean
<span style="white-space:pre">	</span> *            、string、date
<span style="white-space:pre">	</span> */
<span style="white-space:pre">	</span>public synchronized void initEDB(Context context, String dbName, final Class<?>[] cs) {
<span style="white-space:pre">		</span>if (sqLiteOpenHelper == null) {
<span style="white-space:pre">			</span>this.dbName = dbName;
<span style="white-space:pre">			</span>sqLiteOpenHelper = new SQLiteOpenHelper(context, dbName, null, DB_VERSION) {


<span style="white-space:pre">				</span>@Override
<span style="white-space:pre">				</span>public void onCreate(SQLiteDatabase db) {
<span style="white-space:pre">					</span>// 仅当该应用第一次执行 new SQLiteOpenHelper(...)时,执行onCreate
<span style="white-space:pre">					</span>// 统计需要创建的表的数据(表名、字段名、字段类型)
<span style="white-space:pre">					</span>ArrayList<String> tableNamesList = new ArrayList<String>();


<span style="white-space:pre">					</span>for (int i = 0; i < cs.length; i++) {
<span style="white-space:pre">						</span>Class<?> c = cs[i];
<span style="white-space:pre">						</span>String cName = subLastPointString(c.getName().toLowerCase());
<span style="white-space:pre">						</span>String tableName = "t_" + cName;
<span style="white-space:pre">						</span>tableNamesList.add(tableName);
<span style="white-space:pre">						</span>Field[] fs = c.getDeclaredFields();
<span style="white-space:pre">						</span>// sql语句
<span style="white-space:pre">						</span>String sql = "create table if not exists " + tableNamesList.get(i) + " (" + RECORD_ID + " integer primary key autoincrement, ";
<span style="white-space:pre">						</span>for (int j = 0; j < fs.length; j++) {
<span style="white-space:pre">							</span>Field f = fs[j];
<span style="white-space:pre">							</span>String fNameLower = subLastPointString(f.getName().toLowerCase());


<span style="white-space:pre">							</span>if (isSerialVersionUID(fNameLower)) {
<span style="white-space:pre">								</span>continue;
<span style="white-space:pre">							</span>}
<span style="white-space:pre">							</span>String fType = subLastPointString(f.getType().getName().toLowerCase());


<span style="white-space:pre">							</span>if (!isInvalidFeildType(fType)) {
<span style="white-space:pre">								</span>// sql语句
<span style="white-space:pre">								</span>sql = sql + fNameLower + " " + matchFeildType(fType) + ",";
<span style="white-space:pre">							</span>}
<span style="white-space:pre">						</span>}
<span style="white-space:pre">						</span>sql = sql.substring(0, sql.length() - 1) + ");";
<span style="white-space:pre">						</span>LogUtil.log("SQLiteEasyHelper onCreate create table", "[sql]" + sql);
<span style="white-space:pre">						</span>// 创建各表
<span style="white-space:pre">						</span>db.execSQL(sql);
<span style="white-space:pre">					</span>}


<span style="white-space:pre">				</span>}


<span style="white-space:pre">				</span>@Override
<span style="white-space:pre">				</span>public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {


<span style="white-space:pre">				</span>}


<span style="white-space:pre">			</span>};
<span style="white-space:pre">			</span>openDB();
<span style="white-space:pre">		</span>}
<span style="white-space:pre">	</span>}


<span style="white-space:pre">	</span>/**
<span style="white-space:pre">	</span> * 插入一条数据
<span style="white-space:pre">	</span> * 
<span style="white-space:pre">	</span> * @param obj
<span style="white-space:pre">	</span> *            该条数据的实例
<span style="white-space:pre">	</span> * @throws InvocationTarget
非常好用的SQLiteSpy 1.8.16 免费正式版(内附有一做好的DB,大家可以马上看下效果)。网上看到的,整理了下,共享给大家! 希望有用! SQLiteSpy是一个快速和紧凑的图形用户界面的SQLite数据库管理软件。它可以读取sqlite3文件并执行SQL。图形用户界面使得它很容易分析和操纵sqlite3的数据库。 注意:SQLiteSpy是免费供个人和教育用途,SQLiteSpy主要特点: 1、数据库一览:树状显示所有的架构,包括表,列,索引和触发器在数据库中包含的项目。按F5更新架构树,双击一个表或视图来显示它的数据,使用常用的命令的上下文菜单。 2、网格单元格编辑:表格单元格中编辑,显示一个表通过树状架构,选择一个单元格,然后按F2键调用编辑器。然后修改并确认您的更改写回到表里。 3、数据型显示:本机的SQL数据型显示不同的背景颜色来帮助检测型错误。型错误可能会导致性能下降或错误的SELECT结果集,防止NULL值与空字符串混淆。 4、完全的Unicode: SQLiteSpy具有完全支持SQLite的Unicode的能力。数据显示和输入是完全实现为Unicode,包括SQL命令。 5、多个SQL编辑:现代标签是用来编辑和显示的查询语句和结果比较容易多个SQL查询。 SQL查询执行输入或加载到SQL他们编辑。然后按F9键运行该查询,或Ctrl + F9来运行当前行或选择只。 6、时间测量: SQL执行的时间会自动测量和显示,以帮助优化查询。 7、正则表达式:在SQL关键字regexp是支持,并增加了完整的Perl的正则表达式语法5.10 SQLiteSpy。的实施,实现了利用DIRegEx库。 8、数学SQL函数:下面的SQL函数可用数学除了SQLite的默认:ACOS(), ASIN(), ATAN(), ATAN(), ATAN2(), CEIL(), CEILING(), COS(), COT(), DEGREES(), EXP(), FLOOR(), LN(), LOG(), LOG(), LOG2(), LOG10(), MOD(), PI(), POW(), RADIANS(), SIGN(), SIN(), SQRT(), TAN(), TRUNCATE(). 9、数据压缩:压缩的SQL函数()适用的zlib的紧缩到任何文本或BLOB值。 10、紧凑型结果储存:使用内部数据存储机制,以达到最佳的兼容SQLite的原生数据型。因此,SQLiteSpy使用远低于其它的SQLite管理内存和更有效地处理大量的表。 11、内建的SQLite引擎: SQLiteSpy已建成一个单一的应用程序文件与SQLite数据库引擎可执行文件。不需要部署任何DLL文件,这使得SQLiteSpy更易于部署。 12、加密支持: SQLiteSpy可以阅读和修改加密的数据库文件由DISQLite3产生。 DISQLite3实现了自己的母语AES加密。这为不符合商业SQLite的加密扩展(SSE)的或任何其他第三方的实施提供兼容。 13、易安装和卸载:要运行SQLiteSpy,只需解压SQLiteSpy.exe文件到任何目录和执行文件。不需要安装。刚开始时,该程序创建一个文件SQLiteSpy.db3(1 sqlite3的数据库)来存储的和设置。它不写任何其他文件或注册表。卸载一样只是简单的删除两个文件:应用程序的可执行文件和数据库文件。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值