(转)Android中使用ormlite实现持久化(一)--HelloOrmLite

Android中内置了sqlite,但是常用的开发语言java是面向对象的,而数据库是关系型的,二者之间的转化每次都很麻烦(主 要是我对sql语言不熟悉)。而Java Web开发中有很多orm框架,但是想直接放到Android上用有些麻烦。尝试了一下找Android的orm框架,说实话还有好几个。

  

实现考虑的是:androrm  
说实话,这个我实在没有弄懂,一共两个包。  
一个是依赖包:Apache Commons - Lang (2.6)  
另外一个就是主包:androrm.jar   不管怎么下载的都不能使用...  
  
然后有考虑了一下db4o  
官网上的介绍说是已经支持Android了,但是我一是觉得包有点大,而是觉得速度有点慢  
  
最后看到的就是ormlite  
官网:    http://ormlite.com/  
一共两个包:一个是ormlite-core-4.24.jar,另一个是ormlite-android-4.24.jar   
从以下网址可以下载到:     http://ormlite.com/releases/  
        
下面按照惯例来个Hello world   
新建Android项目:HelloOrmLite   

Android中使用ormlite实现持久化(一)--HelloOrmLite

     
添加文件夹:libs,将所需的两个包复制到其中。添加引用   

Android中使用ormlite实现持久化(一)--HelloOrmLite

     新建一个model:Hello.java    
         
 1 package cn.sdx.model; 
 2 
 3 import com.j256.ormlite.field.DatabaseField; 
 4 
 5 public class Hello { 
 6 @DatabaseField(generatedId = true) 
 7 int id; 
 8 @DatabaseField 
 9 String word; 
10 
11 public Hello() { 
12 } 
13 
14 @Override 
15 public String toString() { 
16   StringBuilder sb = new StringBuilder(); 
17   sb.append("id=").append(id); 
18   sb.append(" ,word=").append(word); 
19   return sb.toString(); 
20 } 
21 
22 } 

 

  
 
@DatabaseField是声明id为数据库字段,generatedId =true声明id为自增长    
     然后重写了toString()    
          
再添加一个DataHelper.java   
 1 package cn.sdx.utils; 
 2 
 3 import java.sql.SQLException; 
 4 
 5 import android.content.Context; 
 6 import android.database.sqlite.SQLiteDatabase; 
 7 import android.util.Log; 
 8 
 9 
10 import cn.sdx.model.Hello; 
11 
12 import com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper; 
13 import com.j256.ormlite.dao.Dao; 
14 import com.j256.ormlite.support.ConnectionSource; 
15 import com.j256.ormlite.table.TableUtils; 
16 
17 public class DataHelper extends OrmLiteSqliteOpenHelper { 
18 
19 private static final String DATABASE_NAME = "HelloOrmlite.db"; 
20 private static final int DATABASE_VERSION = 1; 
21 private Dao
22       
23       
24       
25       
26       <hello, integer="">
27        
28        
29        
30        
31         helloDao = null; 
32 
33 public DataHelper(Context context) { 
34   super(context, DATABASE_NAME, null, DATABASE_VERSION); 
35 } 
36 
37 @Override 
38 public void onCreate(SQLiteDatabase db, ConnectionSource connectionSource) { 
39   try { 
40    TableUtils.createTable(connectionSource, Hello.class); 
41   } catch (SQLException e) { 
42    Log.e(DataHelper.class.getName(), "创建数据库失败", e); 
43    e.printStackTrace(); 
44   } 
45 } 
46 
47 @Override 
48 public void onUpgrade(SQLiteDatabase db, ConnectionSource connectionSource, int arg2, 
49    int arg3) { 
50   try { 
51    TableUtils.dropTable(connectionSource, Hello.class, true); 
52    onCreate(db, connectionSource); 
53   } catch (SQLException e) { 
54    Log.e(DataHelper.class.getName(), "更新数据库失败", e); 
55    e.printStackTrace(); 
56   } 
57 } 
58 
59 @Override 
60 public void close() { 
61   super.close(); 
62   helloDao = null; 
63 } 
64 
65 public Dao
66        
67        
68        
69        
70        <hello, integer="">
71         
72         
73         
74         
75          getHelloDataDao() throws SQLException { 
76   if (helloDao == null) { 
77    helloDao = getDao(Hello.class); 
78   } 
79   return helloDao; 
80 } 
81 } 
82        
83        
84        
85        
86        </hello,>
87       
88       
89       
90       
91       </hello,>

 

 
在布局文件中添加一个TextView    
     HelloOrmliteActivity.java中添加对数据库的操作    
     
代码如下
 1 package cn.sdx; 
 2 
 3 import java.sql.SQLException; 
 4 import java.util.List; 
 5 
 6 import com.j256.ormlite.android.apptools.OrmLiteBaseActivity; 
 7 import com.j256.ormlite.dao.Dao; 
 8 
 9 import android.os.Bundle; 
10 import android.widget.TextView; 
11 import cn.sdx.model.Hello; 
12 import cn.sdx.utils.DataHelper; 
13 
14 public class HelloOrmliteActivity extends OrmLiteBaseActivity
15     
16     
17     
18     
19     <datahelper>
20      
21      
22      
23      
24       { 
25 /** Called when the activity is first created. */ 
26 @Override 
27 public void onCreate(Bundle savedInstanceState) { 
28   super.onCreate(savedInstanceState); 
29   setContentView(R.layout.main); 
30   TextView tv = (TextView) this.findViewById(R.id.output); 
31   try { 
32    Dao
33      
34      
35      
36      
37      <hello, integer="">
38       
39       
40       
41       
42        helloDao = getHelper().getHelloDataDao(); 
43    // 添加数据 
44    for (int i = 0; i < 2; i++) { 
45     Hello hello = new Hello("Hello" + i); 
46     helloDao.create(hello); 
47    } 
48    tv.setText(tv.getText() + "\n" + "添加数据完成"); 
49    // 查询添加的数据 
50    List
51       
52       
53       
54       
55       <hello>
56        
57        
58        
59        
60         hellos = helloDao.queryForAll(); 
61    for (Hello h : hellos) { 
62     tv.setText(tv.getText() + "\n" + h.toString()); 
63    } 
64    // 删除数据第一条数据 
65    helloDao.delete(hellos.get(0)); 
66    tv.setText(tv.getText() + "\n" + "删除数据完成"); 
67    // 重新查询数据 
68    hellos = helloDao.queryForAll(); 
69    for (Hello h : hellos) { 
70     tv.setText(tv.getText() + "\n" + h.toString()); 
71    } 
72    // 修改数据 
73    Hello h1 = hellos.get(0); 
74    h1.setWord("这是修改过的数据"); 
75    tv.setText(tv.getText() + "\n" + "修改数据完成"); 
76    helloDao.update(h1); 
77    // 重新查询数据 
78    hellos = helloDao.queryForAll(); 
79    for (Hello h : hellos) { 
80     tv.setText(tv.getText() + "\n" + h.toString()); 
81    } 
82 
83   } catch (SQLException e) { 
84    // TODO Auto-generated catch block 
85    e.printStackTrace(); 
86   } 
87 
88 } 
89 } 
90       
91       
92       
93       
94     
95     
96     
97     </datahelper>

 

以上实现了数据库操作相关的增删改,下面是效果:    
     

Android中使用ormlite实现持久化(一)--HelloOrmLite

      
          
   OrmLite的功能非常强大,Model类的声明中非常重要,外键约束,非空检查等等问题都有相对的处理方法。
posted @ 2014-06-22 15:29  dongweiq  阅读(211)  评论(0编辑  收藏  举报