andriod之從Sqlite中獲取數據的三種方法SimpleAdapter,SimpCursorAdapter,CursorAdapter

方法一:

import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import android.os.Bundle;
import android.os.Environment;
import android.app.Activity;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.widget.ListView;
import android.widget.SimpleAdapter;

public class MainActivity extends Activity {
    
    private ListView lv;
    private SQLiteDatabase db;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        lv = (ListView) findViewById(R.id.lv);
        
        String path = Environment.getExternalStorageDirectory().
                getAbsolutePath()+File.separator+"info.db";//File.separator+"Download"+
        /**
         * openDatabase      用來打開數據庫操作
         * 參數1:文件的路徑
         * 參數2:遊標工廠    null
         * 參數3: flag   標記    可讀寫操作
         */
        db = SQLiteDatabase.openDatabase(path, null, SQLiteDatabase.OPEN_READWRITE);
        //得到adapter對象
        SimpleAdapter adapter = new SimpleAdapter
                (MainActivity.this, getDbData(),
                        R.layout.item, new String[]{"_id","name"},
                        new int[]{R.id.tv_id,R.id.tv_name});
        //將數據填充到lv
        lv.setAdapter(adapter);
        
        
    }
    /**
     * 從數據庫中獲取數據
     * @return
     */
    public List<Map<String,Object>> getDbData(){
        List<Map<String,Object>> list = new ArrayList<Map<String,Object>>();
        Cursor cursor = db.query("person", null, null, null, null, null, null);
        
        while(cursor.moveToNext()){
            Map<String,Object> map = new HashMap<String, Object>();
            int id = cursor.getInt(cursor.getColumnIndex("_id"));
            String name = cursor.getString(cursor.getColumnIndex("name"));
            map.put("_id", id);
            map.put("name", name);
            
            list.add(map);
            
        }
        return list;
    }
    
}

方法二:

import java.io.File;

import android.app.Activity;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.os.Environment;
import android.support.v4.widget.SimpleCursorAdapter;
import android.widget.ListView;

public class SimpleCursorActivity extends Activity{
    
    private ListView lv;
    private SQLiteDatabase db;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        lv = (ListView) findViewById(R.id.lv);
        
        String path = Environment.getExternalStorageDirectory().
                getAbsolutePath()+File.separator+"info.db";
        /**
         * openDatabase  用來打開數據庫的操作
         * 參數1:文件的路徑
         * 參數2:遊標工廠   
         * 參數3:flag  標記   可讀寫操作
         *
         */
        
        db = SQLiteDatabase.openDatabase(path, null,
                SQLiteDatabase.OPEN_READWRITE);
        
        Cursor c = db.rawQuery("select * from person", null);
        /**
         * 參數1:上下文對象
         * 參數2:佈局
         * 參數3:數據
         * 參數4:c 裏的字段數組
         * 參數5:對應的控件
         * 參數6:標記
         */
        @SuppressWarnings("deprecation")
        SimpleCursorAdapter adapter = new SimpleCursorAdapter
                (SimpleCursorActivity.this
                        , R.layout.item, c,
                        new String[]{"_id","name"},
                        new int[]{R.id.tv_id,R.id.tv_name});
        //將數據填充到lv
        lv.setAdapter(adapter);
        
    }
    

}

方法三:

import java.io.File;

import android.app.Activity;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.os.Environment;
import android.support.v4.widget.CursorAdapter;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListView;
import android.widget.TextView;

public class CursorAdapterActivity extends Activity{
    
    private ListView lv;
    private SQLiteDatabase db;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        lv = (ListView) findViewById(R.id.lv);
        
        String path = Environment.getExternalStorageDirectory().
                getAbsolutePath()+File.separator+"info.db";
        /**
         *
         */
        db = SQLiteDatabase.openDatabase(path, null,
                SQLiteDatabase.OPEN_READWRITE);
        
        Cursor c = db.rawQuery("select * from person", null);
        
        MyCursorAdapter adapter = new MyCursorAdapter(CursorAdapterActivity.this,c);
        
        lv.setAdapter(adapter);
    }
    /**
     * 自定義的Adapter
     */
    class MyCursorAdapter extends CursorAdapter{

        public MyCursorAdapter(Context context, Cursor c) {
            super(context, c);
            // TODO Auto-generated constructor stub
        }
        /**
         * newView  返回item佈局   View  給   bindView
         */
        @Override
        public View newView(Context context, Cursor cursor, ViewGroup parent) {
            // TODO Auto-generated method stub
            return LayoutInflater.from(context).inflate(R.layout.item, null);
        }
        /**
         * 參數1:newView  裏返回的視圖
         * 參數2:上下文對象
         * 參數3:Cursor對象
         */
        @Override
        public void bindView(View view, Context context, Cursor cursor) {
            // TODO Auto-generated method stub
            
            TextView tv = (TextView) view.findViewById(R.id.tv_id);
            TextView tv_name = (TextView) view.findViewById(R.id.tv_name);
            
            tv.setText(cursor.getInt(cursor.getColumnIndex("_id"))+"");
            tv_name.setText(cursor.getString(cursor.getColumnIndex("name")));
            
        }
        
    }
    
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章