当前位置: 首页 > news >正文

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

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   

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类的声明中非常重要,外键约束,非空检查等等问题都有相对的处理方法。

相关文章:

  • 华致酒行登陆A股 启幕酒业流通“铂金时代”
  • 【原创】MySQL新旧版本ORDER BY 处理方法
  • HBase笔记6 过滤器
  • Javascript Date原型方法
  • ECMASCript 2019可能会有哪些特性?
  • 625某电商网站数据库宕机故障解决实录(下)
  • JSP 开发环境搭建
  • SpringBoot三种启动方式
  • Python--day39--进程池的回调函数callback
  • IT人,给你一片天,你真的敢要么
  • JAVA编程技巧之如何实现HTTP的断点续传(原理篇)
  • VMware虚拟机提速10招
  • golang []byte转json和json转[]byte
  • C语言近程型(near)和远程型(far)的区别是什么?
  • 机器学习PAI全新功效——实时新闻热点Online Learning实践
  • hexo+github搭建个人博客
  • Angular Elements 及其运作原理
  • Docker下部署自己的LNMP工作环境
  • egg(89)--egg之redis的发布和订阅
  • JDK 6和JDK 7中的substring()方法
  • python_bomb----数据类型总结
  • underscore源码剖析之整体架构
  • 翻译:Hystrix - How To Use
  • 计算机在识别图像时“看到”了什么?
  • 来,膜拜下android roadmap,强大的执行力
  • 我有几个粽子,和一个故事
  • shell使用lftp连接ftp和sftp,并可以指定私钥
  • # 手柄编程_北通阿修罗3动手评:一款兼具功能、操控性的电竞手柄
  • #FPGA(基础知识)
  • #Linux(Source Insight安装及工程建立)
  • #快捷键# 大学四年我常用的软件快捷键大全,教你成为电脑高手!!
  • #每日一题合集#牛客JZ23-JZ33
  • $.ajax()方法详解
  • (2.2w字)前端单元测试之Jest详解篇
  • (C++)栈的链式存储结构(出栈、入栈、判空、遍历、销毁)(数据结构与算法)
  • (规划)24届春招和25届暑假实习路线准备规划
  • (没学懂,待填坑)【动态规划】数位动态规划
  • (一)基于IDEA的JAVA基础1
  • (译) 函数式 JS #1:简介
  • ***微信公众号支付+微信H5支付+微信扫码支付+小程序支付+APP微信支付解决方案总结...
  • .halo勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .MyFile@waifu.club.wis.mkp勒索病毒数据怎么处理|数据解密恢复
  • .NET MVC第五章、模型绑定获取表单数据
  • .net 逐行读取大文本文件_如何使用 Java 灵活读取 Excel 内容 ?
  • [ACTF2020 新生赛]Include
  • [bzoj1324]Exca王者之剑_最小割
  • [Editor]Unity Editor类常用方法
  • [GN] Vue3快速上手1
  • [HeadFrist-HTMLCSS学习笔记][第一章Web语言:开始了解HTML]
  • [IE编程] IE8的SDK 下载
  • [Java性能剖析]Sun JDK基本性能剖析工具介绍
  • [NodeJS]NodeJS基于WebSocket的多用户点对点即时通讯聊天
  • [NOI2005]月下柠檬树[计算几何(simpson)]
  • [PyTorch][chapter 63][强化学习-QLearning]
  • [pytorch]手动构建一个神经网络并且训练