Sqlite工具类

来源:互联网 发布:娱乐圈爆料知乎天涯 编辑:程序博客网 时间:2024/06/06 16:49
  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