ORMLiteDatabase的简单使用and与关联外部

1、下载jar

具体到Android,需要在 http://ormlite.com/releases 页面下载两个jar 包(本文基于ORMLite的版本是:ormlite 4.49-SNAPSHOT):
(1)core列表下的jar包;
(2)android列表下的jar包。
如图所示:

将上面的两个jar包下载后放到Android工程项目中的libs包中,如图所示:

以上完成后,ORMLite开发环境搭建就完成了,接下来就可以使用了。

2、代码:

表student.java和AClass.java

 1 package com.zzw.ormlitedatabasetest;
 2
 3 import com.j256.ormlite.field.DatabaseField;
 4 import com.j256.ormlite.table.DatabaseTable;
 5
 6 @DatabaseTable(tableName = "Student")
 7 public class Student {
 8
 9     @DatabaseField(id = true, columnName = "Student_id")
10     public int Student_id;
11     @DatabaseField(columnName = "name")
12     public String name;
13     @DatabaseField(columnName = "sex")
14     public String sex;
15     @DatabaseField(columnName = "age")
16     public int age;
17     @DatabaseField(foreign = true, foreignAutoRefresh = true)
18     public AClass aClass;
19
20     public Student() {
21
22     }
23
24     public Student(String name, String sex, int age) {
25         super();
26         this.name = name;
27         this.sex = sex;
28         this.age = age;
29     }
30
31     @Override
32     public String toString() {
33         return "Student [Student_id=" + Student_id + ", name=" + name + ", sex=" + sex + ", age=" + age + ",className="
34                 + aClass.name + "]";
35     }
36
37 }

Student

 1 package com.zzw.ormlitedatabasetest;
 2
 3 import com.j256.ormlite.dao.ForeignCollection;
 4 import com.j256.ormlite.field.DataType;
 5 import com.j256.ormlite.field.DatabaseField;
 6 import com.j256.ormlite.field.ForeignCollectionField;
 7 import com.j256.ormlite.table.DatabaseTable;
 8
 9 @DatabaseTable(tableName = "Classess")
10 public class AClass {
11
12     @DatabaseField(id = true, columnName = "classess_id")
13     public int classess_id;
14     @DatabaseField(dataType = DataType.STRING)
15     public String name;
16     @ForeignCollectionField(eager = false)
17     public ForeignCollection<Student> students = null;
18
19     public AClass() {
20         super();
21     }
22
23     public AClass(int classess_id, String name, ForeignCollection<Student> students) {
24         super();
25         this.classess_id = classess_id;
26         this.name = name;
27         this.students = students;
28     }
29
30 }

AClass

ORMLite数据库管理工具类ORMLiteDatabaseHelper.java:

 1 package com.zzw.ormlitedatabasetest;
 2
 3 import java.sql.SQLException;
 4
 5 import com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper;
 6 import com.j256.ormlite.dao.Dao;
 7 import com.j256.ormlite.support.ConnectionSource;
 8 import com.j256.ormlite.table.TableUtils;
 9
10 import android.content.Context;
11 import android.database.sqlite.SQLiteDatabase;
12 import android.database.sqlite.SQLiteDatabase.CursorFactory;
13 import android.util.Log;
14
15 public class OrmLiteDatabaseHelper extends OrmLiteSqliteOpenHelper {
16     private static final String TAG = "OrmLiteDatabaseHelper";
17
18     public static OrmLiteDatabaseHelper mDatabaseHelper = null;
19
20     public Dao<Student, Integer> mStudentDao = null;
21     public Dao<AClass, Integer> mAClassDao = null;
22
23     public static String database_NAME = "school.db";
24     public static int database_VERSION = 1;
25
26     public OrmLiteDatabaseHelper(Context context, String databaseName, CursorFactory factory, int databaseVersion) {
27         super(context, databaseName, factory, databaseVersion);
28     }
29
30     public static OrmLiteDatabaseHelper getInstance(Context context) {
31         if (mDatabaseHelper == null) {
32             mDatabaseHelper = new OrmLiteDatabaseHelper(context, database_NAME, null, database_VERSION);
33         }
34         Log.d(TAG, "数据库school.db创建成功");
35         return mDatabaseHelper;
36     }
37
38     @Override
39     public void onCreate(SQLiteDatabase arg0, ConnectionSource arg1) {
40         try {
41             TableUtils.createTableIfNotExists(arg1, AClass.class);
42             Log.e(TAG, "AClass表在School.db中被创建");
43             TableUtils.createTableIfNotExists(arg1, Student.class);
44             Log.e(TAG, "Student表在School.db中被创建");
45         } catch (SQLException e) {
46             e.printStackTrace();
47         }
48
49     }
50
51     @Override
52     public void onUpgrade(SQLiteDatabase arg0, ConnectionSource arg1, int arg2, int arg3) {
53
54     }
55
56     public Dao<Student, Integer> getStudentDao() {
57         if (mStudentDao == null) {
58             try {
59                 mStudentDao = getDao(Student.class);
60                 Log.e(TAG, "得到Student的Dao");
61             } catch (SQLException e) {
62                 e.printStackTrace();
63             }
64         }
65         return mStudentDao;
66     }
67
68     public Dao<AClass, Integer> getAClassDao() {
69         if (mAClassDao == null) {
70             try {
71                 mAClassDao = getDao(AClass.class);
72                 Log.e(TAG, "得到AClass的Dao");
73             } catch (SQLException e) {
74                 e.printStackTrace();
75             }
76         }
77         return mAClassDao;
78     }
79
80     @Override
81     public void close() {
82         super.close();
83         if (mAClassDao != null) {
84             mAClassDao = null;
85         }
86         if (mStudentDao != null) {
87             mStudentDao = null;
88         }
89     }
90 }

MainActivity:

  1 package com.zzw.ormlitedatabasetest;
  2
  3 import java.sql.SQLException;
  4 import java.util.List;
  5
  6 import com.j256.ormlite.dao.Dao;
  7
  8 import android.app.Activity;
  9 import android.graphics.Color;
 10 import android.os.Bundle;
 11 import android.util.Log;
 12 import android.widget.ScrollView;
 13 import android.widget.TextView;
 14 import android.widget.Toast;
 15
 16 public class MainActivity extends Activity {
 17
 18     private static final String TAG = "MainActivity";
 19
 20     private Dao<AClass, Integer> mAClassDao = null;
 21     private Dao<Student, Integer> mStudentDao = null;
 22
 23     AClass aClass1, aClass2, aClass3, aClass4, aClass5;
 24
 25     @Override
 26     protected void onCreate(Bundle savedInstanceState) {
 27         super.onCreate(savedInstanceState);
 28         setContentView(R.layout.activity_main);
 29
 30         OrmLiteDatabaseHelper mOrmLiteDatabaseHelper = OrmLiteDatabaseHelper.getInstance(this);
 31
 32         mAClassDao = mOrmLiteDatabaseHelper.getAClassDao();
 33         mStudentDao = mOrmLiteDatabaseHelper.getStudentDao();
 34
 35     }
 36
 37     @Override
 38     protected void onStart() {
 39         Log.d(TAG, ">>>>>>>>>>>>");
 40         super.onStart();
 41         int AClasses_count = createAClasses();
 42         if (AClasses_count == 5) {
 43             try {
 44                 aClass1 = mAClassDao.queryForId(1);
 45                 aClass2 = mAClassDao.queryForId(2);
 46                 aClass3 = mAClassDao.queryForId(3);
 47                 aClass4 = mAClassDao.queryForId(4);
 48                 aClass5 = mAClassDao.queryForId(5);
 49
 50                 createStudents();
 51
 52             } catch (Exception e) {
 53                 e.printStackTrace();
 54             }
 55         } else {
 56             Toast.makeText(this, "班级创建错误", 0).show();
 57         }
 58         queryAllStudents();
 59     }
 60
 61     private void createStudents() {
 62         Log.d(TAG, "学生创建开始------>");
 63         Student student = new Student();
 64         for (int i = 1; i <= 20; i++) {
 65             student.Student_id = i;
 66             student.age = (int) (Math.random() * 100);
 67             if (i % 2 == 0) {
 68                 student.sex = "男";
 69             } else {
 70                 student.sex = "女";
 71             }
 72             if (i > 0 && i <= 4) {
 73                 student.aClass = aClass1;
 74                 student.name = "陶" + i;
 75             } else if (i > 4 && i <= 8) {
 76                 student.aClass = aClass2;
 77                 student.name = "李" + i;
 78             } else if (i > 8 && i <= 12) {
 79                 student.aClass = aClass3;
 80                 student.name = "阿" + i;
 81             } else if (i > 12 && i <= 16) {
 82                 student.aClass = aClass4;
 83                 student.name = "曾" + i;
 84             } else {
 85                 student.aClass = aClass5;
 86                 student.name = "蒋" + i;
 87             }
 88
 89             try {
 90                 mStudentDao.createIfNotExists(student);
 91             } catch (SQLException e) {
 92                 e.printStackTrace();
 93             }
 94         }
 95         Log.d(TAG, "学生创建成功------>");
 96     }
 97
 98     private int createAClasses() {
 99         Log.d(TAG, "班级创建开始------>");
100         AClass aClass = new AClass();
101         int AClasses_count = 0;
102         for (int i = 1; i <= 5; i++) {
103             aClass.classess_id = i;
104             aClass.name = "高三" + i + "班";
105             try {
106                 mAClassDao.createIfNotExists(aClass);
107                 AClasses_count++;
108             } catch (SQLException e) {
109                 e.printStackTrace();
110             }
111         }
112         Log.d(TAG, "班级创建成功------>");
113         return AClasses_count;
114     }
115
116     private void queryAllStudents() {
117         Log.d(TAG, "查询全部学生开始------>>>>");
118         try {
119             List<Student> students = mStudentDao.queryForAll();
120             if (students != null && students.size() > 0) {
121                 for (Student student : students) {
122                     Log.i(TAG, student.toString());
123                 }
124             }
125         } catch (SQLException e) {
126             e.printStackTrace();
127         }
128         Log.d(TAG, "查询全部学生完毕------>>>>");
129     }
130
131     @Override
132     protected void onDestroy() {
133         super.onDestroy();
134         if (mAClassDao != null) {
135             mAClassDao = null;
136         }
137         if (mStudentDao != null) {
138             mStudentDao = null;
139         }
140         Log.d(TAG, "<<<<<<<<<<<");
141     }
142
143 }
时间: 2024-10-14 05:00:45

ORMLiteDatabase的简单使用and与关联外部的相关文章

Android ORMLite ForeignCollection关联外部集合

?? <Android ORMLite ForeignCollection关联外部集合> Android ORMLite ForeignCollection关联外部集合的功能,适合层级比較深,数据模型互相渗透.交叉的数据结构或集合.尤其方便解决复杂数据模型.简单期间,我们临时以 班级 <-> 学生 这种数据模型为例加以说明.一个班级里面有若干学生(一对多,1<-n).反过来说,若干个学生集合到一个班级中(n->1). 在Android ORMLite中.这种结构模型能够

Eclise Maven方式 关联外部架包 Debug

Eclipse + Maven 方式关联源码: Eclispse关联源码: Window ->Preferences->Maven 勾选 Download Artifact Source 与 Download Artifact JavaDoc 两项 Eclipse + Plugin方式 解决Maven Debug 关联外部Jar: jar包及原教程地址奉上:https://github.com/bjmi/m2e.sourcelookup

Django auth组件拓展 关联外部信息---------------------------- Profile 模式

from django.db import models   from django.contrib.auth.models import User   GENDER_CHOICES = (                                      ('M', '男'),                                       ('F', '女'),                                       )   class UserPro

超级简单攻略——GitHub关联IDEA!

1,设置IDEA IDEA——>Settings——>Version Control——>Git & GitHub——>Test——>successful 成功关联 2,设置VCS工具条 工具条——>VCS——>Import into Version Control——>Create Git Repository——>选中想要建库的文件目录 3,上传操作 目录文件——>添加,提交——>推送——>关联远程库URL (https地

这只是一个简单双表关联可以轻松检索出相同的数据

布局方面尝试使用了CSS3的弹性盒子,但是万万没想到先进的X5内核居然仅支持 display: -webkit-box; 所以这里需要多写一套兼容的样式.动态效果本来想用 transition 凑合一下,看了效果还是过不了自己这关,最后还是换成 animation 实现.transition的问题是撑开和收缩时边框的行为不对,用动画就比较好解决了.布局需要注意的是:背景图的上半部需要多加一层嵌套实现自适应.另外,微信的边框还有阴影,这些细节咱们暂时先忽略了. 大二学数据库的时候,只是隐约听到老师

Hive 外部表 分区表

  之前主要研究oracle与mysql,认为hive事实上就是一种数据仓库的框架,也没有太多另类,所以主要精力都在研究hadoop.hbase,sqoop,mahout,近期略微用心看了下hive.事实上hive还是比我想象中好用的多,心里有点点暗爽,不论是与hadoop的衔接,还是在对外查询分析,定期hsql生成报表方面,都很方便.能够不用mapreduce.直接用hive生成报表. 真是方便.  Hive 提供两者表的两种使用方式,一种是内部表(托管表),第二种就是外部表. 对于两种表的使

Git和Github简单教程(转)

这篇文章只挑一部分命令来讲,差不多够用就行的程度.如果需要其他命令,到时候再去其他地方了解就行了先在Github上写好再搬过来的:本文Github链接 目录: 零.Git是什么 一.Git的主要功能:版本控制 二.概览 三.Git for Windows软件安装 四.本地Git的使用 五.Github与Git的关联 六.Github的其他介绍 七.一些可能碰到的问题 零.Git是什么 我才不告诉你嘞 一.Git的主要功能:版本控制 版本:想想你平时用的软件,在软件升级之后,你用的就是新版本的软件

STL_关联容器 VS C++ hashmap

红黑树和哈希表区别: http://m.blog.csdn.net/article/details?id=52133283 关于STL中关联容器的几个问题: (1)为何map和set的插入删除效率比用其他序列容器高? 大部分人说,很简单,因为对于关联容器来说,不需要做内存拷贝和内存移动.说对了,确实如此.set容器内所有元素都是以节点的方式来存储,其节点结构和链表差不多,指向父节点和子节点.结构图可能如下: A   / \ B C / \ / \  D E F G 因此插入的时候只需要稍做变换,

set 和 vector的简单比较

set的常见问题(转) (1)为何map和set的插入删除效率比用其他序列容器高? 大部分人说,很简单,因为对于关联容器来说,不需要做内存拷贝和内存移动.说对了,确实如此.set容器内所有元素都是以节点的方式来存储,其节点结构和链表差不多,指向父节点和子节点.结构图可能如下: A   / \ B C / \ / \   D E F G 因此插入的时候只需要稍做变换,把节点的指针指向新的节点就可以了.删除的时候类似,稍做变换后把指向删除节点的指针指向其他节点也OK了.这里的一切操作就是指针换来换去