android對象關係映射架構ormlite學習

來源:互聯網
上載者:User

總感覺用原始的SQLLiteHelper操作資料庫有點麻煩,上網找了些android資料庫orm架構,對比了一下,現在使用ormlite的人貌似挺多的,在網上找了ormlite官方文檔,根據官方文檔,今天寫了個demo,主要是使用者註冊,使用者資訊查看以及刪除,運行效果以前也用過一個同樣的orm架構Afinal,但是感覺Afinal沒有ormlite之強大。


<喎?http://www.bkjia.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+T3JtbGl0ZbnZzfijumh0dHA6Ly9vcm1saXRlLmNvbS8gICAgIL+qt6LOxLW1z8LU2KOocGRmo6mhowogtavKx8rH06LOxM7EtbXFtqOssrvSqtK7v7S1vcrH06LOxLXEvs26psXCwcujrMbkyrXA78PmtaW0yrHIvc+88rWlo6zE3Lm7v7S1w7autcSjrLbgv7S/tNOizsTOxLW1u7nKx82m09Cw79b6tcShozwvcD4KPHA+PC9wPgo8cD7Su6O60qrKudPDb3JtbGl0ZbrcvPK1paOs1rvQ6NKqz8LU2M/g06a1xMG9uPZqYXKw/KOoxL/HsNfu0MK1xGphcrD8b3JtbGl0ZS1hbmRyb2lkLTQuNDguamFyo6xvcm1saXRlLWNvcmUtNC40OC5qYXLPwtTYo6myorW8yOu5pLPMvLS/yaGjPC9wPgo8cD48L3A+CjxwPjwvcD4KPHA+tv6jurS0vajKtczlwOA8cHJlIGNsYXNzPQ=="brush:java;">@DatabaseTable(tableName = "tb_user")//如果沒有特別指出tableName = "tb_user",那麼預設情況將類名作為表名//這裡也可以使用註解@Entity,因為ORMLite既支援它自己的註解(@DatabaseTable和 @DatabaseField)也支援很多來自javax.persistence包中標準的註解。//你可以使用來自javax.persistence包的更多的標準JPA註解。public class User {//使用者編號/** * id:這個欄位是否為主鍵,預設為false * generatedId:欄位是否自動增加。預設為false。 * 注意:id和generatedId只能指明一個,否則會報錯的 *///可以用javax.persistence註解: @Id,@Column@DatabaseField(generatedId=true)private int userId;//使用者名稱@DatabaseFieldprivate String userName;//密碼@DatabaseFieldprivate String password;public User() {//必須提供無參建構函式,這樣查詢的時候可以返回查詢出來的對象}public User( int userId,String userName, String password) {this.userId = userId;this.userName = userName;this.password = password;}public int getUserId() {return userId;}public void setUserId(int userId) {this.userId = userId;}public String getUserName() {return userName;}public void setUserName(String userName) {this.userName = userName;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}}

三:建立SQLLiteOpenHelper,在這裡有兩個比較重要的類OrmLiteSqliteOpenHelper(當你的應用被載入時建立和更新資料庫以及為其他的類提供DAO類,必須實現onCreate(SQLiteDatabasesqliteDatabase, ConnectionSource

connectionSource) and onUpgrade(SQLiteDatabasedatabase, ConnectionSource

connectionSource, intoldVersion, int newVersion).這兩個類),RuntimeExceptionDao(預設情況下,大多數的dao方法都會拋出SQLException,因為SQLException是大部分jdbc以及其他的sql調用時拋出的預設異常。 但是在android平台上,尤其是,絕大部分的異常繼承了RuntimeException,添加了一個RuntimeExceptionDao來封裝所有在運行時因調用底層dao方法所拋出的運行時異常。)

public class DatabaseHelper extends OrmLiteSqliteOpenHelper{    // 資料庫名稱  private static final String DATABASE_NAME = "helloAndroid.db";     // 資料庫version  private static final int DATABASE_VERSION = 1;/** * 包含兩個泛型: * 第一個泛型表DAO操作的類 * 第二個表示操作類的主鍵類型 */private Dao userDao = null;private RuntimeExceptionDao simpleRuntimeDao = null;    public DatabaseHelper(Context context) {super(context, DATABASE_NAME, null, DATABASE_VERSION);}@Overridepublic void onCreate(SQLiteDatabase sqliteDatabase, ConnectionSource connectionSource) {try {Log.i(DatabaseHelper.class.getName(), "onCreate");TableUtils.createTable(connectionSource, User.class);} catch (SQLException e) {Log.e(DatabaseHelper.class.getName(), "Can't create database", e);throw new RuntimeException(e);}}/** * 插入一條資料 */public void insert(User user){RuntimeExceptionDao dao = getSimpleDataDao();//通過實體物件建立在資料庫中建立一條資料,成功返回1,說明插入了一條資料Log.i("test", "dao = " + dao+"  user= "+user);int returnValue = dao.create(user);Log.i("test", "插入資料後傳回值:"+returnValue);}/** * 查詢所有的使用者資訊 * @return */public List findAllUser(){RuntimeExceptionDao dao = getSimpleDataDao();return dao.queryForAll();}/** * 刪除第一條使用者資訊 */public void deleteById(){RuntimeExceptionDao dao = getSimpleDataDao();List list = dao.queryForAll();//刪除成功返回1(刪除了一條資料)if(list.size()>0){int returnValue = dao.deleteById(list.get(0).getUserId());Log.i("test", "刪除一條資料後傳回值:"+returnValue);}}/** * 大量刪除使用者資訊 */public void deleteByIds(){RuntimeExceptionDao dao = getSimpleDataDao();List list = dao.queryForAll();List ids = new ArrayList();if(list.size()>0){for(User u:list){ids.add(u.getUserId());}//返回刪除的記錄數int returnValue = dao.deleteIds(ids);Log.i("test", "大量刪除後傳回值:"+returnValue);}}public RuntimeExceptionDao getSimpleDataDao() {if (simpleRuntimeDao == null) {simpleRuntimeDao = getRuntimeExceptionDao(User.class);}Log.i("test", "simpleRuntimeDao ======= "+simpleRuntimeDao);return simpleRuntimeDao;}/** * 這個方法在你的應用升級以及它有一個更高的版本號碼時調用。所以需要你調整各種資料來適應新的版本 */@Overridepublic void onUpgrade(SQLiteDatabase sqliteDatabase, ConnectionSource connectionSource, int oldVersion,int newVersion) {Log.i("test", "更新....");try {Log.i(DatabaseHelper.class.getName(), "onUpgrade");//刪掉舊版本的資料TableUtils.dropTable(connectionSource, User.class, true);//建立一個新的版本onCreate(sqliteDatabase, connectionSource);} catch (SQLException e) {Log.e(DatabaseHelper.class.getName(), "Can't drop databases", e);throw new RuntimeException(e);}}public Dao getDao() throws SQLException {if (userDao == null) {userDao = getDao(User.class);}return userDao;}}

四:接下來就是Activity了。

MainActivity:當程式運行便進入該類,主要是顯示頁面的那幾個按鈕以及顯示查詢出來的使用者資訊。

public class MainActivity extends Activity {Button button1;//註冊按鈕Button button2;//顯示按鈕Button button3;//刪除按鈕Button button4;//大量刪除按鈕TextView textView;//用來顯示查詢到的使用者資訊DatabaseHelper helper = new DatabaseHelper(this);@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);button1 = (Button)this.findViewById(R.id.main_btn_regist);button2 = (Button)this.findViewById(R.id.main_btn_show);button3 = (Button)this.findViewById(R.id.main_btn_delete);button4 = (Button)this.findViewById(R.id.main_btn_deleteAll);textView = (TextView)this.findViewById(R.id.main_show_user);//點擊註冊按鈕跳轉到註冊頁面button1.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {Intent intent = new Intent();intent.setClass(MainActivity.this, RegistActivity.class);startActivity(intent);}});//點擊“顯示”按鈕跳轉到使用者資訊顯示頁面並將註冊使用者資訊顯示出來button2.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {List userList = helper.findAllUser();String str = "";if(userList.size()>0){//將查詢到的使用者資訊顯示出來for(User user:userList){str+="使用者"+user.getUserId()+":"+user.getUserName()+"    密碼:"+user.getPassword();}textView.setText(str);}else{textView.setText("親!還沒註冊吧!");}}});//刪除一條記錄button3.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {helper.deleteById();}});//大量刪除button4.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {helper.deleteByIds();}});}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}}

對應的布局檔案:main.xml

                                    

RegistActivity:使用者註冊類

/** * 使用者註冊 * @author leox * */public class RegistActivity  extends Activity {EditText userNameEdit;//使用者名稱編輯框EditText passwordEdit;//密碼編輯框Button reButton;//註冊按鈕DatabaseHelper helper = new DatabaseHelper(this);@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);userNameEdit = (EditText)this.findViewById(R.id.et_username);passwordEdit = (EditText)this.findViewById(R.id.et_password);reButton = (Button)this.findViewById(R.id.btn_regist);reButton.setOnClickListener(new myClickListener());}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {getMenuInflater().inflate(R.menu.main, menu);return true;}class myClickListener implements OnClickListener{@Overridepublic void onClick(View v) {//使用者名稱String userName = userNameEdit.getText().toString();//密碼String password = passwordEdit.getText().toString();User user = new User();user.setUserName(userName);user.setPassword(password);//插入註冊使用者資訊helper.insert(user);Intent intent = new Intent();intent.setClass(RegistActivity.this, MainActivity.class);startActivity(intent);}}}

對應的布局檔案:activity_main.xml

                                                                    








聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.