我在网上找OrmLite的教程时遇到了很多问题,花了好大劲才解决的。这里简单的介绍一下OrmLite的使用。
主要步骤
1、导入jar包(高版本和低版本有些操作不一样)
2、创建实体类(表)
3、创建帮助类,也叫管理类
一、导入jar包
下载ormlite包,官网下载地址:https://ormlite.com/releases/
(常见的有1.9.x和5.x.x版本,实体类的注释方法与jar包版本相关,网上有两大类的注释方法,缘于此)
将jar包复制粘贴到project目录下的libs文件下,右键jar文件,点击Add As Library…,弹出窗口后点击OK;当jar文件可以点开时就成功了。
成功后的样子:
二、创建实体类
根据表的属性及约束条件,添加类属性及对应注释即可。注释的具体含义及用法可以找相关资料。网上有两大类的注释使用方法:
jar低版本:
@Table("table_name")
public class Stuff{
@PrimaryKey(.....)
private int id;
......
}
jar高版本:
@DatabaseTable(tableName = "staff")
public class Staff {
@DatabaseField(......)
private int id;
}
实体类Staff代码:(最好要有个空构造函数及全属性的get、set函数)
package com.example.lab5exam03;
import com.j256.ormlite.field.DataType;
import com.j256.ormlite.field.DatabaseField;
import com.j256.ormlite.table.DatabaseTable;
@DatabaseTable(tableName = "staff")
public class Staff {
@DatabaseField(columnName = "id", dataType = DataType.INTEGER, id = true)
private int id;
@DatabaseField(columnName = "name", dataType = DataType.STRING, canBeNull = false)
private String name;
@DatabaseField(columnName = "sex", dataType = DataType.STRING, canBeNull = false)
private String sex;
@DatabaseField(columnName = "department", dataType = DataType.STRING, canBeNull = false)
private String department;
@DatabaseField(columnName = "salary", dataType = DataType.FLOAT, canBeNull = false)
private float salary;
Staff(){
}
Staff(int id, String name, String sex, String department, float salary){
this.id = id;
this.name = name;
this.sex = sex;
this.department = department;
this.salary = salary;
}
public String getAllMessage(){
return id+"\t"+name+"\t"+sex+"\t"+department+"\t"+salary;
}
public int getId() {
return id;
}
public float getSalary() {
return salary;
}
public String getDepartment() {
return department;
}
public String getSex() {
return sex;
}
public String getName() {
return name;
}
public void setSalary(float salary) {
this.salary = salary;
}
public void setDepartment(String department) {
this.department = department;
}
public void setSex(String sex) {
this.sex = sex;
}
public void setName(String name) {
this.name = name;
}
public void setId(int id) {
this.id = id;
}
}
三、创建帮助类
帮助类要继承OrmLiteSqliteOpenHelper类
调用Dao类的Dao方法可以简化操作,Dao概念了解一下就行
帮助类能简化我们操作数据库的难度,其中Dao类很重要,Dao自带许多对数据库的操作方法,编写代码时直接调用就行。Dao的具体使用网上简单查阅一下,就基本会用了。Dao数据库查询操作要多注意一下。
帮助类DataBaseHelper的代码:
package com.example.lab5exam03;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
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;
//要继承OrmLiteSqliteOpenHelper帮助类
public class DataBaseHelper extends OrmLiteSqliteOpenHelper {
//数据库的名字
private static final String DBNAME = "test.db";
//数据库版本
private static final int version = 1;
//Dao类,简化数据库的增删改查等操作
private Dao<Staff, Integer> staffDao;
public Dao<Staff, Integer> getStaffDao() {
if (staffDao == null) {
try {
staffDao = getDao(Staff.class);
} catch (Exception e) {
e.printStackTrace();
}
}
return staffDao;
}
DataBaseHelper(Context context) {
//创建数据库
//上下文,数据库名字,工厂(一般为空),版本
super(context, DBNAME, null, version);
}
@Override
public void onCreate(SQLiteDatabase database, ConnectionSource connectionSource) {
try {
//创建staff表
TableUtils.createTableIfNotExists(connectionSource, Staff.class);
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void onUpgrade(SQLiteDatabase database, ConnectionSource connectionSource, int oldVersion, int newVersion) {
//用于升级数据库,内容可为空
}
//==============下面的是数据库的相关操作,通过调用Dao自带的方法就能完成对数据库的操作=============
//==============具体的Dao方法网上有,常用:xx.delete(class)/xx.deleteById(int)=================
//==============xx.0000(class) xx.ooooById(int) xx.ooooAll()
//增
public void addStaff(Staff staff) {
try {
staffDao.create(staff);
} catch (Exception e) {
e.printStackTrace();
}
}
//删
public void deleteStaff(Staff staff) {
try {
staffDao.delete(staff);
} catch (Exception e) {
e.printStackTrace();
}
}
//改
public void updateStaff(Staff staff) {
try {
staffDao.update(staff);
} catch (Exception e) {
e.printStackTrace();
}
}
//查
public String selectStaffById(Integer id) {
try {
return (staffDao.queryForId(id)).getAllMessage();
} catch (Exception e) {
e.printStackTrace();
}
return "无该员工";
}
}
四、事件类代码
package com.example.lab5exam03;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import com.j256.ormlite.dao.Dao;
public class MainActivity extends AppCompatActivity {
private DataBaseHelper dbhelper;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//初始化数据
initData();
Button button = (Button)findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
EditText editText = (EditText)findViewById(R.id.editText);
int id = Integer.parseInt(editText.getText().toString());
String msg = dbhelper.selectStaffById(id);
TextView result = (TextView)findViewById(R.id.result);
result.setText("查询结果\n"+msg);
}
});
}
private void initData(){
dbhelper = new DataBaseHelper(this);
Dao<Staff,Integer> staffdao = dbhelper.getStaffDao();
Staff staff1 = new Staff(1,"小明","男","员工",4000);
dbhelper.addStaff(staff1);
Staff staff2 = new Staff(2,"小红","女","员工",4500);
dbhelper.addStaff(staff2);
Staff staff3 = new Staff(3,"小强","男","员工",5000);
dbhelper.addStaff(staff2);
}
}
XML布局代码:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:id="@+id/message"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/员工信息" />
<EditText
android:id="@+id/editText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="textPersonName" />
<Button
android:id="@+id/button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/add" />
<TextView
android:id="@+id/result"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="@string/table" />
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
strings.xml代码:
<resources>
<string name="app_name">Lab5Exam03</string>
<string name="员工信息">输入要查询的员工编号:</string>
<string name="add">查询</string>
<string name="table">查询结果:\n</string>
</resources>
结果截图