zoukankan      html  css  js  c++  java
  • 条件数据库Android:sqllite使用

    改章节朋友在广东吃饭的时候突然想到的...这段时间就有想写几篇关于条件数据库的博客,所以回家到之后就奋笔疾书的写出来发布了

        SQLite分析

        SQLite是轻量级的、嵌入式的、关系型数据库,现在已经在iPhone、Android等手机系统中应用,SQLite可移植性好,很轻易应用,很小,高效而且牢靠。SQLite嵌入到应用它的应用程序中,它们共用雷同的进程空间,而不是单独的一个进程。从外部看,它并不像一个RDBMS,但在进程内部,它倒是完整的,自包括的数据库引擎。

        在android中当须要操作SQLite数据库的时候须要失掉一个SQLiteOpenHelper对象,而SQLiteOpenHelper是一个抽象类,用户须要继承这个类,并实现该类中的一些方法。

        

        1、继承SQLiteOpenHelper之后就拥有了以下两个方法:

        ◆getReadableDatabase() 创立或者打开一个查询数据库

        ◆getWritableDatabase()创立或者打开一个可写数据库

        ◆他们都市返回SQLiteDatabase对象,用户通过失掉的SQLiteDatabase对象进行后续操作

        2、同时用户还可以覆盖以下回调函数,再对数据库进行操作的时候回调以下方法:

        ◆onCreate(SQLiteDatabase):在数据库第一次创立的时候会调用这个方法,一般我们在这个方法里边创立数据库表。

        ◆onUpgrade(SQLiteDatabase,int,int):当数据库须要修改的时候,Android系统会主动的调用这个方法。一般我们在这个方法里边删除数据库表,并建立新的数据库表,当然是否还须要做其他的操作,完整取决于应用程序的需求。

        ◆onOpen(SQLiteDatabase):这是当打开数据库时的回调函数,一般也不会用到。

        须要注意

        1、在SQLiteOepnHelper的子类当中,必须有以下该构造函数

    public DatabaseHelper(Context context, String name, CursorFactory factory,  
       int version) {  
      //必须通过super调用父类当中的构造函数  
      super(context, name, factory, version);  
    }

        为了便利,也可以创立其它的构造函数,含二个参数或者三个参数的。

        2、函数public void onCreate(SQLiteDatabase db)是在调用getReadableDatabase()或者是getWritableDatabase()第一次创立数据库的时候执行,实际上是在第一次失掉SQLiteDatabse对象的时候,才会调用这个方法.

    public void onCreate(SQLiteDatabase db) {  
      System.out.println("create a Database");  
      //execSQL函数用于执行SQL语句  
      db.execSQL("create table user(id int,name varchar(20))");  
    }

        

        上面是写好的例子,可以参考下

        每日一道理
    喜马拉雅直冲霄汉,可上面有攀爬者的旗帜;撒哈拉沙漠一望无垠,可里面有跋涉者的脚印;阿尔卑斯山壁立千仞,可其中有探险者的身影;雅鲁藏布江湍急浩荡,可其中有勇敢者的故事。
    public class DBHelper {
    
        private static DatabaseHelper mDbHelper;
        private static SQLiteDatabase mDb;
    
        private static final String   DATABASE_NAME    = "life";
    
        private static final int      DATABASE_VERSION = 1;
    
        private Context               mCtx;
    
        private static class DatabaseHelper extends SQLiteOpenHelper {
    
            DatabaseHelper(Context context) {
                super(context, DATABASE_NAME, null, DATABASE_VERSION);
            }
    
            @Override
            public void onCreate(SQLiteDatabase db) {
                //创立表结构
                db.execSQL("CREATE TABLE life_history (id INTEGER PRIMARY KEY AUTOINCREMENT,type TEXT, city TEXT, company TEXT, pucNum TEXT, pucName TEXT);");
            }
    
            @Override
            public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            }
        }
    
        public DBHelper(Context ctx) throws SQLException {
            this.mCtx = ctx;
            mDbHelper = new DatabaseHelper(mCtx);
            mDb = mDbHelper.getWritableDatabase();
        }
    
        /**
         * 关闭数据源
         */
        public void closeConnection() {
            if (mDb != null && mDb.isOpen())
                mDb.close();
            if (mDbHelper != null)
                mDbHelper.close();
        }
    
        /**
         * 插入数据 参数
         * @param tableName 表名
         * @param initialValues 要插入的列对应值
         * @return
         */
        public long insert(String tableName, ContentValues initialValues) {
    
            return mDb.insert(tableName, null, initialValues);
        }
    
        /**
         * 删除数据
         * @param tableName 表名
         * @param deleteCondition 条件
         * @param deleteArgs 条件对应的值(如果deleteCondition中有“?”号,将用此数组中的值替换,一一对应)
         * @return
         */
        public boolean delete(String tableName, String deleteCondition, String[] deleteArgs) {
    
            return mDb.delete(tableName, deleteCondition, deleteArgs) > 0;
        }
    
        /**
         * 更新数据
         * @param tableName 表名
         * @param initialValues 要更新的列
         * @param selection 更新的条件
         * @param selectArgs 更新条件中的“?”对应的值
         * @return
         */
        public boolean update(String tableName, ContentValues initialValues, String selection, String[] selectArgs) {
            return mDb.update(tableName, initialValues, selection, selectArgs) > 0;
        }
    
        /**
         * 取得一个列表
         * @param distinct 是否去重复
         * @param tableName 表名
         * @param columns 要返回的列
         * @param selection 条件
         * @param selectionArgs 条件中“?”的参数值
         * @param groupBy 分组
         * @param having 分组过滤条件
         * @param orderBy 排序
         * @return
         */
        public Cursor findList(boolean distinct, String tableName, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit) {
    
            return mDb.query(distinct, tableName, columns, selection, selectionArgs, groupBy, having, orderBy, limit);
        }
    
        /**
         * 取得单行记录
         * @param tableName 表名
         * @param columns 获取的列数组
         * @param selection 条件
         * @param selectionArgs 条件中“?”对应的值
         * @param groupBy 分组
         * @param having 分组条件
         * @param orderBy 排序
         * @param limit 数据区间
         * @param distinct 是否去重复
         * @return
         * @throws SQLException
         */
        public Cursor findOne(boolean distinct, String tableName, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit) throws SQLException {
    
            Cursor mCursor = findList(distinct, tableName, columns, selection, selectionArgs, groupBy, having, orderBy, limit);
    
            if (mCursor != null) {
                mCursor.moveToFirst();
            }
            return mCursor;
    
        }
    
        /**
         * 执行SQL(带参数)
         * @param sql
         * @param args SQL中“?”参数值
         */
        public void execSQL(String sql, Object[] args) {
            mDb.execSQL(sql, args);
    
        }
    
        /**
         * 执行SQL
         * @param sql
         */
        public void execSQL(String sql) {
            mDb.execSQL(sql);
    
        }
    
        /**
         * 判断某张表是否存在
         * @param tabName 表名
         * @return
         */
        public boolean isTableExist(String tableName) {
            boolean result = false;
            if (tableName == null) {
                return false;
            }
    
            try {
                Cursor cursor = null;
                String sql = "select count(1) as c from sqlite_master where type ='table' and name ='" + tableName.trim() + "'";
                cursor = mDb.rawQuery(sql, null);
                if (cursor.moveToNext()) {
                    int count = cursor.getInt(0);
                    if (count > 0) {
                        result = true;
                    }
                }
    
                cursor.close();
            }
            catch (Exception e) {
            }
            return result;
        }
    
        /**
         * 判断某张表中是否存在某字段(注,该方法无法判断表是否存在,因此应与isTableExist一起应用)
         * @param tabName 表名
         * @param columnName 列名
         * @return
         */
        public boolean isColumnExist(String tableName, String columnName) {
            boolean result = false;
            if (tableName == null) {
                return false;
            }
    
            try {
                Cursor cursor = null;
                String sql = "select count(1) as c from sqlite_master where type ='table' and name ='" + tableName.trim() + "' and sql like '%" + columnName.trim() + "%'";
                cursor = mDb.rawQuery(sql, null);
                if (cursor.moveToNext()) {
                    int count = cursor.getInt(0);
                    if (count > 0) {
                        result = true;
                    }
                }
    
                cursor.close();
            }
            catch (Exception e) {
            }
            return result;
        }
    
    }

    文章结束给大家分享下程序员的一些笑话语录: Bphone之你们聊,我先走了!移动说:我在phone前加o,我叫o缝;苹果说:我在phone前i,我是i缝;微软说:我在phone前加w,我叫w缝;三星说:你们聊,我先走了!
    将来王建宙写回忆录的时候,一定要有一句“常小兵为中国移动的发展做出了不可磨灭的贡献”。

  • 相关阅读:
    题解 P1030 【求先序排列】
    行列式及其打开方式
    题解 P2580 【于是他错误的点名开始了】
    题解 P1130 【红牌】
    题解 P5239 【回忆京都】
    题解 P1184 【高手之在一起】
    【笔记】自学ST表笔记
    题解 P1208 【[USACO1.3]混合牛奶 Mixing Milk】
    树状数组自学笔记
    EBS R12.2系统logo的修改
  • 原文地址:https://www.cnblogs.com/xinyuyuanm/p/3078479.html
Copyright © 2011-2022 走看看