Sqlite工具类

本文介绍了一个用于Android应用的SQLite数据库操作类,该类提供了基本的数据库操作功能,如增删改查等,并实现了单例模式确保全局唯一实例。

AI 时代程序员必备技能

Codex、Claude Code、Cursor、Hermes Agent、OpenClaw等工程化实战专栏 ,讲透 AI 如何接管脏活累活

  1. package com.asc.db;  
  2.   
  3. import android.content.ContentValues;  
  4. import android.content.Context;  
  5. import android.database.Cursor;  
  6. import android.database.sqlite.SQLiteDatabase;  
  7. import android.database.sqlite.SQLiteOpenHelper;  
  8.   
  9. /** 
  10.  * 数据库公共类,提供基本数据库操作 
  11.  *  
  12.  * @author raymon 
  13.  *  
  14.  */  
  15. public class DBManager {  
  16.     // 默认数据库  
  17.     private static final String DB_NAME = "asc.db";  
  18.   
  19.     // 数据库版本  
  20.     private static final int DB_VERSION = 1;  
  21.   
  22.     // 执行open()打开数据库时,保存返回的数据库对象  
  23.     private SQLiteDatabase mSQLiteDatabase = null;  
  24.   
  25.     // 由SQLiteOpenHelper继承过来  
  26.     private DatabaseHelper mDatabaseHelper = null;  
  27.   
  28.     // 本地Context对象  
  29.     private Context mContext = null;  
  30.       
  31.     private static DBManager dbConn= null;  
  32.       
  33.     // 查询游标对象  
  34.     private Cursor cursor;  
  35.   
  36.     /** 
  37.      * SQLiteOpenHelper内部类 
  38.      */  
  39.     private static class DatabaseHelper extends SQLiteOpenHelper {  
  40.   
  41.         DatabaseHelper(Context context) {  
  42.             // 当调用getWritableDatabase()或 getReadableDatabase()方法时,创建一个数据库  
  43.             super(context, DB_NAME, null, DB_VERSION);  
  44.         }  
  45.   
  46.         @Override  
  47.         public void onCreate(SQLiteDatabase db) {  
  48.             db.execSQL("CREATE TABLE ad_record(id PRIMARY KEY NOT NULL, adUrl TEXT, apMac TEXT, createDate DATETIME);");  
  49.         }  
  50.   
  51.         @Override  
  52.         public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {  
  53.             db.execSQL("DROP TABLE IF EXISTS ad_record");  
  54.             onCreate(db);  
  55.         }  
  56.     }  
  57.   
  58.     /** 
  59.      * 构造函数 
  60.      *  
  61.      * @param mContext 
  62.      */  
  63.     private DBManager(Context mContext) {  
  64.         super();  
  65.         this.mContext = mContext;  
  66.     }  
  67.       
  68.     public static DBManager getInstance(Context mContext){  
  69.         if (null == dbConn) {  
  70.             dbConn = new DBManager(mContext);  
  71.         }  
  72.         return dbConn;  
  73.     }  
  74.   
  75.     /** 
  76.      * 打开数据库 
  77.      */  
  78.     public void open() {  
  79.         mDatabaseHelper = new DatabaseHelper(mContext);  
  80.         mSQLiteDatabase = mDatabaseHelper.getWritableDatabase();  
  81.     }  
  82.   
  83.     /** 
  84.      * 关闭数据库 
  85.      */  
  86.     public void close() {  
  87.         if (null != mDatabaseHelper) {  
  88.             mDatabaseHelper.close();  
  89.         }  
  90.         if (null != cursor) {  
  91.             cursor.close();  
  92.         }  
  93.     }  
  94.   
  95.     /** 
  96.      * 插入数据 
  97.      * @param tableName 表名 
  98.      * @param nullColumn null 
  99.      * @param contentValues 名值对 
  100.      * @return 新插入数据的ID,错误返回-1 
  101.      * @throws Exception 
  102.      */  
  103.     public long insert(String tableName, String nullColumn,  
  104.             ContentValues contentValues) throws Exception {  
  105.         try {  
  106.             return mSQLiteDatabase.insert(tableName, nullColumn, contentValues);  
  107.         } catch (Exception e) {  
  108.             throw e;  
  109.         }  
  110.     }  
  111.   
  112.     /** 
  113.      * 通过主键ID删除数据 
  114.      * @param tableName 表名 
  115.      * @param key 主键名 
  116.      * @param id 主键值 
  117.      * @return 受影响的记录数 
  118.      * @throws Exception 
  119.      */  
  120.     public long delete(String tableName, String key, int id) throws Exception {  
  121.         try {  
  122.             return mSQLiteDatabase.delete(tableName, key + " = " + id, null);  
  123.         } catch (Exception e) {  
  124.             throw e;  
  125.         }  
  126.     }  
  127.       
  128.     /** 
  129.      * 查找表的所有数据 
  130.      * @param tableName 表名 
  131.      * @param columns 如果返回所有列,则填null 
  132.      * @return 
  133.      * @throws Exception 
  134.      */  
  135.     public Cursor findAll(String tableName, String [] columns) throws Exception{  
  136.         try {  
  137.             cursor = mSQLiteDatabase.query(tableName, columns, nullnullnullnullnull);  
  138.             cursor.moveToFirst();  
  139.             return cursor;  
  140.         } catch (Exception e) {  
  141.             throw e;  
  142.         }  
  143.     }  
  144.       
  145.     /** 
  146.      * 根据主键查找数据 
  147.      * @param tableName 表名 
  148.      * @param key 主键名 
  149.      * @param id  主键值 
  150.      * @param columns 如果返回所有列,则填null 
  151.      * @return Cursor游标 
  152.      * @throws Exception  
  153.      */  
  154.     public Cursor findById(String tableName, String key, int id, String [] columns) throws Exception {  
  155.         try {  
  156.             return mSQLiteDatabase.query(tableName, columns, key + " = " + id, nullnullnullnull);  
  157.         } catch (Exception e) {  
  158.             throw e;  
  159.         }  
  160.     }  
  161.       
  162.     /** 
  163.      * 根据条件查询数据 
  164.      * @param tableName 表名 
  165.      * @param names 查询条件 
  166.      * @param values 查询条件值 
  167.      * @param columns 如果返回所有列,则填null 
  168.      * @param orderColumn 排序的列 
  169.      * @param limit 限制返回数 
  170.      * @return Cursor游标 
  171.      * @throws Exception 
  172.      */  
  173.     public Cursor find(String tableName, String [] names, String [] values, String [] columns, String orderColumn, String limit) throws Exception{  
  174.         try {  
  175.             StringBuffer selection = new StringBuffer();  
  176.             for (int i = 0; i < names.length; i++) {  
  177.                 selection.append(names[i]);  
  178.                 selection.append(" = ?");  
  179.                 if (i != names.length - 1) {  
  180.                     selection.append(",");  
  181.                 }  
  182.             }  
  183.             cursor = mSQLiteDatabase.query(true, tableName, columns, selection.toString(), values, nullnull, orderColumn, limit);  
  184.             cursor.moveToFirst();  
  185.             return cursor;  
  186.         } catch (Exception e) {  
  187.             throw e;  
  188.         }  
  189.     }  
  190.       
  191.     /** 
  192.      *  
  193.      * @param tableName 表名 
  194.      * @param names 查询条件 
  195.      * @param values 查询条件值 
  196.      * @param args 更新列-值对 
  197.      * @return true或false 
  198.      * @throws Exception 
  199.      */  
  200.     public boolean udpate(String tableName, String [] names, String [] values, ContentValues args) throws Exception{  
  201.         try {  
  202.             StringBuffer selection = new StringBuffer();  
  203.             for (int i = 0; i < names.length; i++) {  
  204.                 selection.append(names[i]);  
  205.                 selection.append(" = ?");  
  206.                 if (i != names.length - 1) {  
  207.                     selection.append(",");  
  208.                 }  
  209.             }  
  210.             return mSQLiteDatabase.update(tableName, args, selection.toString(), values) > 0;  
  211.         } catch (Exception e) {  
  212.             throw e;  
  213.         }  
  214.     }  
  215.       
  216.     /** 
  217.      * 执行sql语句,包括创建表、删除、插入 
  218.      *  
  219.      * @param sql 
  220.      */  
  221.     public void executeSql(String sql) {  
  222.         mSQLiteDatabase.execSQL(sql);  
  223.     }  
  224.   
  225. } //原文: http://forhope.iteye.com/blog/1461412

AI 时代程序员必备技能

Codex、Claude Code、Cursor、Hermes Agent、OpenClaw等工程化实战专栏 ,讲透 AI 如何接管脏活累活

非常好用的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的数据库)来存储的和设置。它不写任何其他文件或注册表。卸载一样只是简单的删除两个文件:应用程序的可执行文件和数据库文件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值