简单的使用ORMLite数据库
2015-11-11 12:13
253 查看
在Android应用开发中使用ORMLite,ORMLite 数据库是面向对象的数据库。它比 SQLite 等数据库更加方便,可以直接使用方法等来操作。比其他很多的数据库操作都要简单。
首先要下载ORMLite的开发jar包,jar资源包下载主页:http://ormlite.com/releases 。此处使用的是如上图所示的两个
jar 包((1)core列表下的jar包;(2)android列表下的jar包。)。下载好后将其放入 libs 目录下。
其中的 @DatabaseTable(tableName = "xxxx") ,@DatabaseField(columnName = xxxx) 等写法都固定。
下面是其简单的使用:
创建 2 个班级,每个班级有几名学生,存入数据库。再遍历其中一个班级的学生(以打印的方式显示出来),效果如下:
班级类: AClass.java :
package com.android.ormlite; import com.j256.ormlite.dao.ForeignCollection; import com.j256.ormlite.field.DatabaseField; import com.j256.ormlite.field.ForeignCollectionField; import com.j256.ormlite.table.DatabaseTable; @DatabaseTable(tableName = "classes") public class AClass { @DatabaseField(canBeNull = false,id = true) public int Aclass_id; @DatabaseField(canBeNull = false, defaultValue = "a class") public String name; @ForeignCollectionField(eager = false) public ForeignCollection<User> users = null; public AClass(){} }
User 类 ,该类中的 set , get 方法主要是为初始化字段为 private 准备的,但是在这示例中可以省略(本例不为私有,但是如果省略则有代码的改动)
User.java :
package com.android.ormlite; import com.j256.ormlite.field.DatabaseField; import com.j256.ormlite.table.DatabaseTable; @DatabaseTable(tableName = "users") public class User { public final static String USER_ID = "user_id"; public final static String NAME = "name"; public final static String AGE = "age"; public final static String GENDER = "gender"; public User() { } public User(String name, int age, String gender) { this.name = name; this.age = age; this.gender = gender; } // @DatabaseField(generatedId = true) // public int id; @DatabaseField(id = true, columnName = USER_ID) public int user_id; @DatabaseField(columnName = NAME) public String name; @DatabaseField(columnName = AGE) public int age; @DatabaseField(columnName = GENDER) public String gender; @DatabaseField(canBeNull = false, foreign = true, foreignAutoRefresh = true) public AClass aclass; public int getUserId() { return user_id; } public void setUserId(int uid) { this.user_id = uid; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getGender(){ return gender; } public void setGender(String gender){ this.gender = gender; } @Override public String toString() { return "user_id:" + user_id + " 姓名:" + name + " 年龄:" + age + " 性别:" + gender; } }
ORMLiteDatabaseHelper 类的写法基本固定,通过 AClass 和 User 两个类也可以看出
ORMLiteDatabaseHelper.java :
package com.android.ormlite; import java.sql.SQLException; import com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper; import com.j256.ormlite.dao.Dao; import com.j256.ormlite.support.ConnectionSource; import com.j256.ormlite.table.TableUtils; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteDatabase.CursorFactory; public class ORMLiteDatabaseHelper extends OrmLiteSqliteOpenHelper { public static ORMLiteDatabaseHelper mDatabaseHelper; private Dao<User, Integer> mUserDao = null; private Dao<AClass, Integer> mClassDao = null; private final static String DataBase_NAME = "ormlite.db"; private final static int DataBase_VERSION = 1; public ORMLiteDatabaseHelper(Context context, String databaseName, CursorFactory factory, int databaseVersion) { super(context, databaseName, factory, databaseVersion); } public static ORMLiteDatabaseHelper getInstance(Context context) { if (mDatabaseHelper == null) { mDatabaseHelper = new ORMLiteDatabaseHelper(context, DataBase_NAME, null, DataBase_VERSION); } return mDatabaseHelper; } @Override public void onCreate(SQLiteDatabase arg0, ConnectionSource arg1) { try { TableUtils.createTableIfNotExists(connectionSource, AClass.class); TableUtils.createTableIfNotExists(connectionSource, User.class); } catch (Exception e) { e.printStackTrace(); } } @Override public void onUpgrade(SQLiteDatabase arg0, ConnectionSource arg1, int arg2, int arg3) { } /** * ORMLite查插删改主要通过DAO。 * @return */ public Dao<User, Integer> getUserDao() { if (mUserDao == null) { try { mUserDao = getDao(User.class); } catch (java.sql.SQLException e) { e.printStackTrace(); } } return mUserDao; } public Dao<AClass, Integer> getAClassDao(){ if (mClassDao == null) { try { mClassDao = getDao(AClass.class); } catch (SQLException e) { e.printStackTrace(); } } return mClassDao; } @Override public void close() { super.close(); mUserDao = null; mClassDao = null; } }
MainActivity.java :
package com.android.ormlite; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import com.j256.ormlite.dao.Dao; import com.j256.ormlite.dao.ForeignCollection; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.widget.Toast; public class MainActivity extends Activity { private Dao<User, Integer> mUserDao; private Dao<AClass, Integer> mClassDao; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ORMLiteDatabaseHelper mDatabaseHelper = ORMLiteDatabaseHelper.getInstance(this); mUserDao = mDatabaseHelper.getUserDao(); mClassDao = mDatabaseHelper.getAClassDao(); /** * 创建2个班级 */ for (int i = 1; i < 3; i++) { AClass classA = new AClass(); classA.Aclass_id = i; classA.name = i + "班"; try { mClassDao.create(classA); } catch (SQLException e) { e.printStackTrace(); } } /** * 创建5个user */ for (int i = 0; i < 5; i++) { User user = new User(); user.setUserId(i); user.setName("name" + i); // 生成随机测试的年龄。 user.setAge((int) (Math.random() * 22)); user.setGender("男" + i); try { // 将新创建的这些 user 所在班级指针指向1班。 user.aclass = mClassDao.queryForId(1); mUserDao.createOrUpdate(user); } catch (SQLException e) { e.printStackTrace(); } } } @Override protected void onStart() { super.onStart(); AClass class1 = null; try { // 只查询一个班级的 user class1 = mClassDao.queryForId(1); ForeignCollection<User> users = class1.users; for (User u : users) { Log.d("==============", u + ""); // Toast.makeText(this, u.toString(), // Toast.LENGTH_SHORT).show(); } } catch (SQLException e) { e.printStackTrace(); } } }
相关文章推荐
- listview与sqlite数据绑定
- MySQL中使用SHOW PROFILE命令分析性能的用法整理
- mongodb nodejs github
- 如何使用liunx自带mysql
- mysql5.6主从表数据同步
- MySQL中的alter table命令的基本使用方法及提速优化
- memcached安装及.NET中的Memcached.ClientLibrary使用详解
- MySQL帮助-help功能:登陆mysql服务器所需的相关参数选项(5.6.27)
- SQLSERVER 触发器 将一个服务器上的数据库中数据插入到另一个服务器上的数据库中怎么做
- sqlserver触发器如何将一个库中的数据插入到另外一个库中
- nagios无法安装check_mysql插件的问题
- Windows平台中Oracle11gR2使用的服务
- R语言-使用RMySQL包连接数据库
- php实现Session存储到Redis
- mysql ip存储的问题
- Rhel6.6_Oracle11gR2(ASM,UDEV)的RAC搭建安装
- MySQL主从复制
- mysql 库,表,字段名定义问题
- java向ORACLE插入时间
- mysql存储过程中遍历数组字符串的两种方式