什么是ORMLite:
ormlite,是针对数据库中的表进行操作的一个第三方,他的作用非常的简单,就是通过映射的方式将类中的一个实体类对象中的属性和数据库中的表形成映射,通过映射,也就是说通过对对象(属性)进行操作来达到对数据库中的表内容进行操作。
实现步骤:
1,导入相应的jar包;
一共两个包:一个是ormlite-core-4.24.jar,另一个是ormlite-android-4.24.jar
从以下网址可以下载到:
http://ormlite.com/releases/
2,创建一个帮助类继承自
OrmLiteSqliteOpenHelper,这一步和基本的sql使用方式差不多
通过两个方法核心方法达到创建和删除数据库
TableUtils.dropTable(connectionSource,"实体类名",true);
TableUtils.createTable(connectionSource,"实体类名");
个人习惯在helper中创建单例和写明创建实体对象(我们称作Dao对象)的方法,然后在外界直接调用,这个因人而异。数据类型为:Dao<Student,Long>
3,创建实体类,在实体类中通过映射将实体类和数据库中的表进行绑定关联,
4,最后异步,在main中开始得到实体类对象,之后对实体类对象进操作即可。
基本的思路说完了,来通过代码进行更加深入的了解吧,这里添加依赖着这种就没必要贴代码了
创建帮助类:
/**
* 数据库访问的帮助类
*/
public class MySqliteOpenHelper extends OrmLiteSqliteOpenHelper{
private static final String DB_NAME="db_student";//数据库的名称
private static final int DB_VERSON=1;//数据库的版本
private static MySqliteOpenHelper helper;
private Dao<Student,Long> studentDao;//针对student数据表操作的具体对象
/**
* 采用单例模式构建数据库帮助类对象 保证app中存在一个helper对象
*/
public static MySqliteOpenHelper getInstance(Context context){
if(helper==null){
helper=new MySqliteOpenHelper(context);
}
return helper;
}
/**
* 针对每个bean类创建xxDao对象处理当前的bean对应的数据表的操作
*/
public Dao<Student,Long> getStudentDao() throws SQLException {
if(studentDao==null){
studentDao=getDao(Student.class);
}
return studentDao;
}
//必须定义的构造函数
public MySqliteOpenHelper(Context context, String databaseName,
SQLiteDatabase.CursorFactory factory, int databaseVersion) {
super(context, databaseName, factory, databaseVersion);
}
//这是初始化的时候默认的数据库名字和版本号,这里为了简便直接生成,也可以在创建对象的时候生成
public MySqliteOpenHelper(Context context){
super(context,DB_NAME,null,DB_VERSON);
}
@Override
public void onCreate(SQLiteDatabase database, ConnectionSource connectionSource) {
try {
//创建数据表createTable(连接对象,需要创建表的实体类字节码对象)
TableUtils.createTable(connectionSource,Student.class);
// TableUtils.createTable(connectionSource,xxx.class);
} catch (SQLException e) {
e.printStackTrace();
}
}
@Override
public void onUpgrade(SQLiteDatabase database, ConnectionSource connectionSource, int oldVersion, int newVersion) {
if(newVersion>oldVersion){
//具体的数据库更新的代码
try {
//dropTable(,,标示是否忽略异常)
TableUtils.dropTable(connectionSource,Student.class,true);
TableUtils.createTable(connectionSource,Student.class);
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
接下下来看看实体类是如何和数据库进行关联的吧
/**
* java Student类--数据库中的student表
这里很简单,就是简单的创建了一个学生实体类,声明了几个属性,和set,get方法,但是注意,看看是不是多了些东西呢?
*/
//DatabaseTable 标示数据库中的一张表 tableName指定表明
@DatabaseTable(tableName = "student")//此处的注解是用来说明,这个实体类和数据库进行了关联,
public class Student {
//DatabaseField 标明数据库中的字段名(列名) generatedId=true 组建自动增长
@DatabaseField(columnName = "_id",generatedId = true)//只要属性的上边有注解,就说明这个属性将来在操作的时候就会成为数据库表中的一个操作列,也可以说一项。
private long _id;
@DatabaseField(columnName = "age",dataType = DataType.INTEGER)
private int age;
@DatabaseField(columnName = "name",dataType = DataType.STRING)
private String name;
@DatabaseField(columnName = "sex",dataType = DataType.STRING)
private String sex;
public Student(int age, String name, String sex) {
this.age = age;
this.name = name;
this.sex = sex;
}
public Student(){
}
public long get_id() {
return _id;
}
public void set_id(long _id) {
this._id = _id;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}
最后就是在活动中进行操作了,在这里通过先创建helper对象,通过此对象调用单例得到dao对象,开始通过按钮逻辑,对dao对象进行操作,思路看下边代码:
/**
* ORM 实现面向对象编程语言中不同类型的系统数据转换
*
* ORM Object-Relational Mapping 对象关系映射
* Java中对象与数据库表中的纪录进行映射
* 实体类持久化到数据库中 数据库中表的查询纪录映射成java对象
*
* 数据库中的表映射成java中的类
* 数据库表中的数据映射成java中的对象
*
* 数据库的访问框架 orm 利用反射机制将对象和数据库表中的纪录产生映射关系
* 例如:插入 对象中的属性值映射成数据表中的字段值进行插入
*
* OrmLite 加载连接数据库的第三方框架
* 1.下载OrmLite相应的jar
* 2.配置bean类
* 3.编写数据库帮助类 ormLiteSqliteOpenHelper--对SqliteOpenHelper的封装
* 4.执行crud操作
*/
public class MainActivity extends AppCompatActivity {
private ListView lv;
private MySqliteOpenHelper helper;
private Dao<Student,Long> studentDao;
private List<Student> list=new ArrayList<>();
private MyBaseAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initHelper();
initView();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main,menu);
return true;
}
//刷新数据的方法
public void refreshData(List<Student> result){
list.clear();
list.addAll(result);
adapter.notifyDataSetChanged();
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()){
case R.id.action_insert://插入数据
AlertDialog.Builder builder=new AlertDialog.Builder(this);
builder.setTitle("添加数据");
View view= LayoutInflater.from(this).inflate(R.layout.dialog_view,null);
builder.setView(view);
final EditText et_name= (EditText) view.findViewById(R.id.et_name);
final EditText et_sex= (EditText) view.findViewById(R.id.et_sex);
final EditText et_age= (EditText) view.findViewById(R.id.et_age);
builder.setPositiveButton("添加", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//动态的获取姓名 性别 年龄
String name=et_name.getText().toString().trim();
String sex=et_sex.getText().toString().trim();
String age=et_age.getText().toString().trim();
if(!TextUtils.isEmpty(name) && !TextUtils.isEmpty(sex)
&& !TextUtils.isEmpty(age)){
int intAge=Integer.parseInt(age);
Student student=new Student(intAge,sex,name);
try {
//存储数据 插入数据
int count=studentDao.create(student);
if(count>0){
Log.i("tag","添加成功!");
//刷新界面的函数
refreshData(selectAll());
}else{
Log.i("tag","添加失败!");
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
});
builder.setNegativeButton("取消",null);
builder.create().show();
break;
}
return super.onOptionsItemSelected(item);
}
/**
* 查询数据库表中的所有的数据
* @return 集合
*/
public List<Student> selectAll(){
try {
//select * from student where age=18 or sex='男' order by _id desc;
// studentDao.queryBuilder().orderBy("_id",false)
// .where().eq("age",18).or().eq("sex","男").query();
//queryForAll()查询所有
return studentDao.queryForAll();//select * from student;
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
/**
* 初始化view视图
*/
public void initView(){
lv= (ListView) findViewById(R.id.lv);
list=selectAll();
adapter=new MyBaseAdapter(list,this);
lv.setAdapter(adapter);
}
/**
* 初始化数据库连接
*/
public void initHelper(){
helper=MySqliteOpenHelper.getInstance(this);
try {
// studentDao=helper.getStudentDao();
studentDao=helper.getDao(Student.class);
} catch (SQLException e) {
e.printStackTrace();
}
}
}