Android ORMLite 框架的入門用法


        之前在項目中使用數據庫存儲數據比較少,一般用SharedPreferences就夠了,簡單的存儲一些名稱和密碼,個人配置信息,但是在當存儲的信息量大的時候肯定要用到數據庫的,爲了提高我們的開發效率。第一次在項目中看到使用 ORMLite 框架來定義存儲的數據感覺比較簡單,不過要注意一些細節。

    下面簡單寫一下使用ORMLite 框架的用法

     

   1、下載 ORMLite Jar

        首先去ORMLite官網下載jar包,對於Android爲:ormlite-android-4.48.jar 和 ormlite-core-4.48.jar ;

 

   2、寫類繼承OrmLiteSqliteOpenHelper

              需要實現兩個方法:

             1、onCreate(SQLiteDatabase database,ConnectionSource connectionSource)

                   創建表,我們直接使用ormlite提供的TableUtils.createTable(connectionSource, User.class);進行創建~

            2、onUpgrade(SQLiteDatabase database, ConnectionSource connectionSource, int oldVersion, int newVersion)

                 更新表,使用ormlite提供的TableUtils.dropTable(connectionSource, User.class, true);進行刪除操作~

                 刪除完成後,別忘了,創建操作:onCreate(database, connectionSource);

/*    涼菇涼  */
public class ToolDatabase  extends OrmLiteSqliteOpenHelper {
	private static String databaseName;
	private static int databaseVersion;
	private static List<Class>table=new ArrayList<Class>();
	private static ToolDatabase dbHelper;
	/**
	 * 必須對外提供public構造函數(實例化不用該方法)
	 * @param context
	 */
	public ToolDatabase(Context context){
		super(context, databaseName, null, databaseVersion);
	}
	
	/**
	 * 實例化對象
	 * @return
	 */
	public static ToolDatabase gainInstance(Context context,String dbName,int version){
		if(dbHelper==null){
				databaseName=dbName;
				databaseVersion=version;
				dbHelper=OpenHelperManager.getHelper
						(context, ToolDatabase.class);
		}
		return dbHelper;
		
	}
	
	/**
	 * 釋放數據庫的連接
	 */
	public void releaseAll(){
		if(dbHelper!=null){
			OpenHelperManager.releaseHelper();
			dbHelper = null;
		}
	}
	
	/**
	 *   配置實體
	 * @param cls
	 */
	public void addEntity(Class cls){
		table.add(cls);
	}
	
	/**
	 * 創建表
	 * @param entity  實體
	 */
	public void createTable(Class entity){
	    try {
			TableUtils.createTableIfNotExists(getConnectionSource(), entity);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	    
	}
	
	
	/**
	 * 刪除表
	 * @param entity 實體
	 */
	public void dropTable(Class entity) {
		try {
			TableUtils.dropTable(getConnectionSource(), entity, true);
		} catch (SQLException e) {
			Log.e(ToolDatabase.class.getName(), "Unable to drop datbases", e);
		}
	}

	
	/**
	 * 創建數據庫
	 */
	@Override
	public void onCreate(SQLiteDatabase arg0, ConnectionSource arg1) {
		
			 try {
				 for(Class entity:table){
				TableUtils.createTableIfNotExists(getConnectionSource(), entity);
				 }
				 } catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		
		
	}
	
	
	/**
	 * 更新SQLite數據庫
	 */
	@Override
	public void onUpgrade(SQLiteDatabase sqliteDatabase,
			ConnectionSource connectionSource, int oldVer, int newVer) {
		try {
			for (Class entity : table) {
				TableUtils.dropTable(connectionSource, entity, true);
			}
			onCreate(sqliteDatabase, connectionSource);
		} catch (SQLException e) {
			Log.e(ToolDatabase.class.getName(),
					"Unable to upgrade database from version " + oldVer
							+ " to new " + newVer, e);
		}
	}
}
   

     3、在mainactivity中使用增刪改的操作

          
public class MainActivity extends Activity  implements OnClickListener{

	private EditText et_username, et_email, et_u_username, et_u_email;
	private Button btn_add, btn_update, btn_first_page, btn_per_page,btn_next_page, btn_end_page;
	private ListView lv_userlist;
	private ToolDatabase dbHelper;
	private User selectItem = null;
	private Dao<User,String>userDao;
	public static final String DB_NAME="zftlive";
	public static final int DB_VERSION=1;
	private UserListAdapter userListAdapter;
	private ArrayList<User>users;
	
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        et_username = (EditText) findViewById(R.id.et_username);
		et_email = (EditText) findViewById(R.id.et_email);
		et_u_username = (EditText) findViewById(R.id.et_u_username);
		et_u_email = (EditText) findViewById(R.id.et_u_email);

		btn_add = (Button) findViewById(R.id.btn_add);
		btn_update = (Button) findViewById(R.id.btn_update);

		btn_first_page = (Button) findViewById(R.id.btn_first_page);
		btn_per_page = (Button) findViewById(R.id.btn_per_page);
		btn_next_page = (Button) findViewById(R.id.btn_next_page);
		btn_end_page = (Button) findViewById(R.id.btn_end_page);
		
		//實例化dbhelper
		dbHelper=ToolDatabase.gainInstance(MainActivity.this, DB_NAME, DB_VERSION);
		dbHelper.createTable(User.class);
		
		try {
			userDao=dbHelper.getDao(User.class);
			lv_userlist = (ListView) findViewById(R.id.lv_userlist);
			users=(ArrayList<User>) userDao.queryForAll();
			//	Log.i("tag", "請求的用戶"+users.size()+users.get(0).getUsername()+users.get(0).getEmail());
				userListAdapter=new UserListAdapter(MainActivity.this, users);
				lv_userlist.setAdapter(userListAdapter);
			
			
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	//	queryUserList();
		
		//點擊添加按鈕的監聽事件
		 btn_add.setOnClickListener(this);
		//點擊保存的按鈕監聽事件
		btn_update.setOnClickListener(this);
		//查詢用戶
	//	queryUserList();
		
    }
    


	@Override
	public void onClick(View v) {
		switch (v.getId()) {
		//添加數據
		case R.id.btn_add:
			 addData();
			break;
			
		case R.id.btn_update:
			//點擊保存的按鈕
			updata();
			break;

		default:
			break;
		}
	}
	
	
	/**
	 * 修改保存後的操作
	 */
	
	
	public void updata(){
		AndroidDatabaseConnection conn=null;
		String userName=et_u_username.getText().toString();
		String email=et_u_email.getText().toString();
		if(userName==null || userName.equals("")||email==null || email.equals("") ){
			Toast.makeText(MainActivity.this , "請選擇修改的項", Toast.LENGTH_SHORT).show();
		    return;
		}
		try {
		if(null!=selectItem){
			conn=new AndroidDatabaseConnection(dbHelper.getWritableDatabase(), true);
			conn.setAutoCommit(false);
			selectItem.setUsername(userName);
			selectItem.setEmail(email);
				userDao.update(selectItem);
				conn.commit(null);
			Toast.makeText(MainActivity.this, "修改成功", Toast.LENGTH_SHORT).show();
		
			//刷新列表
			queryUserList();
			}else{
				Toast.makeText(MainActivity.this, "沒有選擇用戶", Toast.LENGTH_SHORT).show();
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			if(null!=conn){
			
				try {
					conn.rollback(null);
					conn.close();
				} catch (SQLException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				}
			}
		}
		
	}
	
	public static String gainUUID(){
		String strUUID = UUID.randomUUID().toString();
		strUUID = strUUID.replaceAll("-", "").toLowerCase();
		return strUUID;
	}
	
	/**
	 * 添加數據
	 */
	public void addData(){
		AndroidDatabaseConnection conn=null;
		String userName=et_username.getText().toString();
		String email=et_email.getText().toString();
		if(userName==null || userName.equals("")||email==null || email.equals("") ){
			Toast.makeText(MainActivity.this , "請輸入郵箱", Toast.LENGTH_SHORT).show();
		    return;
		}
		
		conn=new AndroidDatabaseConnection(dbHelper.getWritableDatabase(),true);
		conn.setAutoCommit(false);
		User user=new User();
		user.setId(gainUUID());
		user.setUsername(userName);
		user.setEmail(email);
		try {
			userDao.create(user);
			Toast.makeText(MainActivity.this, "添加成功", Toast.LENGTH_SHORT).show();
			queryUserList();
			conn.commit(null);
			//清空添加匡
			et_username.setText("");
			et_email.setText("");
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			try {
			if(null!=conn){
				
					conn.rollback(null);
					conn.close();
			}
				} catch (SQLException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				}
				
			
		}
		
		
		
	}
	
	/**
	 * 查詢用戶
	 */
	private void queryUserList(){
		users.clear();
		try {
			ArrayList<User>newUsers=(ArrayList<User>) userDao.queryForAll();
			for(int i=0;i<newUsers.size();i++){
				User user=newUsers.get(i);
				user.setOrderNo(String.valueOf(i+1));
				users.add(user);
			}
			userListAdapter.notifyDataSetChanged();
			
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		
	}
	
	@Override
	protected void onDestroy() {
		// TODO Auto-generated method stub
		super.onDestroy();
		if(dbHelper!=null){
			dbHelper.releaseAll();
		}
		
	}
	
    public class UserListAdapter extends BasicAdapter<User>{

        TextView tv_order_no;
    	TextView tv_username;
    	TextView tv_email;
    	Button btn_update1;
    	Button btn_del;

	public UserListAdapter(Context context, ArrayList<User> mList) {
			super(context, mList);
		}

		@Override
		protected int getViewId() {
			return R.layout.list_item;
		}

		@Override
		protected void setDate(View view, final User t,
				com.dbdemo.BasicAdapter.ViewHolder viewHolder, final int position) {
			tv_order_no = (TextView) viewHolder.findView(view,R.id.tv_order_no);
			tv_username = (TextView) viewHolder.findView(view,R.id.tv_username);
			tv_email =  (TextView) viewHolder.findView(view,R.id.tv_email);
			btn_update1 =  (Button) viewHolder.findView(view,R.id.btn_update);
			btn_del = (Button) viewHolder.findView(view,R.id.btn_del);
           tv_order_no.setText(t.getOrderNo());
           tv_username.setText(t.getUsername());
           tv_email.setText(t.getEmail());
           selectItem=t;
           //點擊修改按鈕
           btn_update1.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				   selectItem=t;
				   et_u_username.setText(t.getUsername());
					et_u_email.setText(t.getEmail());
			}
		});
           
           //點擊刪除按鈕
           
           btn_del.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				 try { 
					 users.remove(position);
				    userListAdapter.notifyDataSetChanged();
					userDao.delete(selectItem);
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				
				 Toast.makeText(MainActivity.this, "刪除成功", Toast.LENGTH_SHORT).show();
			}
		});
           
		}
		
		
				
		
    }


}

源碼鏈接

  
發佈了37 篇原創文章 · 獲贊 32 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章