• 【Android】SqLitOpenHelper操作数据库


    做android中一个最常用的就是数据库的操作了,我们在android提供的SqLitOpenHelper上稍稍加工,就可以很方便的对数据进行操作。

    public class DatabaseHelper extends SQLiteOpenHelper {
     
        public static final String COLUMN_ID = "_id";
        
        
        private String tableName;
        private Map<String, String> tableContent;
        
        DatabaseHelper(Context context, String name, CursorFactory cursorFactory,
                int version) {
            super(context, name, cursorFactory, version);
            this.tableName = null;
            this.tableContent = new HashMap<String, String>();
        }
     
        public void setTableAttr(String tableName, Map<String, String> tableContent)
        {
            this.tableName = tableName;
            this.tableContent = tableContent;
        }
        
        
        @Override
        public void onCreate(SQLiteDatabase db) {
            // TODO Auto-generated method stub
            if( this.tableName == null ||
                    this.tableContent.size() == 0)
            {
                return;
            }
            
            String sql = "create table if not exists ";
            sql += this.tableName;
            sql +="(";
            sql += COLUMN_ID;
            sql += " integer primary key,";
            
            
            Set set = tableContent.entrySet();
            Iterator iterator = set.iterator();
            int index = 0;
            while (iterator.hasNext()) {
                index++;
                Map.Entry mapEntry = (Map.Entry) iterator.next();
                if (mapEntry.getValue() != null) {                
                    sql += (String) mapEntry.getKey();
                    sql += " ";
                    sql += (String) mapEntry.getValue();
                    
                    if( index < this.tableContent.size())
                    {
                        sql += ",";
                    }
                    
                }
            }
            
            sql += ")";
            
            db.execSQL( sql );
        }
     
        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            // TODO Auto-generated method stub
            this.onCreate(db);
        }
     
    }

    下来我们写一个数据库表的基类:

     
     
    public abstract class Table {
    //    public static int _DATA_CACHE_VERSION_ = 1;
     
        private static final String DB_NAME = "XXXXXX.db";
     
        protected String tableName;
     
        private final Context mContext;
     
        protected CursorFactory mFactory;
     
        protected Map<String, String> tableContent;
     
        private SQLiteDatabase mDataBase;
     
        protected DatabaseHelper dbHelper;
        
        protected String mColumnIdInMedia;
     
        private boolean mIsInit;
        
        protected int _DATA_CACHE_VERSION_ = 0;
     
        public Table(Context ctx) {
            this.mContext = ctx;
            this.tableContent = new HashMap<String, String>();
            mIsInit = false;
            this.mFactory = null;
            mColumnIdInMedia = null;
            this.getClass().getSimpleName().toLowerCase();
        }
     
        protected abstract void _init();
        public void init() {
            if (mIsInit) {
                return;
            }
     
            _init();
            
            dbHelper = new DatabaseHelper(mContext, DB_NAME, mFactory,
                    _DATA_CACHE_VERSION_);
     
            this.setTableAttr();
     
            dbHelper.setTableAttr(tableName, tableContent);
            mDataBase = dbHelper.getWritableDatabase();    
            
            
     
            mIsInit = true;
        }
     
        protected abstract void setTableAttr();
     
        public boolean insert(ContentValues values) {
     
            if (mDataBase == null) {
                return false;
            }
     
            mDataBase.insert(this.tableName, null, values);
     
            return true;
        }
     
        public boolean delete(String whereClause) {
     
            if (mDataBase == null) {
                return false;
            }
     
            mDataBase.delete(this.tableName, whereClause, null);
            return true;
        }
     
        public boolean update(ContentValues values, String whereClause) {
            if (mDataBase == null) {
                return false;
            }
     
            mDataBase.update(this.tableName, values, whereClause, null);
            return true;
        }
     
        private Cursor query(String columnName, int id) {
            if (mDataBase == null) {
                return null;
            }
     
            if( mColumnIdInMedia == null ||
                    mColumnIdInMedia.equalsIgnoreCase(""))
            {
                mColumnIdInMedia = DatabaseHelper.COLUMN_ID;
            }
            
            Cursor cursor = mDataBase.query(this.tableName, new String[] {columnName, mColumnIdInMedia}, null, null, null,
                    null, "_id asc");
            
            int _idIndex = cursor.getColumnIndex(mColumnIdInMedia);
            
            if(_idIndex != -1)
            {
                for (cursor.moveToFirst(); !(cursor.isAfterLast()); cursor.moveToNext()) {
                    if( id == cursor.getInt(_idIndex))
                    {
                        return cursor;
                    }
                }    
            }            
     
            cursor.close();
            return null;
            
        }
        
        public String queryString(String columnName, int id)
        {
            Cursor cursor = query( columnName, id);    
            
            String value = null;
            
            if(cursor != null)
            {
                value = cursor.getString(0);
                cursor.close();
            }
            
            return value;
        }
        
        public int queryInteger(String columnName, int id)
        {
            Cursor cursor = query( columnName, id);    
            
            int value = -1;
            
            if(cursor != null)
            {
                value = cursor.getInt(0);
                cursor.close();
            }
            
            return value;
        }
        
        public double queryDouble(String columnName, int id)
        {
            Cursor cursor = query( columnName, id);    
            
            double value = -1;
            
            if(cursor != null)
            {
                value = cursor.getDouble(0);
                cursor.close();
            }
            
            return value;
        }
     
        public void Release() {
     
            if( this.mDataBase != null )
            {
                this.mDataBase.close();
                this.mDataBase = null;
            }
            
            this.mIsInit = false;
        }
     
    }

    下来写具体的表了:

    public class ImageTable extends Table {
        public static final int DATA_CACHE_VERSION_ = 1;
        
        public static final String COLUMN_WIDTH = "width";
     
        public static final String COLUMN_HEIGHT = "height";
     
        public static final String COLUMN_LASTTIME = "lasttime";
     
        public static final String COLUMN_DATA = "_data";
        
        public static final String COLUMN_ID_IMAGE = "_id_image";
     
        public ImageCache(Context ctx) {
            super(ctx);
            // TODO Auto-generated constructor stub
        }
     
        @Override
        protected void setTableAttr() {
            // TODO Auto-generated method stub
            this.mColumnIdInMedia = COLUMN_ID_IMAGE;
     
            this.tableContent.clear();
     
            this.tableContent.put(COLUMN_ID_IMAGE, "integer");
            this.tableContent.put(COLUMN_WIDTH, "integer");
            this.tableContent.put(COLUMN_HEIGHT, "integer");
            this.tableContent.put(COLUMN_LASTTIME, "integer");
            this.tableContent.put(COLUMN_DATA, "varchar");
        }
     
        @Override
        protected void _init() {
            // TODO Auto-generated method stub
            _DATA_CACHE_VERSION_ = DATA_CACHE_VERSION_;
        }
    }

    到这里所有的工作都准备好了,下来看看怎么用这些个东西来操作数据库:

    1、新增一条记录:

    Table imagTable = new ImageTable(ctx);
    imageTable.init();
     
    ContentValues values = new ContentValues();
        values.put(ImageTable.COLUMN_DATA,
                "/mnt/sdcard/image/xxx.jpg");
        values.put(ImageTable.COLUMN_HEIGHT,
                300);
        values.put(ImageTable.COLUMN_WIDTH, 400);
        values.put(ImageTable.COLUMN_LASTTIME,
                123123123123);
    imageTale.insert(values);
     
    imageTale.Release();

    2、删除记录:

    Table imagTable = new ImageTable(ctx);
    imageTable.init();
     
    imageTale.delete(ImageTable.COLUMN_LASTTIME + "=45554837");
    imageTale.delete(DatabaseHelper.COLUMN_ID + "=3");
     
    imageTale.Release();
     
     

    3、更新一条记录:

    Table imagTable = new ImageTable(ctx);
    imageTable.init();
     
    ContentValues values = new ContentValues();
        values.put(ImageTable.COLUMN_DATA,
                "/mnt/sdcard/image/xxx.jpg");
        values.put(ImageTable.COLUMN_HEIGHT,
                300);
        values.put(ImageTable.COLUMN_WIDTH, 400);
        values.put(ImageTable.COLUMN_LASTTIME,
                123123123123);
                
    imageCache.update(values, DatabaseHelper.COLUMN_ID + "=3");
     
    imageTale.Release();

    4、当然还有一个很重要的就是查询:

    Table imagTable = new ImageTable(ctx);
    imageTable.init();
     
    int width = imagTable.queryInteger(ImageTable.COLUMN_WIDTH, 1);
                            
    String str = imagTable.queryString(ImageTable.COLUMN_DATA, 1);
    imageTale.Release();

    基本的功能都全了,日常再用都再接着完善了,使用还算方便吧, 多张表也是这样使用,我用每个类的名字转为小写做为表的名称。

  • 相关阅读:
    加州大学Santa Barbara量化课程
    专利分析与申请(2):SILK 专利的特点
    两种可分级语音编码器的量化器
    芬兰赫尔辛基工业大学DirAC工程:Directional audio coding
    SILK 的 Delay Decision 和 Dither
    Fraunhofer 研究院
    ICASSP 论文发表相关问题
    SILK 学习总结之位分配与低码率编码
    今天测试VOIP软件结果
    国内部分音频语音相关研究企业(实时更新)
  • 原文地址:https://www.cnblogs.com/GnagWang/p/1966082.html
Copyright © 2020-2023  润新知