`
sunlightcs
  • 浏览: 75142 次
  • 性别: Icon_minigender_2
  • 来自: 杭州
社区版块
存档分类
最新评论

Android黑群出品:SQLite数据库的使用和升级

阅读更多

SQLite数据库的基本使用及对返回结果进行简单的封装,可直接返回Object或List类型,省去自动转换成Object或List的麻烦。 主要代码如下: [code="java"] package com.juziku.demo.sqlite;   import java.lang.reflect.Field; import java.util.ArrayList; import java.util.List;     import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.SQLException; import android.database.sqlite.SQLiteDatabase; import android.util.Log;     /**  * 基础DAO,每个DAO都要继承此类  *  * @author steven  *  * http://www.juziku.com/sunlightcs/  *  */ public class BaseDao {       private Context mContext;     private SQLiteDatabase db;       public Context getmContext() {         return mContext;     }       public BaseDao(Context context) {         this.mContext = context;         DBHelper dbHelper = new DBHelper(mContext, Configuration.DB_NAME,                 null, Configuration.DB_VERSION);         db = dbHelper.getWritableDatabase();     }       /**      * 增加、删除、修改表时,调用此方法      * @param sql  DDL语句      * @throws SQLException      */     public void execute(String sql){         db.execSQL(sql);     }       /**      * 删除表中的记录      * @param table   表名      * @param whereClause 删除条件   如:( id>? and time>?)      * @param whereArgs   条件里的参数    用来替换"?"    第1个参数,代表第1个问号;第2个参数,代表第2个问号;依此类推......      * @return  返回删除的条数      */     public int delete(String table, String whereClause, String[] whereArgs) {         return db.delete(table, whereClause, whereArgs);     }           /**      * 插入数据      * @param table 表名      * @param values    ContentValues对象      * @return          返回当前行ID值,如果失败返回-1      */     public long insert(String table,    ContentValues values){         return this.insert(table, null, values);     }                   /**      * 插入数据      * @param table 表名      * @param values    ContentValues对象      * @param nullColumnHack   空列      * @return          返回当前行ID值,如果失败返回-1      */     public long insert(String table, String nullColumnHack,             ContentValues values) throws SQLException {         return db.insertOrThrow(table, nullColumnHack, values);     }       /**      * 修改数据      * @param table         表名      * @param values        ContentValues对象          表示要修改的列,如: name="steven" 即 values.put("name", "steven");      * @param whereClause   修改条件   如:( id=?)      * @param whereArgs     条件里的参数    用来替换"?"    第1个参数,代表第1个问号;第2个参数,代表第2个问号;依此类推......      * @return              返回修改的条数      */     public int update(String table, ContentValues values,             String whereClause, String[] whereArgs) {         return db.update(table, values, whereClause, whereArgs);     }               /**      * 查询数据      * @param table             表名      * @param columns           要查询的列名      * @param selection         查询条件    如:( id=?)      * @param selectionArgs     条件里的参数,用来替换"?"      * @return                  返回Cursor      */     public Cursor query(String table, String[] columns, String selection,             String[] selectionArgs) {         return db.query(table, columns, selection, selectionArgs, null, null,                 null);     }                 /**      * 查询数据      * @param table             表名      * @param columns           要查询的列名      * @param selection         查询条件    如:( id=?)      * @param selectionArgs     条件里的参数,用来替换"?"      * @param orderBy           排序              如:id desc      * @return                  返回Cursor      */     public Cursor query(String table, String[] columns, String selection,             String[] selectionArgs, String orderBy) {         return db.query(table, columns, selection, selectionArgs, null, null,                 orderBy);     }           /**      * 查询数据      * @param distinct          每行是唯一     true:表示唯一       false:表示不唯一      * @param table             表名      * @param columns           要查询的列名      * @param selection         查询条件    如:( id=?)      * @param selectionArgs     条件里的参数,用来替换"?"      * @param orderBy           排序              如:id desc      * @param limit             查询的条数              如:10      * @return                  返回Cursor      */     public Cursor query(boolean distinct, String table, String[] columns, String selection,             String[] selectionArgs, String orderBy, String limit){         return db.query(distinct, table, columns, selection, selectionArgs, null, null, orderBy, limit);     }                             /**      * 查询某个字段       * @param classz            字节码      如:String.class      * @param table             表名      * @param columns           要查询的列名      * @param selection         查询条件    如:( id=?)      * @param selectionArgs     条件里的参数,用来替换"?"      * @return                  返回Object      */     public Object queryField(Class> classz, String table, String[] columns, String selection,             String[] selectionArgs){         Object o = null;         //查询单条记录         Cursor c = db.query(table, columns, selection, selectionArgs, null, null, null, "1");         if(c.moveToFirst()){             try {                 if(classz == Integer.TYPE) {   //int                     o = c.getInt(0);                 }else if(classz == String.class){   //String                     o = c.getString(0);                 }else if(classz == Long.TYPE){   //long                     o = c.getLong(0);                 }else if(classz == Float.TYPE){   //float                     o = c.getFloat(0);                 }else if(classz == Double.TYPE){   //double                     o = c.getDouble(0);                 }else if(classz == Short.TYPE){   //short                     o = c.getShort(0);                 }             } catch (Exception e) {                 Log.e("queryField", e.toString());             }         }         c.close();         return o;     }                 /**      * 查询数据    单个对象      * @param classz            字节码      如:String.class      * @param table             表名      * @param columns           要查询的列名      * @param selection         查询条件    如:( id=?)      * @param selectionArgs     条件里的参数,用来替换"?"      * @return                  返回Object      */     @SuppressWarnings("unchecked")     public T queryObject(Class> classz, String table, String[] columns, String selection,             String[] selectionArgs){                   //查询单条记录         Cursor c = db.query(table, columns, selection, selectionArgs, null, null, null, "1");         T t = null;         if(c.moveToFirst()){             try{                 //生成新的实例                 t = (T) classz.newInstance();                                   //把列的值,转换成对象里属性的值                 columnToField(t, c);                               }catch(Exception e){                 Log.e("newInstance error", "生成新实例时出错 :" + e.toString());             }         }         c.close();         return t;     }                 /**      * 查询数据    带分页功能      * @param classz            字节码      如:String.class      * @param table             表名      * @param columns           要查询的列名      * @param selection         查询条件    如:( id=?)      * @param selectionArgs     条件里的参数,用来替换"?"      * @param orderBy           排序              如:id desc      * @param pageNo            页码              不分页时,为null      * @param pageSize          每页的个数        不分页时,为null      * @return                  返回List      */     @SuppressWarnings("unchecked")     public List queryList(Class> classz, String table, String[] columns, String selection,             String[] selectionArgs, String orderBy, Integer pageNo, Integer pageSize){                   //分页         if(!(pageNo == null || pageSize ==null)){             //分页的起始位置             int begin = (pageNo -1)*pageSize;             orderBy = orderBy + " limit " + begin + ", " + pageSize;         }                             //查询数据         Cursor c = db.query(table, columns, selection, selectionArgs, null, null, orderBy);                   List list = new ArrayList();         T t = null;         while (c.moveToNext()) {             try{                 //生成新的实例                 t = (T) classz.newInstance();             }catch(Exception e){                 Log.e("newInstance error", "生成新实例时出错 :" + e.toString());             }                           //把列的值,转换成对象里属性的值             columnToField(t, c);                           list.add(t);         }         c.close();                   return list;     }                 /**      * 把列的值,转换成对象里属性的值      */     private void columnToField(T t, Cursor c){         //获取T里的所有属性         Field[] f = t.getClass().getDeclaredFields();         for (int i = 0; i   classz = f[i].getType();             //设置成可访问,否则不能set值             f[i].setAccessible(true);                           try {                 if(classz == Integer.TYPE) {   //int                     f[i].set(t, c.getInt(columnIndex));                 }else if(classz == String.class){   //String                     f[i].set(t, c.getString(columnIndex));                 }else if(classz == Long.TYPE){   //long                     f[i].set(t, c.getLong(columnIndex));                 }else if(classz == byte[].class){   //byte                     f[i].set(t, c.getBlob(columnIndex));                 }else if(classz == Float.TYPE){   //float                     f[i].set(t, c.getFloat(columnIndex));                 }else if(classz == Double.TYPE){   //double                     f[i].set(t, c.getDouble(columnIndex));                 }else if(classz == Short.TYPE){   //short                     f[i].set(t, c.getShort(columnIndex));                 }             } catch (Exception e) {                 Log.e("column to field error", "字段转换成对象时出错 :" + e.toString());             }         }     }         /**      * 开始事务      */     protected void beginTransaction() {         db.beginTransaction();     }       /**      * 提交事务及结束事务      */     protected void commit() {         db.setTransactionSuccessful();         db.endTransaction();     }       /**      * 回滚事务      */     protected void rollback() {         db.endTransaction();     }       /**      * 关闭连接      */     public void close() {         if (db != null && db.isOpen())             db.close();     } }  数据库创建、升级 [code="java"] package com.juziku.demo.sqlite;   import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader;   import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteDatabase.CursorFactory; import android.database.sqlite.SQLiteOpenHelper; import android.util.Log;   public class DBHelper extends SQLiteOpenHelper {       private Context mContext;       public DBHelper(Context context, String databaseName,             CursorFactory factory, int version) {         super(context, databaseName, factory, version);         mContext = context;     }       /**      * 数据库第一次创建时调用      * */     @Override     public void onCreate(SQLiteDatabase db) {         executeSchema(db, "schema.sql");     }       /**      * 数据库升级时调用      * */     @Override     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {         //数据库不升级         if (newVersion

人人编程


http://www.renren.io/sql/

 

分享到:
评论

相关推荐

    本地数据库导出Excel

    1. 查询数据库:使用SQL语句从SQLite数据库中获取需要导出的数据。 2. 创建Excel文件:可以使用第三方库,如Apache POI,来创建和操作Excel文件。在Android环境中,可能需要通过JAR文件或者AAR依赖来引入这些库。 3....

    高焕堂出的android资料

    5. **数据存储**:SQLite数据库、SharedPreferences、ContentProvider等数据存储方式的使用,对于应用的数据持久化至关重要。资料会详细介绍如何操作这些存储机制。 6. **网络编程**:包括HTTP请求库的使用,如...

    Android应用源码之WordPress for Android.zip

    数据缓存通常采用SQLite数据库,源码会包含ContentProvider的使用,以及SQLiteOpenHelper的继承和数据库升级策略。 7. **事件总线** 为了组件间的通信,可能会使用EventBus或RxBus等事件总线框架,实现解耦合的...

    传智播客_Andorid_Android基础视频video_第四天修

    6. **数据存储**:Android提供了多种数据存储方式,包括SharedPreferences、SQLite数据库、文件系统和ContentProvider等。理解这些存储方式的特点和适用场景很重要。 7. **Intent过滤器**:在AndroidManifest.xml中...

    Android应用源码小米系列之小米便签.rar

    3. **数据存储**:Android提供了多种数据存储方式,如SQLite数据库、SharedPreferences、文件存储等。小米便签可能使用SQLite来保存用户的笔记内容,同时利用SharedPreferences存储用户的偏好设置。 4. **Android...

    Android高级应用源码-客户端与服务端的json交互的小例子.zip

    Android提供了SQLite数据库,SharedPreferences或者文件存储等方式实现数据持久化。 10. MVP或MVVM架构: 高级Android应用通常采用MVP(Model-View-Presenter)或MVVM(Model-View-ViewModel)架构,使得代码结构...

    传智播客_Andorid_20天精通Android开发视频_第19天视频_视频

    在Android开发中,通常在前18天的学习中,开发者会学习到基础概念,如Android Studio的使用、布局设计(如XML布局)、活动(Activity)管理、Intent的传递、数据存储(SharedPreference、SQLite数据库)、通知系统、...

    android常用的Libs库 精集

    - Room:Room是Google推荐的SQLite数据库访问层,提供了类型安全的查询和易于使用的API,使数据库操作更加直观。 - Realm:Realm是一个替代SQLite的数据库,提供更快的速度和更灵活的数据模型,特别适合处理大量...

    传智播客_Andorid_Android基础视频video_第五天修

    5. **数据存储**:Android提供了多种数据存储方式,如SharedPreferences用于轻量级数据存储,SQLite数据库适合结构化数据,而File API则用于文件操作。 6. **Intent机制**:Intent是Android中启动组件和服务的主要...

    安卓调试神器 Stetho Facebook出品 的使用

    2. **查看数据库**:在"Database Inspector"中,你可以看到应用中所有的SQLite数据库,并能进行查询操作。这对于调试数据库相关的逻辑非常实用。 3. **查看文件系统**:"File Explorer"让你可以直接浏览手机上应用...

    传智播客_Andorid_Android基础视频video_第十天修

    4. **数据存储**:Android提供了多种数据存储方式,包括SharedPreferences、SQLite数据库和文件存储。这部分可能会讲解如何在应用中保存和读取数据。 5. **BroadcastReceiver**:广播接收器允许应用监听系统或...

    良心出品《移动终端程序设计》期末模拟试卷.doc

    在《移动终端程序设计》期末模拟试卷中,涵盖了...《移动终端程序设计》期末模拟试卷涵盖了Android开发中的多个知识点,包括Android项目结构、Activity生命周期、广播、ContentProvider、SQLite数据库、适配器等。

    android 移动互联网应用案例休闲生活app 项目文档

    例如,为了实现高效的数据加载,可能采用MVP或MVVM架构模式,数据库选择SQLite或Room,网络请求可能使用Retrofit或OkHttp,同时配合使用Glide或Picasso处理图片加载。详细设计文档是开发者编码的蓝图,指导着开发...

    黑马程序员安卓 笔记代码(包含源码) 第76期

    6. **数据存储**:探讨SQLite数据库的应用,Shared Preferences的简单数据存储,以及文件操作。 7. **多线程**:学习如何在Android中使用Handler、Looper、Runnable和Thread来处理耗时任务。 8. **网络编程**:...

    天嵌科技出品--Qt程序开发完全手册之24小时超级版本

    9. **数据库访问**:通过QSqlDatabase和QSqlQuery等类,连接和操作关系型数据库,如MySQL、SQLite等。 10. **国际化与本地化**:了解如何使用Qt的QTranslator和QLocale类实现软件的多语言支持。 11. **Qt Quick...

    匹配图标颜色的多彩选项卡切换演示(Yalantis 出品).zip

    5. **评论发布功能**:涉及到用户输入、数据存储和展示,可能用到了SQLite数据库和网络请求来处理评论的提交和获取。 6. **开源社区实践**:开源项目的运作方式,包括代码托管(如GitHub)、版本控制(Git)、问题...

    高级软件人才培训专家-day06-MySQL

    - **SQLite**:嵌入式微型数据库,常见于移动应用,例如作为Android平台的内置数据库。 - **MariaDB**:开源免费的中小型数据库,是MySQL的一个分支。 - **MySQL**:开源免费的中小型数据库,被Sun公司收购后,又被...

    Mvvm: ViewModel+LiveData+DataBinding+Retrofit+Room总结与实践demo

    Room是Android Jetpack的一部分,提供了在Android上操作SQLite数据库的高级抽象层。Room提供了类型安全的API,简化了数据库操作,并能自动生成SQL语句。它可以与`LiveData`结合使用,实现数据库数据的实时更新。 **...

    Delphi_XE10移动开发框架

    4. **跨平台API接入**:Delphi_XE10允许开发者直接调用目标操作系统的原生API,这使得开发者能够充分利用每个平台的独特功能,如iOS的Core Data或Android的SQLite数据库。 5. **LiveBindings**:这是一种强大的数据...

Global site tag (gtag.js) - Google Analytics