Android sqlite数据库编程基础

SQLite数据库

  • 在某些情况下,文件不是有效的
      Ø 如果多线程数据访问是相关的
      Ø 如果应用程序处理可能变化的复杂数据结构
      Ø 等等
  • 因此,Android带来了内置SQLite数据库支持
  • 数据库对于创建它们的包套件是私有的
  • 数据库不应该用来存贮文件
  • 提示:在SDK中的samples/NotePad下可以找到关于如何使用数据库的例子
  • SQLite是一个轻量级的软件库
  • 实现了一个完全适应严峻环境的数据库
      Ø 原子量性
      Ø 坚固性
      Ø 独立性
      Ø 耐久性
  • 体积大小只用几千字节
  • 一些SQL的指令只是部分支持,例如:ALTERTABLE
  • 参阅 http://www.sqlite.org 获取更多信息

创建数据库

  • Context.createDatabase(String name,int version ,int mode,CursorFactory factory)创建一个新的数据库并返回一个SQLiteDatabase对象
  • 假如数据库不能被创建,则抛出FileNotFoundException异常
  • 新创建SQLite数据库方法






  1. SQLiteDatabase myDataBase=this.openOrCreateDatabase("myDataBase.db",
  2.                                MODE_PRIVATE, new CursorFactory(){
  3. //创建新的数据库,名称myDatabase,模式MODE_PRIVATE,鼠标工厂
  4. //工厂类,一个可选工厂类,当查询时调用来实例化一个光标
  5.     @Override
  6.     public Cursor newCursor(SQLiteDatabase db,
  7.             SQLiteCursorDriver masterQuery, String editTable,
  8.             SQLiteQuery query) {
  9.            // TODO Auto-generated method stub
  10.             return null;
  11.             }
  12. });
复制代码
删除数据库

  • Context.deleteDatabase(String name)删除指定名称的数据库
  • 假如数据库成功删除则返回true,失败则为false(例如数据库不存在)






  1.         //删除指定名称的数据库
  2.         this.deleteDatabase("myDatabase.db");
复制代码
打开数据库

  • Context.openDatabase(String file,CursorFactory factory)打开一个存在的数据库并返回一个SQLiteDatabase对象
  • 如果数据库不存在则抛出FileNotFoundException异常


  1. //创建一个名为:myDataBase的数据库,后缀为.db
  2. SQLiteDatabase my_DataBase=this.openOrCreateDatabase("myDateBase.db",
  3.                                                                       MODE_PRIVATE, null);
  4. my_DataBase.close();//不要忘记关闭数据库
复制代码


非查询SQL指令

  • SQLiteDatabase.execSQL(String sql)可以用来执行非查询SQL指令,这些指令没有结果
  • 包括:CREATE TABLE / DROP TABLE / INSERT 等等
  • 例如:
  • 创建一个名为"test"并带两个参数的表


    1. //创建一个名为"test"并带两个参数的表
    2. my_DataBase.execSQL("CREATE TABLE test (_id INTEGER PRIMARY KEY,
    3.                                                         someNumber INTERGER);");
    复制代码


  • 在数据库中插入一个元组





    1. //在数据库中插入一个元组
    2. my_DataBase.execSQL("INSERT INTO test (_id,someNumber) values(1,8);");
    复制代码
  • 删除表

    1. //删除表
    2. my_DataBase.execSQL("DROP TABLE test");
    复制代码


查询SQL指令-游标Cursors



  • Android 使用游标(Cursors)来导航浏览查询结果
  • 游标(Cursors)android.database.Cursor对象来描述
  • 一个游标(Cursors)是一个简单的指针,它从查询结果的一个元组跳到下一个元组(或是前一个或是第一个或是……)
  • 游标(Cursors)在它定位位置的那一刻返回元组数据


test
_idsomeNumber

图片1.png (352 Bytes, 下载次数: 8)

下载附件  保存到相册

2009-6-1 23:41 上传

18
 210
 32





  1.         //为了创建一个Cursor(游标),必须执行一个查询,要么通过SQL使用rawQuery()方法
  2.         //或是更精心设计的方法,像query()方法
  3.         Cursor cur=my_DataBase.rawQuery("SELECT * FORM test", null);
  4.         if(cur!=null){//游标不为空
  5.          //返回给定名称的列的基于0开始的index,如果该属性列不存在则返回-1
  6.          //通过它们的index来检索属性值
  7.          int numColumn=cur.getColumnIndex("someNumber");
  8.          if(cur.moveToFirst()){
  9.             //cur.moveToFirst()让游标指向第一行,如果游标指向第一行,则返回true
  10.          do {
  11.                      int num=cur.getInt(numColumn);//获得当前行该属性的值
  12.                     /*Cursor提供了不同的方法来回索不同的数据类型
  13.                     例如getInt(int index)/getString(int index)等等*/
  14.                    /*做一些事情*/
  15.                } while (cur.moveToNext());
  16.                      /*游标移动到下一行,如果游标已经通过了结果集中的最后,
  17.                    即没有行可以移动时,则返回false*/
  18.                   //其他可能移动的是 previous() 和first()方法
  19.                }
  20. }
复制代码



数据库应用示例

部分代码


  • 把新输入的联系人信息加入到数据库

  1.    //把新输入的联系人信息加入到数据库
  2. private void addToDataBase(String name_str2, String phone_str2, String email_str2, String address_str2) {
  3.   // TODO Auto-generated method stub
  4.   String sqlCmd="INSERT INTO myPhoneBook(Pname,Pphone,Pemail,Paddress) values('"+name_str2+"','"+phone_str2+"','"+email_str2+"','"+address_str2+"');";
  5.   try {
  6.    myPhoneBookDB.execSQL(sqlCmd);
  7.    ShowNoteInformation("添加成功!!");
  8.   } catch (Exception e) {
  9.    // TODO: handle exception
  10.    ShowNoteInformation("添加失败,记录已经存在!!");
  11.   }
  12.   Log.i("MYTEST", sqlCmd);
  13. }
复制代码
  • 数据库查找联系人信息
  1. setMainScreen(R.layout.persionlist);
  2.    setActionListener(R.layout.persionlist);
  3.    //实例化ArrayList
  4.    arraylistmap=new ArrayList<Map<String,Object>>();
  5.    ShowNoteInformation("查看电话");
  6.    //为了创建一个Cursor(游标),必须执行一个查询,要么通过SQL使用rawQuery()方法
  7.          //或是更精心设计的方法,像query()方法
  8.    myCursor=myPhoneBookDB.rawQuery("SELECT * FROM myPhoneBook", null);
  9.          if(myCursor!=null){//游标不为空
  10.           //返回给定名称的列的基于0开始的index,如果该属性列不存在则返回-1
  11.           //通过它们的index来检索属性值
  12.           int numColumn_name=myCursor.getColumnIndex("name");
  13.           int numColumn_phone=myCursor.getColumnIndex("phone");
  14.           int numColumn_email=myCursor.getColumnIndex("email");
  15.           int numColumn_address=myCursor.getColumnIndex("address");
  16.          
  17.           if(myCursor.moveToFirst()){
  18.              //cur.moveToFirst()让游标指向第一行,如果游标指向第一行,则返回true
  19.            do {
  20.       //获得当前行该属性的值
  21.             /*Cursor提供了不同的方法来回索不同的数据类型
  22.                                                            例如getInt(int index)/getString(int index)等等*/
  23.             
  24.       my_name = myCursor.getString(numColumn_name);
  25.       my_phone = myCursor.getString(numColumn_phone);
  26.       my_email = myCursor.getString(numColumn_email);
  27.       my_address = myCursor.getString(numColumn_address);  
  28.       
  29.       myMap =new HashMap<String, Object>();
  30.       myMap.put("Name",my_name );
  31.       myMap.put("hone",my_phone );
  32.       myMap.put("Email",my_email );
  33.       myMap.put("Address",my_address );
  34.       arraylistmap.add(myMap);
  35.       /*做一些事情*/
  36.      } while (myCursor.moveToNext());
  37.            /*游标移动到下一行,如果游标已经通过了结果集中的最后,
  38.                                                 即没有行可以移动时,则返回false*/
  39.            //其他可能移动的是 previous() 和first()方法
  40.           }
  41.          }
  42.          adapter=new SimpleAdapter(this, arraylistmap, android.R.layout.simple_list_item_1, new String[]{"Name"}, new int []{android.R.id.text1});
  43.          mylist.setAdapter(adapter);

复制代码
  • 数据库中删除该电话记录

  1.    ShowNoteInformation("删除该电话记录");
  2.    myPhoneBookDB.execSQL("DELETE FROM myPhoneBook WHERE Pname='"+my_name+"';");
  3.    Log.i("MYTEST", "DELETE FROM myPhoneBook WHERE Pname='"+my_name+"';");
  4.    cleanShow();
复制代码
  • 运行结果

main_icon.png (108.07 KB, 下载次数: 52)

下载附件  保存到相册

2009-6-2 02:01 上传

main_menu.png (61.84 KB, 下载次数: 5)

下载附件  保存到相册

2009-6-2 02:01 上传

main_add.png (77.8 KB, 下载次数: 3)

下载附件  保存到相册

2009-6-2 02:01 上传

list.png (59.53 KB, 下载次数: 5)

下载附件  保存到相册

2009-6-2 02:01 上传

viewphone.png (75.38 KB, 下载次数: 9)

下载附件  保存到相册

2009-6-2 02:01 上传

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值