SQLite的基本使用

SQLite的基本使用方法:

1.Android 提供了SQLiteOpenHelper类来对数据库进行创建和升级,所以写个子类继承他吧

    SQLiteOpenHelper中有2个抽象方法,分别是onCreate和onUpgrade方法,我们必须在自己的帮助类里面重写这两个方法,

    然后分别在这两个方法中实现创建,升级数据库的逻辑。SQLiteOpenHelper中还有2个非常重要的实例方法,

    getReadableDatabase()和getWritableDatabase()方法。这两个方法都可以创建或打开一个现有的数据库

    (如果数据库已经存在则直接打开,否则创建一个新的数据库),并返回一个可对数据库进行读写操作的对象。

    不同的是当数据库不可写入的时候(如磁盘空间已满)getReadableDatabase()方法返回的对象将以只读的方式去打开数据库,而getWritableDatabase()方法方法将出现异常。

2.创建一个数据库

   2.1.在android 数据库的创建中integer表示整形,real表示浮点型,text表示文本类型,blob表示二进制类型。下面开始创建一张数据表

   在SQLiteOpenHelper 的子类MySQLiteHelper中

   public static final String BOOK_TABLE="create table book ("

            + "id integer primary key autoincrement,"

            + "author text, "

            + "price real, "

            + "pages integer, "

            + "name text)";

        然后在onCreate(SQLiteDatabase db){

        db.execSQL(BOOK_TABLE);

        }

    2.2.Activity 中

    //获得数据库操作类对象,

    /*通过构造函数的参数

                 * 将数据库名指定为BookStore.db,版本号为1,然后在create database按钮的点击

                 * 事件里调用了getWritableDatabase()方法,这样当第一次点击create database按钮时

                 * 就会检测当前程序并没有BookStore.db这个数据库,于是会创建该数据库并调用MyDatabaseHelper

                 * 中的onCreate()方法,这样Book表也就得到了创建,然后会弹出一个Toast提示创建成功。再次点击

                 * create database按钮时,会发现此时已经存在BookStore.db数据库了,因此不会再创建一次了。

         */

        dbHelper=new MyDatabaseHelper(this, "BookStore.db",

                null, 1);

    dbHelper.getWritableDatabase();

3.数据库的增删改查操作:SQLiteOpenHelper的getReadableDatabase()或getWritableDatabase()方法还都会返回一个SQLiteDatabase对象

db = sqliteHelper.getWritableDatabase();

    3.1插入一条数据:

    ContentValues values=new ContentValues();           

            values.put("name", "android第一行代码");

            values.put("author", "jack");

            values.put("pages", 500);

            values.put("price", 18.98);

            //values.put("category_id", 1111);

            db.insert("book", null, values);//插入第一条数据

    3.2删除一条数据:

     //删除pages 等于500 的数据

    db.delete("book", "pages=?", new String[]{"500"});

    3.3修改数据库数据:

    ContentValues values=new ContentValues();

        values.put("price", 1500);

        db.update("book", values, "name=?",

                new String[]{"android第一行代码"});

    3.4查询数据库:

    Cursor cursor = db.query("book", null, null, null, null, null, null);        

        /*

         * 调用moveToFirst()方法将数据的指针移动到第一行的位置,然后进入一个循环当中,去遍历查询到

         * 的每一行数据。在这个循环中可以通过Cursor的getColumnIndex()方法取到某一列在表中对应的位置索引,

         * 然后将这个索引传入到相应的取值方法当中,接可以得到从数据库中查询到的数据了。接着使用Log的方式将

         * 取出来的数据打印出来,借此来检查一下读取工作有没有成功完成。最后别忘了调用close()方法来关闭Cursor。

         * */

        if(cursor.moveToFirst()){

            do{

                //遍历Cursor对象,取出数据并打印

                String name=cursor.getString(cursor.getColumnIndex("name"));

                String author=cursor.getString(cursor.getColumnIndex("author"));

                int pages=cursor.getInt(cursor.getColumnIndex("pages"));

                double price=cursor.getDouble(cursor.getColumnIndex("price"));

                //打印数据

                Log.e("MainActivity", "book name is "+name);                                 

            }while(cursor.moveToNext());

        }

        cursor.close();

4.数据库的升级在onUpgrade()判断版本号进行操作

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

        // TODO Auto-generated method stub

        switch (oldVersion) {

        case 1:

            db.execSQL(CATEGORY_TABLE);

        case 2:

            Log.e("SQLiteHelper","onUpgrade!!!!! ");

            db.execSQL("alter table book add column category_id integer");

            //db.execSQL("alter table book add column category_qqqqq integer");

        default:

            break;

}

    }

查看SQLiteOpenHelper这个类,可以看到,在数据库的初始化中通过用户传递的参数

sqliteHelper = new MySQLiteHelper(this, "book.db", null, 2); 获取到最新的版本号,并与之前的版本号比较,默认为0 版本号为0那么久执行第一次创建数据库的操作,这是部分源码

final int version = db.getVersion();
            if (version != mNewVersion) {
                if (db.isReadOnly()) {
                    throw new SQLiteException("Can't upgrade read-only database from version " +
                            db.getVersion() + " to " + mNewVersion + ": " + mName);
                }

                db.beginTransaction();
                try {
                    if (version == 0) {
                        onCreate(db);
                    } else {
                        if (version > mNewVersion) {
                            onDowngrade(db, version, mNewVersion);
                        } else {
                            onUpgrade(db, version, mNewVersion);
                        }
                    }
                    db.setVersion(mNewVersion);
                    db.setTransactionSuccessful();
                } finally {
                    db.endTransaction();
                }
            }

版本号不一致时,执行升级或者降级数据库版本。
switch中每个case的最后都是没有使用break的,这是为了保证在跨数据库版本升级的时候,每次的数据库修改都能被全部执行到。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值