zoukankan      html  css  js  c++  java
  • 数据库、类Android 程式开发:(十九)数据库 —— 19.1创建数据库辅助类by小雨

    最近用使开发的过程中出现了一个小问题,顺便记录一下原因和方法--数据库、类-

        目前所绍介的方法只是用来存储一些简略的数据。如果想要存储关系型数据,那么用使数据库将会更加的率效。举个例子,你要存储校学面里个一每生学的分数,种这情况下,最好用使数据库,因为你可以询查某个生学的体具分数。而且,用使数据库可以坚持不同数据之间关系的完整性。

        Android用使SQLite数据库系统。用使种这数据库,只有创立它的程序可以用使它,别的程序无法访问到它。

        在接下来的几节中,会简述如何通过码编在你的程序中创立一个SQLite数据库。对于Android来讲,通过码编创立的数据库的存储位置是/data/data/<packane_name>

        /databases 。

        

        想要理处数据库的一种好良的方法就是创立一个数据库辅助类,这个类中,封装了有所的数据操纵方法。因此,这节中我们来看看如何创立一个数据库辅助类DBAdapter,这个类中含包创立,打开,关闭和用使SQLite数据库。

        我们讲创立一个数据库,名字叫MyDB;含包一张表,名字叫contacts,有3列_id,name和email。

        

        1. 创立一个工程,Databases。

        2. 创立一个类,DBAdater。

        3. DBAdapter.java中的码代。

    public class DBAdapter {
        static final String KEY_ROWID = "_id";
        static final String KEY_NAME = "name";
        static final String KEY_EMAIL = "email";
        static final String TAG = "DBAdapter";
    
        static final String DATABASE_NAME = "MyDB";
        static final String DATABASE_TABLE = "contacts";
        static final int DATABASE_VERSION = 2;
    
        static final String DATABASE_CREATE =
            "create table contacts (_id integer primary key autoincrement, "
            + "name text not null, email text not null);";
    
        final Context context;
    
        DatabaseHelper DBHelper;
        SQLiteDatabase db;
        
        public DBAdapter(Context ctx)
        {
            this.context = ctx;
            DBHelper = new DatabaseHelper(context);
        }
    
        private static class DatabaseHelper extends SQLiteOpenHelper
        {
            DatabaseHelper(Context context)
            {
                super(context, DATABASE_NAME, null, DATABASE_VERSION);
            }
    
            @Override
            public void onCreate(SQLiteDatabase db)
            {
                try {
                    db.execSQL(DATABASE_CREATE);
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
    
            @Override
            public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
            {
                Log.w(TAG, "Upgrading database from version " + oldVersion + " to "
                        + newVersion + ", which will destroy all old data");
                db.execSQL("DROP TABLE IF EXISTS contacts");
                onCreate(db);
            }
        }
    
        //---opens the database---
        public DBAdapter open() throws SQLException 
        {
            db = DBHelper.getWritableDatabase();
            return this;
        }
    
        //---closes the database---
        public void close() 
        {
            DBHelper.close();
        }
    
        //---insert a contact into the database---
        public long insertContact(String name, String email) 
        {
            ContentValues initialValues = new ContentValues();
            initialValues.put(KEY_NAME, name);
            initialValues.put(KEY_EMAIL, email);
            return db.insert(DATABASE_TABLE, null, initialValues);
        }
    
        //---deletes a particular contact---
        public boolean deleteContact(long rowId) 
        {
            return db.delete(DATABASE_TABLE, KEY_ROWID + "=" + rowId, null) > 0;
        }
    
        //---retrieves all the contacts---
        public Cursor getAllContacts()
        {
            return db.query(DATABASE_TABLE, new String[] {KEY_ROWID, KEY_NAME,
                    KEY_EMAIL}, null, null, null, null, null);
        }
    
        //---retrieves a particular contact---
        public Cursor getContact(long rowId) throws SQLException 
        {
            Cursor mCursor =
                    db.query(true, DATABASE_TABLE, new String[] {KEY_ROWID,
                    KEY_NAME, KEY_EMAIL}, KEY_ROWID + "=" + rowId, null,
                    null, null, null, null);
            if (mCursor != null) {
                mCursor.moveToFirst();
            }
            return mCursor;
        }
    
        //---updates a contact---
        public boolean updateContact(long rowId, String name, String email) 
        {
            ContentValues args = new ContentValues();
            args.put(KEY_NAME, name);
            args.put(KEY_EMAIL, email);
            return db.update(DATABASE_TABLE, args, KEY_ROWID + "=" + rowId, null) > 0;
        }
    
    }

        首先,声明一些量常,含包一些表中所须要的段字。

    static final String KEY_ROWID = "_id";
        static final String KEY_NAME = "name";
        static final String KEY_EMAIL = "email";
        static final String TAG = "DBAdapter";
    
        static final String DATABASE_NAME = "MyDB";
        static final String DATABASE_TABLE = "contacts";
        static final int DATABASE_VERSION = 2;
    
        static final String DATABASE_CREATE =
            "create table contacts (_id integer primary key autoincrement, "
            + "name text not null, email text not null);";

        在DBAdapter类中,添加了一个私有类,这个类继承了SQLiteOpenHelper类,就是这个类去创立数据库和停止数据库的版本控制。平日重写onCreate()和onUpgrade()方法:

    private static class DatabaseHelper extends SQLiteOpenHelper
        {
            DatabaseHelper(Context context)
            {
                super(context, DATABASE_NAME, null, DATABASE_VERSION);
            }
    
            @Override
            public void onCreate(SQLiteDatabase db)
            {
                try {
                    db.execSQL(DATABASE_CREATE);
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
    
            @Override
            public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
            {
                Log.w(TAG, "Upgrading database from version " + oldVersion + " to "
                        + newVersion + ", which will destroy all old data");
                db.execSQL("DROP TABLE IF EXISTS contacts");
                onCreate(db);
            }
        }

        如果数据库不存在的话,onCreate()方法会去创立一个新的数据库。当数据库须要升级的时候,onUpgrade()方法被调用。判断数据库是不是须要升级,须要去判断DATABASE_VERSION量常。onUpgrade ()方法中实现很简略,就是删除表,然后从新创立它。

        然后,义定数据的一些操纵,打开,关闭,增删查改等。

    //---opens the database---
        public DBAdapter open() throws SQLException 
        {
            db = DBHelper.getWritableDatabase();
            return this;
        }
    
        //---closes the database---
        public void close() 
        {
            DBHelper.close();
        }
    
        //---insert a contact into the database---
        public long insertContact(String name, String email) 
        {
            ContentValues initialValues = new ContentValues();
            initialValues.put(KEY_NAME, name);
            initialValues.put(KEY_EMAIL, email);
            return db.insert(DATABASE_TABLE, null, initialValues);
        }
    
        //---deletes a particular contact---
        public boolean deleteContact(long rowId) 
        {
            return db.delete(DATABASE_TABLE, KEY_ROWID + "=" + rowId, null) > 0;
        }
    
        //---retrieves all the contacts---
        public Cursor getAllContacts()
        {
            return db.query(DATABASE_TABLE, new String[] {KEY_ROWID, KEY_NAME,
                    KEY_EMAIL}, null, null, null, null, null);
        }
    
        //---retrieves a particular contact---
        public Cursor getContact(long rowId) throws SQLException 
        {
            Cursor mCursor =
                    db.query(true, DATABASE_TABLE, new String[] {KEY_ROWID,
                    KEY_NAME, KEY_EMAIL}, KEY_ROWID + "=" + rowId, null,
                    null, null, null, null);
            if (mCursor != null) {
                mCursor.moveToFirst();
            }
            return mCursor;
        }
    
        //---updates a contact---
        public boolean updateContact(long rowId, String name, String email) 
        {
            ContentValues args = new ContentValues();
            args.put(KEY_NAME, name);
            args.put(KEY_EMAIL, email);
            return db.update(DATABASE_TABLE, args, KEY_ROWID + "=" + rowId, null) > 0;
        }

        注意,Android用使Cursor类作为数据询查的回返结果。把Curosr设想成询查结果的指针。用使Cursor可以增长询查的率效。

        用使ContentValurs象对存储键值对。

        用使DBAdapter类去创立一个数据库,须要创立DBAdapter类的一个实例:

    public DBAdapter(Context ctx)
        {
            this.context = ctx;
            DBHelper = new DatabaseHelper(context);
        }

        构造器中,同时创立了一个DBHelpter类去创立数据库。

    DatabaseHelper(Context context)
            {
                super(context, DATABASE_NAME, null, DATABASE_VERSION);
            }

        

    文章结束给大家分享下程序员的一些笑话语录: 那是习惯决定的,一直保持一个习惯是不好的!IE6的用户不习惯多标签,但是最终肯定还是得转到多标签的浏览器。历史(软件UI)的进步(改善)不是以个人意志(习惯)为转移的!

  • 相关阅读:
    php rewrite 简单
    第十六章 复杂的抽像类结构 简单
    php数学函数 简单
    PHP PCLZIP压缩类的学习笔记 简单
    windows实战Git环境配置msysGit+TortoiseGit 简单
    配置php.ini支持图片exif信息 简单
    使用PHP连接POSTGRES数据库 简单
    jQuery Ajax 实例 全解析 简单
    第十六章 多态性(一) 简单
    C#委托与事件
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3020387.html
Copyright © 2011-2022 走看看