且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

android orm持久层框架

更新时间:2022-06-03 00:00:16

  1. android数据库开发  
  2.   
  3. Android中内置了sqlite,但是常用的开发语言java是面向对象的,而数据库是关系型的,二者之间的转化每次都很麻烦(主要是我对sql语言不熟悉)。而Java Web开发中有很多orm框架,但是想直接放到Android上用有些麻烦。尝试了一下找Android的orm框架,说实话还有好几个。  
  4.   
  5. 实现考虑的是:androrm  
  6. 官网:http://androrm.the-pixelpla.net/  
  7. 说实话,这个我实在没有弄懂,一共两个包。  
  8. 一个是依赖包:Apache Commons - Lang (2.6)  
  9. 另外一个就是主包:androrm.jar   不管怎么下载的都不能使用...  
  10.   
  11. 然后有考虑了一下db4o  
  12. 官网:http://www.db4o.com/  
  13. 官网上的介绍说是已经支持Android了,但是我一是觉得包有点大,而是觉得速度有点慢  
  14.   
  15. 最后看到的就是ormlite  
  16. 官网:http://ormlite.com/  
  17. 一共两个包:一个是ormlite-core-4.24.jar,另一个是ormlite-android-4.24.jar  
  18. 从以下网址可以下载到:http://ormlite.com/releases/  
  19.    
  20. 下面按照惯例来个Hello world  
  21. 新建Android项目:HelloOrmLite  
  22.   
  23.     
  24. 添加文件夹:libs,将所需的两个包复制到其中。添加引用  
  25.   
  26. 新建一个model:Hello.java  
  27.    
  28.   
  29. package cn.sdx.model;   
  30.   
  31. import com.j256.ormlite.field.DatabaseField;   
  32.   
  33. public class Hello {   
  34. @DatabaseField(generatedId = true)   
  35. int id;   
  36. @DatabaseField   
  37. String word;   
  38.   
  39. public Hello() {   
  40. }   
  41.   
  42. @Override   
  43. public String toString() {   
  44.   StringBuilder sb = new StringBuilder();   
  45.   sb.append("id=").append(id);   
  46.   sb.append(" ,word=").append(word);   
  47.   return sb.toString();   
  48. }   
  49.   
  50. }   
  51.   
  52. @DatabaseField是声明id为数据库字段,generatedId =true声明id为自增长  
  53. 然后重写了toString()  
  54.    
  55. 再添加一个DataHelper.java  
  56.   
  57.    
  58. package cn.sdx.utils;   
  59.   
  60. import java.sql.SQLException;   
  61.   
  62. import android.content.Context;   
  63. import android.database.sqlite.SQLiteDatabase;   
  64. import android.util.Log;   
  65.   
  66.   
  67. import cn.sdx.model.Hello;   
  68.   
  69. import com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper;   
  70. import com.j256.ormlite.dao.Dao;   
  71. import com.j256.ormlite.support.ConnectionSource;   
  72. import com.j256.ormlite.table.TableUtils;   
  73.   
  74. public class DataHelper extends OrmLiteSqliteOpenHelper {   
  75.   
  76. private static final String DATABASE_NAME = "HelloOrmlite.db";   
  77. private static final int DATABASE_VERSION = 1;   
  78. private Dao<Hello, Integer> helloDao = null;   
  79.   
  80. public DataHelper(Context context) {   
  81.   super(context, DATABASE_NAME, null, DATABASE_VERSION);   
  82. }   
  83.   
  84. @Override   
  85. public void onCreate(SQLiteDatabase db, ConnectionSource connectionSource) {   
  86.   try {   
  87.    TableUtils.createTable(connectionSource, Hello.class);   
  88.   } catch (SQLException e) {   
  89.    Log.e(DataHelper.class.getName(), "创建数据库失败", e);   
  90.    e.printStackTrace();   
  91.   }   
  92. }   
  93.   
  94. @Override   
  95. public void onUpgrade(SQLiteDatabase db, ConnectionSource connectionSource, int arg2,   
  96.    int arg3) {   
  97.   try {   
  98.    TableUtils.dropTable(connectionSource, Hello.classtrue);   
  99.    onCreate(db, connectionSource);   
  100.   } catch (SQLException e) {   
  101.    Log.e(DataHelper.class.getName(), "更新数据库失败", e);   
  102.    e.printStackTrace();   
  103.   }   
  104. }   
  105.   
  106. @Override   
  107. public void close() {   
  108.   super.close();   
  109.   helloDao = null;   
  110. }   
  111.   
  112. public Dao<Hello, Integer> getHelloDataDao() throws SQLException {   
  113.   if (helloDao == null) {   
  114.    helloDao = getDao(Hello.class);   
  115.   }   
  116.   return helloDao;   
  117. }   
  118. }   
  119.   
  120.    
  121. 在布局文件中添加一个TextView  
  122. HelloOrmliteActivity.java中添加对数据库的操作  
  123.    
  124. 代码如下:  
  125.    
  126.   
  127. package cn.sdx;   
  128.   
  129. import java.sql.SQLException;   
  130. import java.util.List;   
  131.   
  132. import com.j256.ormlite.android.apptools.OrmLiteBaseActivity;   
  133. import com.j256.ormlite.dao.Dao;   
  134.   
  135. import android.os.Bundle;   
  136. import android.widget.TextView;   
  137. import cn.sdx.model.Hello;   
  138. import cn.sdx.utils.DataHelper;   
  139.   
  140. public class HelloOrmliteActivity extends OrmLiteBaseActivity<DataHelper> {   
  141. /** Called when the activity is first created. */   
  142. @Override   
  143. public void onCreate(Bundle savedInstanceState) {   
  144.   super.onCreate(savedInstanceState);   
  145.   setContentView(R.layout.main);   
  146.   TextView tv = (TextView) this.findViewById(R.id.output);   
  147.   try {   
  148.    Dao<Hello, Integer> helloDao = getHelper().getHelloDataDao();   
  149.    // 添加数据   
  150.    for (int i = 0; i < 2; i++) {   
  151.     Hello hello = new Hello("Hello" + i);   
  152.     helloDao.create(hello);   
  153.    }   
  154.    tv.setText(tv.getText() + "\n" + "添加数据完成");   
  155.    // 查询添加的数据   
  156.    List<Hello> hellos = helloDao.queryForAll();   
  157.    for (Hello h : hellos) {   
  158.     tv.setText(tv.getText() + "\n" + h.toString());   
  159.    }   
  160.    // 删除数据第一条数据   
  161.    helloDao.delete(hellos.get(0));   
  162.    tv.setText(tv.getText() + "\n" + "删除数据完成");   
  163.    // 重新查询数据   
  164.    hellos = helloDao.queryForAll();   
  165.    for (Hello h : hellos) {   
  166.     tv.setText(tv.getText() + "\n" + h.toString());   
  167.    }   
  168.    // 修改数据   
  169.    Hello h1 = hellos.get(0);   
  170.    h1.setWord("这是修改过的数据");   
  171.    tv.setText(tv.getText() + "\n" + "修改数据完成");   
  172.    helloDao.update(h1);   
  173.    // 重新查询数据   
  174.    hellos = helloDao.queryForAll();   
  175.    for (Hello h : hellos) {   
  176.     tv.setText(tv.getText() + "\n" + h.toString());   
  177.    }   
  178.   
  179.   } catch (SQLException e) {   
  180.    // TODO Auto-generated catch block   
  181.    e.printStackTrace();   
  182.   }   
  183.   
  184. }   
  185. }   
  186.   
  187.    
  188.   
  189. 以上实现了数据库操作相关的增删改,下面是效果:  
  190.    
  191.   
  192.     
  193.    
  194.    OrmLite的功能非常强大,Model类的声明中非常重要,外键约束,非空检查等等问题都有相对的处理方法。  
  195.    


原址:http://www.cnblogs.com/htynkn/archive/2011/10/30/android_ormlite_1.html