SQLite数据库存储

SQLite数据库存储


一.创建数据库

Android提供了一个**抽象类**SQLiteOpenHelper,借助这个类就可以进行数据库的创建和升级了。

首先建立MySQLiteOpenHelper类继承SQLiteOpenHelper,在onCreate()方法中创建建表的逻辑:


    public class MyDataBaseHelper extends SQLiteOpenHelper {

        static final String CREATE = "create table person (id integer primary key autoincrement,name text,age integer)";

        public MyDataBaseHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
            super(context, name, factory, version);
        }

        @Override
        public void onCreate(SQLiteDatabase db) {
            db.execSQL(CREATE);
        }

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

        }
    }

借助MySQLiteOperHelper中的getWriteableDatabase()/getReadableDatabase()方法得到数据库的实例:


    MyDataBaseHelper helper = new MyDataBaseHelper(this,"database",null,1);

    SQLiteDatabase writableDatabase = helper.getWritableDatabase();

此时在/data/data//databases/目录下即会生成一个数据库文件了。

二.添加数据

添加数据有两种方法,你可以通过sql语句进行添加操作,也可以借助Android提供的辅助方法。

1.使用sql语句进行数据添加

     writableDatabase.execSQL("insert into person (name,age) values (?,?)",new String[]{"link","55"});

2.使用insert()方法添加数据


        ContentValues values = new ContentValues();
        values.put("name","jack");
        values.put("age",4);

        writableDatabase.insert("person",null,values);

        values.clear();

三.更新数据

1.使用sql语句更新数据

    writableDatabase.execSQL("update person set age = ? where name = ?",new String[]{"33","jack"});

2.使用update()方法更新数据


        ContentValues values = new ContentValues();
        values.put("age",22);

        writableDatabase.update("person",values,"name = ?",new String[]{"jack"});
        values.clear();

四.删除数据

1.使用sql语句删除数据

writableDatabase.execSQL("delete from person where name = ?",new String[]{"jack"});

2.使用delete()方法删除数据

writableDatabase.delete("person","name = ?",new String[]{"sam"});

五.查询数据

Android提供了query()方法用于对数据的查询,其参数较多:

参数描述
table指定查询的表名
colums指定查询的类名
selection指定where的约束条件
selectionArgswhere中的占位符具体的值
groupBy指定需要group by的列
having对group by后的结果进一步约束
orderBy指定查询结果的排序方式

query()方法会返回一个Cursor对象,查询后的内容就包含在结果集内,对结果集进行相应操作即可取出相应的值。

例如现在有一张表

idnameage
1sam22
2jack33
3vincent13

现在我想查询vincent的age,那么首先使用query()方法,配置好参数:

Cursor cursor = writableDatabase.query("person", new String[]{"age"}, "name = ?", new String[]{"vincent"}, null, null, null);

在cursor中取出age的值,在取出之前先判断是否有name为vincent的行。


            if (cursor.moveToFirst()){

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

                Log.d(TAG,age + "");
        }

六.升级数据库

在MyDataBaseHelper类中还空着onUpgrade()方法,当数据库升级时,此方法就会被调用。

现在数据库中已经有了一张person表了,并且版本号为1,现在我要向数据库中添加一张book表,并保证person表中的数据不会丢失。


    public class MyDataBaseHelper extends SQLiteOpenHelper {

        static final String CREATE_PERSON = "create table person (id integer primary key autoincrement,name text,age integer)";

        static final String CREATE_BOOK = "create table book (id integer primary key autoincrement,name text,prince integer)";

        public MyDataBaseHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
            super(context, name, factory, version);
        }

    /***
     * 如果是第一次建立数据库,执行此方法;
     */
    /
        @Override
        public void onCreate(SQLiteDatabase db) { 
            db.execSQL(CREATE_PERSON);

            db.execSQL(CREATE_BOOK);
        }

        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            switch (oldVersion){
                case 1:
                    db.execSQL(CREATE_BOOK);        //如果旧版本号为1,就执行BOOK的建表语句;
                default:
            }
        }   
        }

那么什么时候会调用这个方法呢?再次构建一个MyDataBaseHelper类,只要最后一个参数(版本号)比之前大,那么就会调用onUpgrade()方法。

“`

MyDataBaseHelper helper_updata = new MyDataBaseHelper(this, "database", null, 2);

“`

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值