android sqlite 数据库使用 详解

上次写了份不透彻的view层次的分析,总结自己的表述能力还是不行,这次讲解一个实际应用吧,按照步骤来就ok。哈哈~~~

Android中存数据的方法有很多,自己写文件啊,保存在data下什么的都是可以的。以以往的经验来看,自己如果要写一个查询啊,插入什么的就比较麻烦,所以借助数据库是个很好的选择。

注:这里的sdk版本是apilevel11到apilevel16。如果使用模拟器要使用高版本的哦。

如网上的教程一样,我们先写一个DBhelper的类,用来创建数据库test.db和一个名为person的数据表。这个类需要继承自android.database.sqlite.SQLiteOpenHelper(我给出完成的包名是提示你可以去看看相关的文档,不要只成功运行数据库就满足哦)。

下面附上代码,word处理代码真不好搞。。。。。。

 

public classDBhelper extends SQLiteOpenHelper {

 

   //这里指定数据库的名称test.db

   private static finalString DATABASE_NAME="test.db";

  

   //这里指定数据库的版本,这两项都只相当于宏定义,不是指定了就完事了。

   private static final int DATABASE_VERSION=1;

  

   //构造函数,把context传给父类,让父类去解决吧,有继承关系就是如此happy

   publicDBhelper(Context context){

      //DATABASE_NAME数据库名字  DATABASE_VERSION数据库版本 

      //null是指的游标(就是像excel中鼠标指向的表格),传null吧。

      //如果需要一些游标的功能,要自己看看sqlite权威说明还是叫什么来着的文档。

      super(context,DATABASE_NAME,null,DATABASE_VERSION);

   }

  

   @Override

   //重写onCreate方法。必写!

   public voidonCreate(SQLiteDatabase arg0) {

      // TODOAuto-generated method stub

      /*这里解释下这句话的含义:如果不存在person的表格则创建一个名为person的表格

       *

       * _id是自动增加的,name是字符型的,arg是整数型的,info是文字型的

       * 这四行就可以当作一个表格中的列,四列,对应每个个体的四个属性,是这么解释吧,哈哈

       * 然后没增加一个个体,则行就增加一列,但是属性是不改变的 */

      arg0.execSQL("CREATETABLE IF NOT EXISTS person"+

      "(_idINTEGER PRIMARY KEY AUTOINCREMENT,name VARCHAR,arg INTEGER,info TEXT)");  

   }

 

   @Override

   public voidonUpgrade(SQLiteDatabase db, intoldVersion,intnewVersion) {

      // TODOAuto-generated method stub

      //这个我也没用过,大概是增加个体的属性的时候使用吧,这个时候记得要升级版本号~~~~~~

      db.execSQL("ALTERTABLE person ADD COLUMN other STRING");

   }

}

 

public classDBManager {

   //当然是先获得一个dbhelper的指针啦。

   privateDBhelperhelper;

   //得到一个数据库的指针

   privateSQLiteDatabasedb;

  

   //构造函数

   publicDBManager(Context context){

      //实例化dbhelper,就创建一个数据库了,里面还有个person的表格。

      helper=newDBhelper(context);

      //得到dbhelper实例化的时候获得数据库,并将该数据库的操作指针给db

      //这样就能在这个类里面玩了。哈哈

      db=helper.getWritableDatabase();

   }

  

   /*

    * 增加数据到数据库中这里是增加我们写的person的类中的数据。使用的list,可以一次添加很多个体*/

   public voidadd(List<Person> persons){

      //十分建议这里要使用trycatchfinally

      //后面的updateagedeleteOldPersonquery未加就出了些问题就直接程序悲剧。

      //准备传送

      db.beginTransaction();

      try{

         //inti=0;

         for(Personperson:persons)

         {

            //i++;

            ContentValuescv = new ContentValues();

            //cv.put("_id",i );

            //放入各个属性。

            cv.put("name",person.name);

            cv.put("arg",person.age);

            cv.put("info",person.info);

            //有些好的方法就是happy啊,强势直接插入。

            //person表格插入个体cv,貌似些null是不好的,特别当cv为空的时候。可以指定一个string吧。自己试试咯。

            db.insert("person",null,cv);

         }

            //这句是sqlite语句中的插入语句,如果你对sqlite像我一样啥都不懂,还是用inert的方法吧。

            //db.execSQL("INSERTINTO person VALUES(null,?,?,?)",newObject[]{person.name,person.age,person.info}   );

         //传送成功

         db.setTransactionSuccessful();

        

      }finally{

         //无论如何,此句被执行,退出传送。

         db.endTransaction();

      }

   }

  

   //更新xx人的年纪,这里更据名字找到xx人。

   public voidupdateAge(Person person){

      ContentValuescv=new ContentValues();

      cv.put("arg",person.age);

      //person表格中找到名字等于xx的人,并更新其年纪。

      db.update("person", cv,"name = ?",newString[]{person.name});

   }

  

   //删掉年纪大于xx的人,太残忍了。。。

   public voiddeleteOldPerson(Person person)

   {

      //就是这样~~

      db.delete("person","arg>=?",newString[]{String.valueOf(person.age)});

   }

  

   //查询数据,用list的方式返回查询到person所有的个体。这就是封装啊。

   publicList<Person> query(){

      ArrayList<Person>persons=new ArrayList<Person>();

      //得到一个返回所有个体的游标

      Cursorc=queryTheCursor();

     

      //一个一个个体的往下移动。

      while(c.moveToNext())

      {

         Personperson=new Person();

         //这里记得要有合适的类型取回数据。

         person._id=c.getInt(c.getColumnIndex("_id"));

         person.name=c.getString(c.getColumnIndex("name"));

         person.age=c.getInt(c.getColumnIndex("arg"));

         person.info=c.getString(c.getColumnIndex("info"));

         persons.add(person);

      }

      //时刻记住要close一些东西。

      c.close();

      returnpersons;

   }

  

   //返回得到所有个体的游标

   publicCursor queryTheCursor(){

      Cursorc=db.rawQuery("SELECT* FROM person",null);

      return c;

   }

  

   public voidcloseDB(){

      db.close();

   }

  

}



代码下载地址:

http://www.eoeandroid.com/thread-275095-1-1.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值