標籤:耦合 values ring hash object img 結構 har 建表
ORMlite是類似hibernate的對象映射架構,主要面向java語言,同時,是時下最流行的android面向資料庫的的編程工具。
官方網站:http://ormlite.com/
如果需要開發android,只需要下載core和android兩個jar包:
ORMlite的使用
1,建立映射關係
Ormlite與資料庫的映射關係式通過注釋來說明的。
注釋分為對於表的和對於單個列的:@DatabaseTable ,注釋表的, @DatabaseField 注釋單個列的。
· 首先注釋:table,@
DatabaseTable 如果預設為類名的話,後面不需要添加類名注釋。
· 然後:確定需要的欄位,在欄位上面添加註釋:@DatabaseField 如果對欄位有特別的要求,那麼添加以下相關的注釋,例如id。
@DatabaseTable(tableName="t_message")public class Message { @DatabaseField(generatedId=true) private int id; @DatabaseField(columnName="tou1") private String tou1; @DatabaseField(columnName="userName") private String userName; @DatabaseField(columnName="lastMessage") private String lastMessage; @DatabaseField(columnName="datetime") private String datetime; public String getTou1() { return tou1; } public void setTou1(String tou1) { this.tou1 = tou1; }
2,建立資料庫和基本的工具
在Android的開發中,google原版封裝了一個SqliteOpenHelper,供開發人員調用,在OrmLite中,對原版的工具進行了加強,提供一個繼承自SqliteOpenHelper的OrmLiteSqliteOpenHelper工具。
像android一樣,我們繼承這個工具類。
public class DatabaseHelper extends OrmLiteSqliteOpenHelper { private static final String DB_NAME = "mydata.db"; // 資料庫名稱 private static final int version = 2; // 資料庫版本 //定義每一張表的成員變數,其中一個功能:關閉helper,所有DAO對象清理 private Dao<Message, Integer> messageDao; public Dao<Message, Integer> getMessageDao() { if (messageDao==null){ try { messageDao = getDao(Message.class); } catch (SQLException e) { e.printStackTrace(); } } return messageDao; } public DatabaseHelper(Context context) { super(context, DB_NAME, null, version); } /* * 1.此方法,不會自定執行,因為它不是回呼函數 * 2.最好也不要自己調用,因為只應該執行1次 */ @Override public void onCreate(SQLiteDatabase arg0, ConnectionSource arg1) { // TODO Auto-generated method stub } /* * 此方法,不會自定執行,因為它不是回呼函數 */ @Override public void onUpgrade(SQLiteDatabase arg0, ConnectionSource arg1, int arg2, int arg3) { // TODO Auto-generated method stub }
MyDatabaseOpenHelper類
public class MyDatabaseOpenHelper extends SQLiteOpenHelper { private static final String DB_NAME = "mydata.db"; // 資料庫名稱 private static final int version = 2; // 資料庫版本 public MyDatabaseOpenHelper(Context context) { super(context, DB_NAME, null, version); } @Override public void onCreate(SQLiteDatabase db) { // TODO Auto-generated method stub // 編寫【從0開始到最新狀態】建表語句 Log.i("hi", "沒有資料庫,建立資料庫,建立v2.0成功"); String sql_message = "create table t_message (id int primary key,tou1 varchar(50),userName varchar(50),lastMessage varchar(50),datetime varchar(50))"; String sql_init_1 = "insert into t_message values (1,‘abc‘,‘abc1‘,‘abcd1‘,‘hi1‘)"; String sql_init_2 = "insert into t_message values (2,‘abc‘,‘abc2‘,‘abcd2‘,‘hi1‘)"; String sql_init_3 = "insert into t_message values (3,‘abc‘,‘abc2‘,‘abcd2‘,‘hi1‘)"; db.execSQL(sql_message); db.execSQL(sql_init_1); db.execSQL(sql_init_2); db.execSQL(sql_init_3); }
MainActivity類,listview顯示資料
public class MainActivity extends Activity { private SimpleAdapter sa; private ListView lv; private List<Message> messageList = new ArrayList<Message>(); private List<Map<String,Object> > messageList2 = new ArrayList<Map<String,Object> >(); private List<Message> messageList3;//用於ORMLite 的示範 private DatabaseHelper db_helper; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.weixin); //此3行代碼用於建立表結構,以及初始化資料 MyDatabaseOpenHelper helper = new MyDatabaseOpenHelper(MainActivity.this); SQLiteDatabase db = helper.getWritableDatabase(); db.close(); lv = (ListView)findViewById(R.id.listView1); sa = new SimpleAdapter(this, messageList2,//data 不僅僅是資料,而是一個與介面耦合的資料混合體 R.layout.listview_item_layout, new String[] {"tou","userName","lastMessage","datetime"},//from 從來來 new int[] {R.id.imageView1,R.id.tv_userName,R.id.tv_lastMessage,R.id.tv_datetime}//to 到那裡去 ); lv.setAdapter(sa); lv.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Map<String,Object> item = messageList2.get(position); item.put("userName", "趙本山"+position); sa.notifyDataSetChanged(); //Toast.makeText(MainActivity.this, (String)item.get("userName"), Toast.LENGTH_SHORT).show(); } }); //UI呈現在眼前 @Override protected void onResume(){ Log.i("ok", "onResume,介面出現了"); //使用ORMLite db_helper = new DatabaseHelper(this); Dao<Message, Integer> message_dao = db_helper.getMessageDao(); try { messageList3 = message_dao.queryForAll(); //Log.i("ormlite", "記錄條數:"+messageList3.size()); String t = "記錄條數:"+messageList3.size(); Toast.makeText(this, t, Toast.LENGTH_LONG).show(); } catch (SQLException e) { String t = "記出錯:"+e.getMessage(); Toast.makeText(this, t, Toast.LENGTH_LONG).show(); } for (int i = 0; i < messageList3.size(); i++) { //定義一個介面與資料的混合體,一個item代表一行記錄 Map<String,Object> item = new HashMap<String,Object>(); //一行記錄,包含多個控制項 item.put("tou", R.drawable.tou1); item.put("userName", messageList3.get(i).getUserName()+i); item.put("lastMessage", messageList3.get(i).getLastMessage()); item.put("datetime",messageList3.get(i).getDatetime()); messageList2.add(item); } super.onResume(); }
註:ORMLite還提供了一些基類ORMLiteBaseActivity,ORMLiteBaseService之類的,便於資料庫操作的,
android開發--ormlite