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")));
            
        }
        
    }
    
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值