设为首页 收藏本站
查看: 1736|回复: 0

[经验分享] 使用OrmLite持久化SQLite(续)

[复制链接]

尚未签到

发表于 2016-11-30 11:22:59 | 显示全部楼层 |阅读模式
上回说到我们已经建立了实体类Account和Order,下面我们来对它进行一个OrmLite的注解。@DatabaseTable(tableName = "accounts") //不写的话表名默认为类名(小写)accountpublic class Account implements Serializable {@DatabaseField(generatedId=true) //设置为自增长的主键private int aId;@DatabaseField //使用默认,列名与字段名相同private String aName;//一定要有一个无参的构造函数public Account() {super();}.....}  

@DatabaseTable(tableName = "orders") public class Order implements Serializable {@DatabaseField(generatedId=true)private int oid;@DatabaseField private String oName;@DatabaseField(foreign=true) //简单地写一个外键=true就行了 方便大家理解private Account account;......}  接着我们创建一个DataHelper类继承自OrmLiteSqliteOpenHelper(相当于数据库访问层):
public class DataHelper extends OrmLiteSqliteOpenHelper {private static final String DATABASE_NAME = "test.db"; // 数据库名private static final int DATABASE_VERSION = 1; // 数据库版本号,以后如果对实体类进行了修改,想要更新一下数据库的话,改一下版本号就行了@SuppressWarnings("rawtypes")Map<String, Dao> daoMaps = null; // 所有DAO的集合,这不是必须的,你可以采用你的方式@SuppressWarnings("rawtypes")private void initDaoMaps() {daoMaps = new HashMap<String, Dao>();daoMaps.put("accountDao", null);daoMaps.put("orderDao", null);}public DataHelper(Context context) {super(context, DATABASE_NAME, null, DATABASE_VERSION); // 用过SQLite的都知道,我就不解释了initDaoMaps(); // 自定义方法 ,初始化dao的Map.}@Overridepublic void onCreate(SQLiteDatabase db, ConnectionSource connectionSource) {// 数据库创建时自动执行,以后不会再自动执行try {TableUtils.createTable(connectionSource, Account.class); // 创建Account表TableUtils.createTable(connectionSource, Order.class); // 创建Order表Log.i(DataHelper.class.getName(), "创建数据库成功!");} catch (Exception e) {Log.i(DataHelper.class.getName(), "创建数据库失败!", e);e.printStackTrace();}}@Overridepublic void onUpgrade(SQLiteDatabase db, ConnectionSource connectionSource,int arg2, int arg3) {// 数据库检测到版本号不同时自动执行,在这里我们应该:try {// 1:删除原有的旧表TableUtils.dropTable(connectionSource, Account.class, true);TableUtils.dropTable(connectionSource, Order.class, true);// 2:创建现在的新表onCreate(db, connectionSource);Log.e(DataHelper.class.getName(), "更新数据库成功");} catch (SQLException e) {Log.e(DataHelper.class.getName(), "更新数据库失败", e);e.printStackTrace();}}@Overridepublic void close() {super.close();daoMaps.clear();}//给它一个实体类,返回该实体类专用的Dao,功能很强大@SuppressWarnings("unchecked")public Dao<Account, Integer> getAccountDao() {Dao<Account, Integer> accountDao = daoMaps.get("accountDao");if (accountDao == null) {try {accountDao = getDao(Account.class);} catch (SQLException e) {e.printStackTrace();}}return accountDao;}@SuppressWarnings("unchecked")public Dao<Order, Integer> getOrderDao() {Dao<Order, Integer> orderDao = daoMaps.get("orderDao");if (orderDao == null) {try {orderDao = getDao(Order.class);} catch (SQLException e) {e.printStackTrace();}}return orderDao;}}
然后写业务逻辑层Service :public class AccountService implements IAccountService{private Dao<Account, Integer> accountDao = null;public AccountService(Dao<Account, Integer> dao) {accountDao = dao;}public String reg(Account account) {boolean result = false;try {accountDao.create(account);result = true;} catch (SQLException e) {e.printStackTrace();}String msg= result ? "注册客户成功!" : "注册失败";return msg;}public Account load(String name) {Account account = null;Map<String, Object> accountMap = new HashMap<String, Object>();accountMap.put("aName", name);try {List<Account> list = accountDao.queryForFieldValues(accountMap);account = list != null && list.size() == 1 ? list.get(0) : null;} catch (SQLException e) {e.printStackTrace();}return account;}}
OrderService与上类似 ,我就不贴出来占位置了,接着到了我们的UI层。  修改我们的Activity类,继承自OrmLiteBaseActivity<DataHelper>,这是一个抽象类OrmLiteBaseActivity<H extends OrmLiteSqliteOpenHelper>,它也是继承自Activity的,所以我们的Activity类相当于是间接继承自Activity:
public class OrmLiteTestActivity extends OrmLiteBaseActivity<DataHelper>implements OnClickListener {private Button btnRegAccount, btnAddOrder, btnShow;private TextView tvMsg = null;private IAccountService accountService = null;private IOrderService orderService = null;private int accountID = 0;private int orderID = 0;private String msg = "";@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);init();}private void init() {// 初始化serviceaccountService = new AccountService(getHelper().getAccountDao());orderService = new OrderService(getHelper().getOrderDao());btnRegAccount = (Button) this.findViewById(R.id.btnRegAccount);btnAddOrder = (Button) this.findViewById(R.id.btnAddOrder);btnShow = (Button) this.findViewById(R.id.btnShow);tvMsg = (TextView) this.findViewById(R.id.tvMsg);btnRegAccount.setOnClickListener(this);btnAddOrder.setOnClickListener(this);btnShow.setOnClickListener(this);}@Overridepublic void onClick(View v) {msg = "";switch (v.getId()) {case R.id.btnRegAccount:accountID++;Account account = new Account("客户" + accountID);msg = accountService.reg(account) ? "注册客户成功!" : "注册客户失败!";break;case R.id.btnAddOrder:orderID++;account = accountService.load("客户1");Order order = new Order("定单" + orderID, account);msg = orderService.addOrder(order) ? "添加定单成功!" : "添加定单失败!";break;case R.id.btnShow:List<Order> list = orderService.findOrderByAccountID(1);for (Order o : list) {msg += o.getOid() + ":" + o.getoName() + "\n";}break;default:break;}tvMsg.setText(msg);}}运行后效果如下: 最后是查找客户1的所有定单
DSC0000.gif

  这样我们就实现了使用OrmLite实现持久化数据了,完整代码可以在我的资源列表中下载:
  http://download.csdn.net/detail/a_mean/3805488

  欢迎交流、补充、找错,谢谢!

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-307689-1-1.html 上篇帖子: android SQLite数据库基本操作示例 下篇帖子: sqlite两种方式实现增删改查
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表