当前位置:操作系统 > 安卓/Android >>

SimpleCursorAdapter类与数据绑定

在许多时候需要将数据库表中的数据显示在ListView、Gallery等组件中。虽然可以直接使用Adapter对象处理,但工作量很大。为此,Android SDK提供了一个专用于数据绑定的Adapter类:SimpleCursorAdapter。
    SimpleCursorAdapter与SimpleAdapter用法相近。只是将List对象换成了Cursor对象。而且SimpleCursorAdapter类构造方法的第四个参数from表示Cursor对象中的字段,而SimpleAdapter类构造方法的第四个参数from表示Map对象中的key。除此之外,这两个Adapter类在使用方法完全相同。
    下面是SimpleCursorAdapter类构造方法定义。
     public SimpleCursorAdapter(Context context,int layout,Cursor c,String[] from,int[] to);
    下例中通过SimpleCursorAdapter类将数据库表绑定在ListView上,也就是说,该ListView会显示数据表的全部记录。在绑定数据前,需要先编写一个SQLiteOpenHelper类的子类,用于操作数据库,代码如下:
Java代码 
  package com.li; 
 
import java.util.Random; 
 
import android.content.Context; 
import android.database.Cursor; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteOpenHelper; 
 
public class DBService extends SQLiteOpenHelper { 
 
        private final static int DATABASE_VERSION = 1; 
        private final static String DATABASE_NAME = "test.db"; 
 
        public DBService(Context context) { 
                super(context, DATABASE_NAME, null, DATABASE_VERSION); 
        } 
 
        @Override 
        public void onCreate(SQLiteDatabase db) { 
                 //创建表           
                String sql = "CREATE TABLE [t_test](" + "[_id]AUTOINC," 
                                + "[name]VARCHAR2(20) NOT NULL CONFLICT FAIL," 
                                + "CONSTRAINT[sqlite_autoindex_te_test_1]PRIMARY KEY([_id]))"; 
                db.execSQL(sql); 
                //向test数据库中插入20条记录 
                Random random = new Random(); 
                for ( int i = 0;i<20;i++) 
                { 
                        String s = ""; 
                        for(int j=0;j<10;j++) 
                        { 
                                char c = (char)(97+random.nextInt(26)); 
                                s+=c; 
                        } 
                        db.execSQL("insert into t_test(name)values(?)",new Object[]{s}); 
                                         
                } 
        } 
 
        @Override 
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
 
        } 
 
        //执行查询语句 
        public Cursor query(String sql,String[] args) 
        { 
                SQLiteDatabase db = this.getReadableDatabase(); 
                Cursor cursor = db.rawQuery(sql, args); 
                return cursor; 
        } 
 


      本例不需要对test.db进行升级,因此,只有在DBService类中的oncreate()方法中有创建数据库表的代码。DBService类创建了一个test.db数据库文件,并在该文件中创建了t_test表。在该表中包含两个字段_id和name。其中_id是自增字段,并且是主索引。
     下面编写MapsDemo类。MapsDemo类是ListActivity的子类。在该类中的oncreate()方法中创建了DBService对象,然后通过DBService类的query方法查询出t_test表中的所有记录,并返回Cursor对象。MapsDemo类的代码如下:
    
Java代码 
package com.li; 
     import android.app.ListActivity; 
    import android.database.Cursor; 
    import android.os.Bundle; 
    import android.widget.SimpleCursorAdapter; 
    public class MapsDemo extends ListActivity { 
 
    /** Called when the activity is first created. */ 
    @Override 
     public void onCreate(Bundle savedInstanceState)  
    { 
         super.onCreate(savedInstanceState); 
         DBService dbService = new DBService(this); 
 
         //查询数据          
         Cursor cursor = dbService.query("select * from t_test", null);&nbs

补充:移动开发 , Android ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,