android操作自带的SQlite数据库

创建DBOpenHelper类

DBOpenHelper.java(一定要继承SQLiteOpenHelper )

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class DBOpenHelper extends SQLiteOpenHelper {

    public DBOpenHelper(Context context) {
        /*
         * 数据库文件默认创建在 <包>/databases/
         * name要生成数据库名称
         * factory游标工厂用null使用系统默认的游标工厂
         * version数据库文件的版本号,不能为0
         * */
        super(context, "mydb.db", null, 1);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        // TODO 数据库第一次被创建的时候调用
        db.execSQL("CREATE TABLE person (id INTEGER PRIMARY KEY autoincrement, name VARCHAR(20))");//创建person表
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // TODO 数据库文件的版本号发生变更的时候调用
        db.execSQL("ALTER TABLE person ADD phone VARCHAR(12) NULL");//往表中增加一列
    }

}

创建数据库

DBOpenHelper dbOpenHelper = new DBOpenHelper(getContext());
dbOpenHelper.getWritableDatabase();//第一次调用时会创建数据库

保存

        DBOpenHelper dbOpenHelper = new DBOpenHelper(getContext());
        SQLiteDatabase db = dbOpenHelper.getWritableDatabase();//对同一个dbOpenHelper实例有缓存
        Person person = new Person();
        person.setName("user");

        //方法一
        List<Object> para = new ArrayList<Object>();
        para.add(person.getName());
        db.execSQL("insert into person(name) values(?)", para.toArray());

        //方法二
        ContentValues contentValues = new ContentValues();
        contentValues.put("name", person.getName());
        /*第一个参数:表名
         * 第二个参数:null空值字段,当contentValues为null时用到,可以传null或表中字段("id")
         * 第三个参数:要保存的值
         * */
        db.insert("person", null, contentValues);

        db.close();

删除

        DBOpenHelper dbOpenHelper = new DBOpenHelper(getContext());
        SQLiteDatabase db = dbOpenHelper.getWritableDatabase();

        //方法一
        List<Object> para = new ArrayList<Object>();
        para.add(1);
        db.execSQL("delete from person where id=?", para.toArray());

        //方法二
        db.delete("person", "id=?", new String[]{"1"});//表名,条件,占位符的值

        db.close();

事物

修改

        DBOpenHelper dbOpenHelper = new DBOpenHelper(getContext());
        Person person = new Person();
        person.setId(5);
        person.setName("yyyyy");
        SQLiteDatabase db = dbOpenHelper.getWritableDatabase();

        //方法一
        List<Object> para = new ArrayList<Object>();
        para.add(person.getName());
        para.add(person.getId());
        db.execSQL("update person set name=? where id=?", para.toArray());

        //方法二
        ContentValues values = new ContentValues();
        values.put("name", person.getName());
        db.update("person", values, "id=?", new String[]{person.getId().toString()});//表名,更新的值,条件,条件中占位符的值

        db.close();

查找

根据id查找

        DBOpenHelper dbOpenHelper = new DBOpenHelper(getContext());
        Person person = null;
        SQLiteDatabase db = dbOpenHelper.getReadableDatabase();
        Long id=1l;
        //方法一
        Cursor cursor = db.rawQuery("select * from person where id=?", new String[]{id+""});

        //方法二
        /*
         * 第一个参数:表名
         * 第二个参数:要查找的字段名(如:new String[]{"id","name"}),如果传null将查全部
         * 第三个参数:条件
         * 第四个参数:条件中的值
         * 第五个参数:查询语句中的groupBy没有传null
         * 第六个参数:查询语句中的having没有传null
         * 第七个参数:查询语句中的orderBy没有传null
         * */
        Cursor cursor = db.query("person", null, "id=?", new String[]{id+""}, null, null, null);

        if(cursor.moveToFirst()){
            String name = cursor.getString(cursor.getColumnIndex("name"));
            person = new Person(id,name);
        }
        db.close();
        Log.i(TAG, person.toString());

分页查找

        DBOpenHelper dbOpenHelper = new DBOpenHelper(getContext());
        List<Person> list = new ArrayList<Person>();
        Person person = null;
        int offser = 0;
        int maxResult = 5;
        SQLiteDatabase db = dbOpenHelper.getReadableDatabase();

        //方法一
        Cursor cursor = db.rawQuery("select * from person order by id asc limit ?,?", new String[]{offser+"",maxResult+""});

        //方法二
        /*
         * 第一个参数:表名
         * 第二个参数:要查找的字段名(如:new String[]{"id","name"}),如果传null将查全部
         * 第三个参数:条件
         * 第四个参数:条件中的值
         * 第五个参数:查询语句中的groupBy没有传null
         * 第六个参数:查询语句中的having没有传null
         * 第七个参数:查询语句中的orderBy没有传null
         * 第八个参数:limit
         * */
        cursor = db.query("person", null, null, null, null, null, "id asc", offser+","+maxResult);

        while(cursor.moveToNext()){
            person = new Person(cursor.getInt(cursor.getColumnIndex("id")), cursor.getString(cursor.getColumnIndex("name")));
            list.add(person);
        }
        db.close();
        for(Person p : list){
            Log.i(TAG, p.toString());
        }

获取数据记录数

        DBOpenHelper dbOpenHelper = new DBOpenHelper(getContext());
        SQLiteDatabase db = dbOpenHelper.getReadableDatabase();

        //方法一
        Cursor cursor = db.rawQuery("select COUNT(id) from person",new String[]{});

        //方法二
        cursor = db.query("person", new String[]{"COUNT(id)"}, null, null, null, null, null);

        if(cursor.moveToFirst()){
            return cursor.getLong(0);
        }

事务

    PersonService personService = new PersonService(getContext());
    Person person = new Person();
    person.setId(5);
    person.setName("yyyyy");
    SQLiteDatabase db = dbOpenHelper.getWritableDatabase();

    List<Object> para = new ArrayList<Object>();
    para.add(person.getName());
    para.add(person.getId());
    db.beginTransaction();//开启事务
    try {
        db.execSQL("update person set name=? where id=?", para.toArray());
        db.setTransactionSuccessful();//设置事务的标志为True
    } finally{
        /*
         * 结束事务,有两种情况:commit,rollback
         * 事务的提交或回滚是由事务的标志决定的,如果事务的标志为True事务就提交,否则回滚
         * 默认情况下事务的标志为false
         * */
        db.endTransaction();
    }
    db.close();

附件

Person.java

public class Person {
    private Integer id;
    private String name;

    public Person() {
        super();
    }

    public Person(Integer id, String name) {
        super();
        this.id = id;
        this.name = name;
    }

    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "Person [id=" + id + ", name=" + name + "]";
    }

}
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值