Android数据库

首先来简单介绍下Android的数据库SQLite,是一个支持SQL的轻量级的嵌入式数据库
SQLiteDatabase:Android数据库中使用最多的一个类,通过它可以实现数据库的创建、打开,new一个新表,实现增删改查。每次用完之后要记得将数据库close掉。
SQLiteOpenHelper:是一个抽象类,通常定义一个类来继承它,实现onCreate,onUpdate,onOpen方法。
Cursor:游标的意思,可以在数据库操作中像游标箭头一样移动指向的对象。

下面以一个Person表为例(包含姓名、电话)实现数据库的增删改查。
1.先给出一些数据库操作的示例语句:
添加:insert into person (name,number) values ('zhangsan','110')
查询全部:select * from person
   查询具体条目:select * from person where name = 'zhangsan'
   修改条目:update person set number = '119' where name = 'zhangsan'
   删除一条记录;delete from person where name = 'zhangsan'
2.下面是Android示例代码,其中被注释掉的是需要我们自己来写数据库操作语句的实现方法,另一种方法是Android自带的API,其实就是在Android中将数据库操作的语句封装好了,直接提供方法来让我们使用,推荐大家使用第二种方法。

 private PersonSQLiteOpenHelper helper;
    //在构造方法里面完成helper的初始化
    public PersonDao2(Context context){
    helper = new PersonSQLiteOpenHelper(context);
    }
    
    /**
     * 添加一条记录到数据库
     * @param name 姓名
     * @param number 电话
     */
    public long add(String name,String number){
    SQLiteDatabase db = helper.getWritableDatabase();
//     db.execSQL("insert into person (name,number) valuse (?,?)", new Object[]{name,number});
    ContentValues values = new ContentValues();
    values.put("name", name);
    values.put("number", number);
    long id = db.insert("person", null, values);
    db.close();
return id;
    }
    
    /**
     * 查询记录是否存在
     * @param name 姓名
     * @return true 存在  false 不存在
     */
    public boolean find(String name){
    SQLiteDatabase db = helper.getReadableDatabase();
//     Cursor cursor = db.rawQuery("select * from person where name =?", new String[]{name});
    Cursor cursor = db.query("person", null, "name=?", new String[]{name}, null, null, null);
    boolean result = cursor.moveToNext();
    cursor.close();
    db.close();
    return result;
    }
    /**
     * 修改一条记录
     * @param name 要修改的人的姓名
     * @param newnumber 新的号码
     */
    public int update(String newname,String newnumber){
    SQLiteDatabase db = helper.getWritableDatabase();
    //db.execSQL("update person set number=? where name =?", new Object[]{newname,newnumber});
    ContentValues values  = new ContentValues();
    values.put("number", newnumber);
    int number = db.update("person", values, "name=?", new String[]{newnumber});
    db.close();
    return number;
    
    }
    /**
     * 删除一条记录
     * @param name
     */
    public int delete(String name){
    SQLiteDatabase db = helper.getWritableDatabase();
    //db.execSQL("delete from person where name =?", new Object[]{name});
    int number = db.delete("person", "name =?", new String[]{name});
    db.close();
    return number;
    }
    /**
     * 返回全部的数据库信息
     * @return
     */
    public List<Person> findAll(){
    SQLiteDatabase db = helper.getReadableDatabase();
    List<Person> persons = new ArrayList<Person>();
    //Cursor cursor = db.rawQuery("select name,id,number from person", null);
    Cursor cursor = db.query("person", new String[]{"name","id","number"}, null, null, null, null, null);
    while (cursor.moveToNext()) {
    int id = cursor.getInt(cursor.getColumnIndex("id"));
    String name = cursor.getString(cursor.getColumnIndex("name"));
    String number = cursor.getString(cursor.getColumnIndex("number"));
    Person p = new Person(id,name,number);
       persons.add(p);
      

}
    cursor.close();
    db.close();
    return persons;
}

那么问题来了,我们实现了上面的代码后,在data目录里生成好了文件那我们如何获取到呢?
有些时候dota目录的权限不够,我们无法打开,所以下面给大家分享一种通过命令行的方式来获取data/data里的数据文件
Android数据库创建后查询数据文件的cmd指令
    1.adb shell
    2.cd data/data/com.example.db/database/
    3.sqlite3 person.db
    4.写数据库执行语句


最后来和大家谈一下数据库的事务
那什么是事务呢?
举个简单的栗子:甲需要给乙汇款1000,这个过程要分两步,甲先将汇款打到汇款机里,得到数据后,然后数据再传输到乙的账户上,但是我们假设这样一种情况,甲打了钱后,这哥们运气特别好,刚好断电了,那乙就收不到钱了,但是事实上是不允许这样的事发生的,所以两件事必须的同时发生同时结束,这就是事务。下面简单给出事务过程代码
//开始数据库的事务
    db.beginTransaction();
    //标记数据库事务执行成功
    db.setTransactionSuccessful();
    //结束数据库的事务
    db.endTransaction();

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值