Android中使用ormlite實現持久化–HelloOrmLite

來源:互聯網
上載者:User

Android中內建了sqlite,但是常用的開發語言java是物件導向的,而資料庫是關係型的,二者之間的轉化每次都很麻煩(主要是我對sql語言不熟悉)。而Java Web開發中有很多orm架構,但是想直接放到Android上用有些麻煩。嘗試了一下找Android的orm架構,說實話還有好幾個。


實現考慮的是:androrm官網:http://androrm.the-pixelpla.net/說實話,這個我實在沒有弄懂,一共兩個包。一個是依賴包:Apache Commons - Lang (2.6)另外一個就是主包:androrm.jar   不管怎麼下載的都不能使用...
然後有考慮了一下db4o官網:http://www.db4o.com/官網上的介紹說是已經支援Android了,但是我一是覺得包有點大,而是覺得速度有點慢
最後看到的就是ormlite官網:http://ormlite.com/一共兩個包:一個是ormlite-core-4.24.jar,另一個是ormlite-android-4.24.jar從以下網址可以下載到:http://ormlite.com/releases/ 下面按照慣例來個Hello world建立Android項目:HelloOrmLite

  

添加檔案夾:libs,將所需的兩個包複製到其中。添加引用

建立一個model:Hello.java 
package cn.sdx.model; 

import com.j256.ormlite.field.DatabaseField;

public class Hello {
@DatabaseField(generatedId = true)
int id;
@DatabaseField
String word;

public Hello() {
}

@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("id=").append(id);
sb.append(" ,word=").append(word);
return sb.toString();
}

}
@DatabaseField是聲明id為資料庫欄位,generatedId =true聲明id為自增長然後重寫了toString() 再添加一個DataHelper.java
 
package cn.sdx.utils;

import java.sql.SQLException;

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


import cn.sdx.model.Hello;

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 DataHelper extends OrmLiteSqliteOpenHelper {

private static final String DATABASE_NAME = "HelloOrmlite.db";
private static final int DATABASE_VERSION = 1;
private Dao<Hello, Integer> helloDao = null;

public DataHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}

@Override
public void onCreate(SQLiteDatabase db, ConnectionSource connectionSource) {
try {
TableUtils.createTable(connectionSource, Hello.class);
} catch (SQLException e) {
Log.e(DataHelper.class.getName(), "建立資料庫失敗", e);
e.printStackTrace();
}
}

@Override
public void onUpgrade(SQLiteDatabase db, ConnectionSource connectionSource, int arg2,
int arg3) {
try {
TableUtils.dropTable(connectionSource, Hello.class, true);
onCreate(db, connectionSource);
} catch (SQLException e) {
Log.e(DataHelper.class.getName(), "更新資料庫失敗", e);
e.printStackTrace();
}
}

@Override
public void close() {
super.close();
helloDao = null;
}

public Dao<Hello, Integer> getHelloDataDao() throws SQLException {
if (helloDao == null) {
helloDao = getDao(Hello.class);
}
return helloDao;
}
}
 在布局檔案中添加一個TextViewHelloOrmliteActivity.java中添加對資料庫的操作 代碼如下: 
package cn.sdx; 

import java.sql.SQLException;
import java.util.List;

import com.j256.ormlite.android.apptools.OrmLiteBaseActivity;
import com.j256.ormlite.dao.Dao;

import android.os.Bundle;
import android.widget.TextView;
import cn.sdx.model.Hello;
import cn.sdx.utils.DataHelper;

public class HelloOrmliteActivity extends OrmLiteBaseActivity<DataHelper> {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
TextView tv = (TextView) this.findViewById(R.id.output);
try {
Dao<Hello, Integer> helloDao = getHelper().getHelloDataDao();
// 添加資料
for (int i = 0; i < 2; i++) {
Hello hello = new Hello("Hello" + i);
helloDao.create(hello);
}
tv.setText(tv.getText() + "\n" + "添加資料完成");
// 查詢添加的資料
List<Hello> hellos = helloDao.queryForAll();
for (Hello h : hellos) {
tv.setText(tv.getText() + "\n" + h.toString());
}
// 刪除資料第一條資料
helloDao.delete(hellos.get(0));
tv.setText(tv.getText() + "\n" + "刪除資料完成");
// 重新查詢資料
hellos = helloDao.queryForAll();
for (Hello h : hellos) {
tv.setText(tv.getText() + "\n" + h.toString());
}
// 修改資料
Hello h1 = hellos.get(0);
h1.setWord("這是修改過的資料");
tv.setText(tv.getText() + "\n" + "修改資料完成");
helloDao.update(h1);
// 重新查詢資料
hellos = helloDao.queryForAll();
for (Hello h : hellos) {
tv.setText(tv.getText() + "\n" + h.toString());
}

} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}
}

以上實現了資料庫操作相關的增刪改,下面是效果: 

  

 

   OrmLite的功能非常強大,Model類的聲明中非常重要,外鍵約束,非空檢查等等問題都有相對的處理方法。

  
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.