標籤:
Android中內建了sqlite,但是常用的開發語言java是物件導向的,而資料庫是關係型的,二者之間的轉化每次都很麻煩。(作為程式員,應該學會偷懶)而Java Web開發中有很多orm架構(其實我沒學過java web),但是想直接放到Android上用有些麻煩。嘗試了一下找Android的orm架構,於是便發現了ORMLite。
首先到官方網站瞭解一下ormlite:http://ormlite.com/。
然後下載兩個jar包,一個是ormlite-core-4.48.jar,另一個是ormlite-android-4.48.jar。(當然,也可以下載對應文檔)為:http://ormlite.com/releases/。
接著做一個簡單的操作實現吧(實現對資料庫的創表以及增刪查改)。
建立一個工程名為“zhj_ORMLite”,包名為“com.topcsa.zhj_ormlite”,選擇SDK版本為14,將ormlite-core-4.48.jar和ormlite-android-4.48.jar添加帶項目當中。
建立一個實體類Person,這個類就是需要建立的表。
代碼中的@DatabaseTable 指定類對應的表明,@DatabaseField 對應的欄位名
package com.topcsa.zhj_ormlite;import com.j256.ormlite.field.DatabaseField;import com.j256.ormlite.table.DatabaseTable;@DatabaseTable(tableName = "tb_Person")public class Person { public Person() { } public Person(String name, int age) { super(); this.name = name; this.age = age; } @DatabaseField(generatedId = true)//generatedId 表示id為主鍵且自動產生 private int id; @DatabaseField(columnName = "name") private String name; @DatabaseField(columnName = "age") private int age; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; }}
建立一個database helper類,繼承OrmLiteSqliteOpenHelper 實現 onCreate 和 onUpgrade ,這個類類似於 android 的SQLiteOpenHelper方法 ,大家應該知道這個類的作用了,建立刪除資料庫應該使用TableUtils工具類的方法。
建立表,我們直接使用ormlite提供的TableUtils.createTable(connectionSource, Person.class);進行建立。
更新表,使用ormlite提供的TableUtils.dropTable(connectionSource, Person.class, true);進行刪除操作。
package com.topcsa.zhj_ormlite;import android.content.Context;import android.database.sqlite.SQLiteDatabase;import android.util.Log;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 DBhelper extends OrmLiteSqliteOpenHelper { private static final String TABLE_NAME = "ormlite.db"; private static DBhelper instance; public DBhelper(Context context) { super(context, TABLE_NAME, null, 1); // TODO Auto-generated constructor stub } /** * 單例擷取該Helper * * @param context * @return */ public static synchronized DBhelper getHelper(Context context) { if (instance == null) { synchronized (DBhelper.class) { if (instance == null) instance = new DBhelper(context); } } return instance; } @Override public void onCreate(SQLiteDatabase database, ConnectionSource connectionSource) { try { TableUtils.createTable(connectionSource, Person.class); Log.d("DBhelper", "建立表成功"); } catch (java.sql.SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } @Override public void onUpgrade(SQLiteDatabase database, ConnectionSource connectionSource, int oldVersion, int newVersion) { try { TableUtils.dropTable(connectionSource, Person.class, true); } catch (java.sql.SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } onCreate(database, connectionSource); }}
建立DAO類,建立PersonDao.java。
package com.topcsa.zhj_ormlite;import java.sql.SQLException;import java.util.List;import android.content.Context;import android.util.Log;import com.j256.ormlite.dao.Dao;public class PersonDao { Context con; private DBhelper helper; private Dao<Person, Integer> personDao; // 建構函式 public PersonDao(Context con) { helper = DBhelper.getHelper(con); this.con = con; } // 每個表一般我們都會單獨寫個Dao用於操作 public Dao<Person, Integer> getPersonDao() throws java.sql.SQLException { if (personDao == null) { personDao = helper.getDao(Person.class); } return personDao; } // 根據ID查詢 public Person selectPerson(int i) { try { Person p = getPersonDao().queryForId(i); Log.d("TAG", "查詢ID為" + i + "的人為:" + p.getName()); return p; } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } // 添加某人 public void addPerson(Person p) { try { getPersonDao().create(p); Log.d("TAG", "添加:" + p.getName()); } catch (SQLException e) { } } // 刪除某人 public void deletePerson(Person p) { try { Log.d("TAG", "刪除ID為" + p.getId() + "的人:" + p.getName()); getPersonDao().deleteById(p.getId()); } catch (SQLException e) { } } // 更新某人 public void updatePerson(Person p, String name) { try { Log.d("TAG", "修改資料前姓名為:" + p.getName()); p.setName(name); getPersonDao().update(p); Log.d("TAG", "修改資料后姓名為:" + p.getName()); } catch (SQLException e) { } } // 查詢所有人 public List<Person> showPersonAll() { try { List<Person> list = getPersonDao().queryForAll(); Log.d("TAG", "查詢所有資料條數:" + list.size()); for (int i = 0; i < list.size(); i++) { Log.d("TAG", "單條資料姓名:" + list.get(i).getName()); } return list; } catch (SQLException e) { } return null; }}
最後,在Activity中具體實現:
package com.topcsa.zhj_ormlite;import android.app.Activity;import android.os.Bundle;public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Person p = new Person("趙江", 21); PersonDao pdao = new PersonDao(this); try { pdao.addPerson(p); p = new Person("黃秋", 21); pdao.addPerson(p); p = new Person("何權利", 21); pdao.addPerson(p); p = new Person("任貴權", 21); pdao.addPerson(p); p = new Person("塗俊", 21); pdao.addPerson(p); pdao.showPersonAll(); System.out .println("-------------------------------天王蓋地虎------------------------------"); Person p1 = pdao.selectPerson(2); pdao.updatePerson(p1, "~~~~蘇蘇~~~~"); p = pdao.selectPerson(1); pdao.deletePerson(p); pdao.showPersonAll(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } }}
運行結果如下:
Android之ORMLite實現資料持久化的簡單使用