Android 数据库编程基础

http://huanghaijun.iteye.com/blog/653440

Android数据库 之 SQLite数据库 http://www.cnblogs.com/kgb250/archive/2012/08/28/sqlitedatabase.html
Android中SQLite应用详解 http://blog.csdn.net/liuhe688/article/details/6715983

原文地址:
http://www.eoeandroid.com/viewthread.php?tid=391&extra=page%3D8%26amp%3Borderby%3Ddateline

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

创建数据库
Context.createDatabase(String name,int version ,int mode,CursorFactory factory)
创建一个新的数据库并返回一个SQLiteDatabase对象
假如数据库不能被创建,则抛出FileNotFoundException异常
新创建SQLite数据库方法
SQLiteDatabase myDataBase=this.openOrCreateDatabase("myDataBase.db",  
                               MODE_PRIVATE, new CursorFactory(){  
//创建新的数据库,名称myDatabase,模式MODE_PRIVATE,鼠标工厂  
//工厂类,一个可选工厂类,当查询时调用来实例化一个光标  
    @Override  
    public Cursor newCursor(SQLiteDatabase db,  
            SQLiteCursorDriver masterQuery, String editTable,  
            SQLiteQuery query) {  
           // TODO Auto-generated method stub  
            return null;  
            }  
}); 

注意,如果没有修改这个Factory的代码,那么干脆给一个null来带地Factory,否则无法创建表等信息
可以使用SQLiteDatabase的静态方法openOrCreateDatabase(String path,SQLiteDatabae.CursorFactory factory)打开或者创建一个数据库,该方法的 第一个参数是数据库的创建路径,注意这个路径一定是数据库的全路径。例如/data/data/package/databases/dbname.db。第二个参数是指定返回一个Cursor子类的工厂,如果没有指定(null)则使用默认工厂。


删除数据库

Context.deleteDatabase(String name)删除指定名称的数据库

假如数据库成功删除则返回true,失败则为false(例如数据库不存在)

打开数据库
Context.openDatabase(String file,CursorFactory factory)
打开一个存在的数据库并返回
一个SQLiteDatabase对象
如果数据库不存在则抛出FileNotFoundException异常
//创建一个名为:myDataBase的数据库,后缀为.db  
SQLiteDatabase my_DataBase=this.openOrCreateDatabase("myDateBase.db",  
                                                                      MODE_PRIVATE, null);  
my_DataBase.close();//不要忘记关闭数据库
 

非查询SQL指令

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


 
2.在数据库中插入一个元组
//在数据库中插入一个元组  
my_DataBase.execSQL("INSERT INTO test (_id,someNumber) values(1,8);");  


3.删除表
//删除表  
my_DataBase.execSQL("DROP TABLE test"); 





查询SQL指令-游标Cursors



Android 使用游标(Cursors)来导航浏览查询结果
游标(Cursors)被android.database.Cursor对象来描述
一个游标(Cursors)是一个简单的指针,它从查询结果的一个元组跳到下一个元组(或是前一个或是第一个或是……)
游标(Cursors)在它定位位置的那一刻返回元组数据
//为了创建一个Cursor(游标),必须执行一个查询,要么通过SQL使用rawQuery()方法  
//或是更精心设计的方法,像query()方法  
Cursor cur=my_DataBase.rawQuery("SELECT * FORM test", null);  
if(cur!=null){//游标不为空  
 //返回给定名称的列的基于0开始的index,如果该属性列不存在则返回-1  
 //通过它们的index来检索属性值  
 int numColumn=cur.getColumnIndex("someNumber");  
 if(cur.moveToFirst()){  
    //cur.moveToFirst()让游标指向第一行,如果游标指向第一行,则返回true  
 do {  
             int num=cur.getInt(numColumn);//获得当前行该属性的值  
            /*Cursor提供了不同的方法来回索不同的数据类型 
            例如getInt(int index)/getString(int index)等等*/  
           /*做一些事情*/  
       } while (cur.moveToNext());  
             /*游标移动到下一行,如果游标已经通过了结果集中的最后, 
           即没有行可以移动时,则返回false*/  
          //其他可能移动的是 previous() 和first()方法  
       }  

数据库应用示例

部分代码

把新输入的联系人信息加入到数据库
  
//把新输入的联系人信息加入到数据库  
private void addToDataBase(String name_str2, String phone_str2, String email_str2, String address_str2) {  
  // TODO Auto-generated method stub  
  String sqlCmd="INSERT INTO myPhoneBook(Pname,Pphone,Pemail,Paddress) values('"+name_str2+"','"+phone_str2+"','"+email_str2+"','"+address_str2+"');";  
  try {  
   myPhoneBookDB.execSQL(sqlCmd);  
   ShowNoteInformation("添加成功!!");  
  } catch (Exception e) {  
   // TODO: handle exception  
   ShowNoteInformation("添加失败,记录已经存在!!");  
  }  
  Log.i("MYTEST", sqlCmd);  
}  


数据库查找联系人信息
setMainScreen(R.layout.persionlist);  
   setActionListener(R.layout.persionlist);  
   //实例化ArrayList  
   arraylistmap=new ArrayList<Map<String,Object>>();  
   ShowNoteInformation("查看电话");  
   //为了创建一个Cursor(游标),必须执行一个查询,要么通过SQL使用rawQuery()方法  
         //或是更精心设计的方法,像query()方法  
   myCursor=myPhoneBookDB.rawQuery("SELECT * FROM myPhoneBook", null);  
         if(myCursor!=null){//游标不为空  
          //返回给定名称的列的基于0开始的index,如果该属性列不存在则返回-1  
          //通过它们的index来检索属性值  
          int numColumn_name=myCursor.getColumnIndex("name");  
          int numColumn_phone=myCursor.getColumnIndex("phone");  
          int numColumn_email=myCursor.getColumnIndex("email");  
          int numColumn_address=myCursor.getColumnIndex("address");  
            
          if(myCursor.moveToFirst()){   
             //cur.moveToFirst()让游标指向第一行,如果游标指向第一行,则返回true  
           do {  
      //获得当前行该属性的值  
            /*Cursor提供了不同的方法来回索不同的数据类型 
                                                           例如getInt(int index)/getString(int index)等等*/  
              
      my_name = myCursor.getString(numColumn_name);  
      my_phone = myCursor.getString(numColumn_phone);  
      my_email = myCursor.getString(numColumn_email);  
      my_address = myCursor.getString(numColumn_address);    
        
      myMap =new HashMap<String, Object>();  
      myMap.put("Name",my_name );  
      myMap.put("hone",my_phone );  
      myMap.put("Email",my_email );  
      myMap.put("Address",my_address );  
      arraylistmap.add(myMap);  
      /*做一些事情*/  
     } while (myCursor.moveToNext());  
           /*游标移动到下一行,如果游标已经通过了结果集中的最后, 
                                                即没有行可以移动时,则返回false*/  
           //其他可能移动的是 previous() 和first()方法  
          }  
         }  
         adapter=new SimpleAdapter(this, arraylistmap, android.R.layout.simple_list_item_1, new String[]{"Name"}, new int []{android.R.id.text1});  
         mylist.setAdapter(adapter); 


数据库中删除该电话记录
ShowNoteInformation("删除该电话记录");  
myPhoneBookDB.execSQL("DELETE FROM myPhoneBook WHERE Pname='"+my_name+"';");  
Log.i("MYTEST", "DELETE FROM myPhoneBook WHERE Pname='"+my_name+"';");  
cleanShow();  

你可能感兴趣的:(Android 数据库编程基础)