Android基础: 数据存储(二):数据库存储和获取数据

来源:互联网 发布:清华软件学院怎么样 编辑:程序博客网 时间:2024/06/10 00:21
1. 获取数据库帮助类:
    定义一个类继承抽象类SQLiteOpenHelper:定义带参数的构造方法,和重写抽象方法

public class PersonDataBaseHelper extends SQLiteOpenHelper {
 
     /**
      * 数据库的构造方法,用来定义数据库的名称,数据库查询的结果集,数据库的版本(不能小于1)
      */
     public PersonDataBaseHelper(Context context) {
               //创建一个person数据库
              super(context, "person.db", null, 1);
     }

 /**
  * 当数据库第一次被创建的时候,调用onCreate方法
  * @param db 被创建的数据库
  */
 @Override
 public void onCreate(SQLiteDatabase db) {
      //初始化数据库的表结构,创建一个表person,主键id自增长,name,number字段;
      db.execSQL("create table person id integer primary key autoincrement,name varchar(20),number varchar(20)");
 }

     @Override
     public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {
          //版本更新时调用的方法
     }

}

2.获取数据库
    创建数据库帮助类对象,获取可读或可写的数据库
PersonDataBaseHelper  helper=new PersonDataBaseHelper (this);//this:context
    //获取可写的数据库
      SQLiteDatabase database = helper.getWritableDatabase();
    //获取可读的数据库
      SQLiteDatabase database = helper.getReadableDatabase();

3.获取结果集
     Cursor cursor = db.rawQuery("select * from " + PERSONAL_TABLE_NAME, null);
    //null表示,从查询结果的第一列的上一列开始

4.操作结果集
   #1 boolean cursor.moveToNext() 
//能否移动到查询结果的下一步,可以的话返回true,没有下一行返回false
    
   #2 查询某个字段在结果集中的索引值
       int  cursor.getColumnIndex(PERSONAL_ID);
    
   #3 获取某个字段对应结果,其类型为String;
    String   cursor.getString(cursor.getColumnIndex(PERSONAL_ID));


一、安卓中数据库的简单使用:
    
    //获取自定义的数据数据库帮助类
    DbOpenHelper    dbHelper = DbOpenHelper.getInstance(context);
    //获取数据库    
    SQLiteDatabase db = dbHelper.getReadableDatabase();
    //定义存储信息的集合
     ArrayList<PersonalInformation> list=new ArrayList<PersonalInformation>();
  
if (db.isOpen()) {
            //获取结果集
           Cursor cursor = db.rawQuery("select * from " + PERSONAL_TABLE_NAME, null);
            //变量结果集,存储到集合中去
           while (cursor.moveToNext()) {
                String id = cursor.getString(cursor.getColumnIndex(PERSONAL_ID));
                String name = cursor.getString(cursor.getColumnIndex(PERSONAL_NAME));
                String phone = cursor.getString(cursor.getColumnIndex(PERSONAL_PHONE));
                String password = cursor.getString(cursor.getColumnIndex(PERSONAL_PASSWORD));
                String credit = cursor.getString(cursor.getColumnIndex(PERSONAL_CREDIT));
                String email = cursor.getString(cursor.getColumnIndex(PERSONAL_EMAIL));
   
                PersonalInformation pi = new PersonalInformation();
                if(id!=null)pi.setPersonalId(id);
                if(name!=null)pi.setPersonalName(name);
                if(phone!=null)pi.setPersonalPhone(phone);
                if(password!=null)pi.setPersonalPassword(password);
                if(credit!=null)pi.setPersonalCredit(credit);
                if(email!=null)pi.setPersonalEmail(email);
                list.add(pi);
       }
       cursor.close();
  }

二、数据库的事物:为了保证某一段sql语句的同时执行,引入了事物的概念
格式:
db.beginTransaction();
try{
        ....
        //标记数据库事物执行成功
        db.setTransactionSuccessful();
}catch(Exception e){

}finally{
    db.endTransation();
    db.close();
}
    
Demo:
    PersonSQLiteOpenHelper helper=new PersonSQLiteOpenHelper(getContext());
    SQLiteDatabase db=helper.getWritableDatabase();
    //开启数据库的事物
     db.beginTransaction();
    try{
            db.execSQL("update person set account=account-1000 where name=?",
            new Object[]{"zhangsan"});
            
            db.execSQL("updata person set account=account+1000 where name=?",
           new Object[]("wangwu") );
            db.setTransactionSuccessful();     
    }catch(Exception e){
    }
    finally{
            db.endTransaction();
            db.close();
    }

三、在cmd中查询及操作数据库:
    #1   adb shell 
    #2  cd data/data/包名/databases/ 进入到数据库所在的目录下
    #3  sqlite3 person.db(表名)
    #4 执行sql语句;select * from person;




            
     








0 0
原创粉丝点击