android中OrmLite數據庫編程實例講解

在android中,使用OrmLite可以快速的進行數據庫開發,廢話不說,直接上代碼。


一 、 編寫DatabaseHelper,需要繼承OrmLiteSqliteOpenHelper類


package com.xxx.db
import java.util.HashMap;
import java.util.Map;
import java.sql.SQLException; 

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

import com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper;
import com.j256.ormlite.dao.Dao;
import com.j256.ormlite.support.ConnectionSource;
import com.j256.ormlite.table.TableUtils;

public class DatabaseHelper extends OrmLiteSqliteOpenHelper {

	private static final String DATABASE_NAME = "videointercom.db";
	private static final int DATABASE_VERSION = 3;
	private Map<String, Dao> daos = new HashMap<String, Dao>();
	private static DatabaseHelper instance;

	/**
	 * userDao ,每張表對於一個
	 */
	// private Dao<user, integer=""> userDao;

	private DatabaseHelper(Context context) {
		super(context, DATABASE_NAME, null, DATABASE_VERSION);
	}

	@Override
	public void onCreate(SQLiteDatabase database,
			ConnectionSource connectionSource) {
		try {

			TableUtils.createTable(connectionSource, TableCallRecord.class);
			TableUtils.createTable(connectionSource, TableIptable.class);
			TableUtils.createTable(connectionSource, TableVillaParameter.class);

		} catch (SQLException e) {
			e.printStackTrace();
		}

	}

	@Override
	public void onUpgrade(SQLiteDatabase database,
			ConnectionSource connectionSource, int oldVersion, int newVersion) {
		try  
        {  
            TableUtils.dropTable(connectionSource, TableCallRecord.class, true); 
            TableUtils.dropTable(connectionSource, TableIptable.class, true);
            TableUtils.dropTable(connectionSource, TableVillaParameter.class, true);
  
            onCreate(database, connectionSource);  
        } catch (SQLException e)  
        {  
            e.printStackTrace();  
        }  

	}

	/**
	 * 單例獲取該Helper
	 * 
	 * @param context
	 * @return
	 */
	public static synchronized DatabaseHelper getHelper(Context context) {
		context = context.getApplicationContext();
		if (instance == null) {
			synchronized (DatabaseHelper.class) {
				if (instance == null)
					instance = new DatabaseHelper(context);
			}
		}

		return instance;
	}

	public synchronized Dao getDao(Class clazz) throws SQLException {
		Dao dao = null;
		String className = clazz.getSimpleName();

		if (daos.containsKey(className)) {
			dao = daos.get(className);
		}
		if (dao == null) {
			try {
				dao = super.getDao(clazz);
			} catch (java.sql.SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			daos.put(className, dao);
		}
		return dao;
	}

	/**
	 * 釋放資源
	 */
	@Override
	public void close() {
		super.close();

		for (String key : daos.keySet()) {
			Dao dao = daos.get(key);
			dao = null;
		}
	}
	

}

TableUtils.createTable爲創建數據庫表,在onCreate中進行。TableUtils.dropTable爲更新數據庫表,在onUpgrade中進行。


二 、數據庫表的定義


package com.xxx.db;
import com.j256.ormlite.field.DatabaseField;
import com.j256.ormlite.table.DatabaseTable;

@DatabaseTable(tableName="T_IpTable") 
public class TableIptable {
	
	@DatabaseField(generatedId=true)
	public int id;
	
	@DatabaseField
	public String ip;
	
	@DatabaseField
	public String addr;
	public TableIptable(){
		
	}
	public TableIptable(String ip,String addr){
		this.ip = ip;
		this.addr = addr;
		
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}
	public String getIp() {
		return ip;
	}
	public void setIp(String ip) {
		this.ip = ip;
	}
	public String getAddr() {
		return addr;
	}
	public void setAddr(String addr) {
		this.addr = addr;
	}

	
	

}

三、 編寫Dao類

package com.xxx.db;
import java.sql.SQLException;
import java.util.List;

import android.content.Context;

import com.j256.ormlite.dao.Dao;

public class TableIptableDao {
	private Dao<TableIptable, Integer> iptableDao;
	private DatabaseHelper helper;

	@SuppressWarnings("unchecked")
	public TableIptableDao(Context context) {
		try {
			helper = DatabaseHelper.getHelper(context);
			iptableDao = helper.getDao(TableIptable.class);
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
    //添加一個TableCallRecord
	public void add(TableIptable iptable) {
		try {
			iptableDao.create(iptable);
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	
	//通過ID獲得一個TableCallRecord
	 public TableIptable get(int id)  {  
		 TableIptable iptable = null;  
	    try  
	    {  
	    	iptable = iptableDao.queryForId(id);  
	  
	        } catch (SQLException e)  
	        {  
	            e.printStackTrace();  
	        }  
	        return iptable;  
	 }  
	 
	 //通過ID獲得全部的TableCallRecord
	 public List<TableIptable> listByUserId(int userId)  {  
	    try  
	    {  
	        return iptableDao.queryBuilder().where().eq("user_id", userId).query();  
	    } catch (SQLException e){  
	            e.printStackTrace();  
	        }  
	        return null;  
	} 
	 
	 //查詢TableCallRecord的所有記錄
	 public List<TableIptable> queryAll(){
	     List<TableIptable> all = null;
	     try {
		     all = iptableDao.queryForAll();
		 } catch (SQLException e) {
		     e.printStackTrace();
		 } 
	     return all;
	 }
	 
	 
	 //通過ID刪除一條TableCallRecord
	 public void delete(int id){
		 
		 try {
			 iptableDao.delete(iptableDao.queryForId(id));
		} catch (SQLException e) {
			e.printStackTrace();
		}
	 }
	 
	 //刪除所有記錄
     public void deleteAll(){
	     try {
	    	 iptableDao.delete(queryAll());
	    } catch (SQLException e) {
		e.printStackTrace();
	}
	 }
	 
	 
	 public void update(TableIptable iptable){
		 try {
			iptableDao.update(iptable);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	 }
	 
	  
}


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