Android简单的SQLite操作及ListView展示数据

学习Android有几天了,今天研究了下SQLite的简单操作,现在分享给奋斗在一线的苦逼程序员们,共勉吧。

Android系统提供了一个SQLiteOpenHelper的一个辅助类,使用此类可以完成对数据库的创建及更新,写了一个简单的类,代码如下:

package com.van.sqlite.db;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class DBOpenHelper extends SQLiteOpenHelper{
	
	/**数据库名称*/
	private static final String DATABASE_NAME="MyAppDB";
	/**数据库版本*/
	private static final int DATABASE_VERSION=1;
	/** 创建数据表语句*/
	private static final String DDL_CREATE_TABLE_APPINFO="CREATE TABLE IF NOT EXISTS AppInfo (appId integer primary key autoincrement,appName text,appDescription text, remark text)";

	/**
	 * 实例化数据库连接.
	 * @param context
	 */
	public DBOpenHelper(Context context){
		super(context, DATABASE_NAME, null, DATABASE_VERSION);
		/**初始化数据表*/
		this.getWritableDatabase().execSQL(DDL_CREATE_TABLE_APPINFO);
		
	}
	@Override
	public void onCreate(SQLiteDatabase db) {
		// TODO Auto-generated method stub
		
	}
	@Override
	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
		// TODO Auto-generated method stub
	}
}

布局文件: main.xml,只添加了一个ListView用于显示数据

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <ListView
        android:id="@+id/listView_appList"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >
    </ListView>

</LinearLayout>

数据列表的项实现:list_item.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/textView_appName"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceMedium" />

    <TextView
        android:id="@+id/textView_appDescription"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceSmall" />

</LinearLayout>

SQLiteDemoActivity 代码:

package com.van.sqlite;

import java.util.ArrayList;
import java.util.HashMap;

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

import com.van.sqlite.db.DBOpenHelper;

public class SQLiteDemoActivity extends Activity {
	
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        //initData(); //这个方法只是用来临时加载一下数据以备显示
        
        ListView listView=(ListView)findViewById(R.id.listView_appList);
        //获取查询结果
        ArrayList<HashMap<String, Object>> listData=fillList();
        //获取适配器
        SimpleAdapter adapter=fillAdapter(listData);
        //添加并且显示  
        listView.setAdapter(adapter);  
    }
    

    /**
	 * 插入数据操作
	 */
	public void initData(){
		DBOpenHelper helper=new DBOpenHelper(this);
		ContentValues values=new ContentValues();
		values.put("appName", "手机QQ2212");
		values.put("appDescription", "手机QQ2012是腾讯公司基于移动终端开发的一款应用软件。");
		values.put("remark", "手机QQ2012是腾讯公司基于移动终端开发的一款应用软件。");
		helper.getWritableDatabase().insert("AppInfo", null, values);
	}
    
	/**
	 * 查询AppInfo返回Map集合
	 * @return
	 */
    public  ArrayList<HashMap<String, Object>> fillList(){
    	
    	 //生成动态数组,并且转载数据  
        ArrayList<HashMap<String, Object>> dataList = new ArrayList<HashMap<String, Object>>();  
        
        DBOpenHelper helper=new DBOpenHelper(this);
        SQLiteDatabase db=helper.getReadableDatabase();
        
        try{
	        Cursor cursor=db.rawQuery("SELECT * FROM AppInfo", null); 
	        cursor.moveToFirst();

	        if(cursor.moveToFirst()) {  
	        		Integer appId = cursor.getInt(cursor.getColumnIndex("appId"));  
	        		String appName = cursor.getString(cursor.getColumnIndex("appName")); 
	        		String appDescription = cursor.getString(cursor.getColumnIndex("appDescription")); 
	        		
	        		HashMap<String, Object> map = new HashMap<String, Object>();  
	                map.put("appId",appId);  
	                map.put("appName", appName);  
	                map.put("appDescription", appDescription);  
	                dataList.add(map);  
	        }  
	        
        }catch(Exception ex){
        	ex.printStackTrace();
        }finally{
        	
        	if(db.isOpen()){
        		db.close();
        	}
        }
        
		return dataList;
    }
    
    /**
     * 填充数据,取得数据适配器.
     * @param listData
     * @return
     */
    public SimpleAdapter fillAdapter(ArrayList<HashMap<String, Object>> listData){
    	
    	
    	 //生成适配器,数组===》ListItem  
        SimpleAdapter adapter = new SimpleAdapter(this,
        											listData,//数据来源   
                                                    R.layout.list_item,//ListItem的XML实现  
                                                    //动态数组与ListItem对应的子项          
                                                    new String[] {"appName", "appDescription"},   
                                                    //ListItem的XML文件里面的两个TextView ID  
                                                    new int[] {R.id.textView_appName,R.id.textView_appDescription});  
        
        return adapter;
    	
    }
}

运行结果如下:

Android简单的SQLite操作及ListView展示数据

把工程目录结构也贴上:

Android简单的SQLite操作及ListView展示数据

相关推荐