版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_21451721/article/details/52462077
本文基于ormlite-android-4.48.jar
以及ormlite-core-4.48.jar包来介绍功能用法
一、我的实体类
package com.example.test_dudu.bean;
import java.io.Serializable;
import com.j256.ormlite.field.DatabaseField;
//一定要实现serializable接口,便于增删改查
public class Student implements Serializable {
private static final long serialVersionUID = -5683263669918171030L;
@DatabaseField(generatedId=true)//generatedId=true意思是ID实现自增,id=true试过但是没有实现自增
private int stuNO;
@DatabaseField
private String name;
@DatabaseField
private int age;
@DatabaseField
private String sex;
@DatabaseField
private double score;
@DatabaseField
private String address;
public int getStuNO() {
return stuNO;
}
public void setStuNO(int stuNO) {
this.stuNO = stuNO;
}
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 getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public double getScore() {
return score;
}
public void setScore(double score) {
this.score = score;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
二、我的DbHelper,其实也就是我的DAO层
package com.example.test_dudu.db;
import java.sql.SQLException;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.util.Log;
import com.example.test_dudu.bean.ClassName;
import com.example.test_dudu.bean.Student;
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;
public class DatabaseHelper extends OrmLiteSqliteOpenHelper {
private static final String DATABASE_NAME = "ormlite.db";
private static final int DATABASE_VERSION = 1;
//构造方法声明了数据库名和数据库版本号
public DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
/**
* 创建SQLite数据库
*/
@Override
public void onCreate(SQLiteDatabase sqliteDatabase,
ConnectionSource connectionSource) {
try {//建表
TableUtils.createTable(connectionSource, Student.class);
TableUtils.createTable(connectionSource, ClassName.class);
} catch (SQLException e) {
Log.e(DatabaseHelper.class.getName(), "Unable to create datbases",
e);
}
}
/**
* 更新SQLite数据库
*/
@Override
public void onUpgrade(SQLiteDatabase sqliteDatabase,
ConnectionSource connectionSource, int oldVer, int newVer) {
try {
TableUtils.dropTable(connectionSource, Student.class, true);
TableUtils.dropTable(connectionSource, ClassName.class, true);
onCreate(sqliteDatabase, connectionSource);
} catch (SQLException e) {
Log.e(DatabaseHelper.class.getName(),
"Unable to upgrade database from version " + oldVer
+ " to new " + newVer, e);
}
}
private Dao<Student, Integer> stuDao = null;
/**
* 学生DAO,业务层方法
* */
public Dao<Student, Integer> getStudentDao() throws SQLException {
if (stuDao == null) {
stuDao = getDao(Student.class);
}
return stuDao;
}
private Dao<ClassName, Integer> classDao = null;
/**
* 班级DAO
* */
public Dao<ClassName, Integer> getClassNameDao() throws SQLException {
if (classDao == null) {
classDao = getDao(ClassName.class);
}
return classDao;
}
}
三、Activity实现(一):
package com.example.test_dudu.ui;
import java.sql.SQLException;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import com.example.test_dudu.R;
import com.example.test_dudu.bean.Student;
import com.example.test_dudu.db.DatabaseHelper;
import com.j256.ormlite.android.apptools.OrmLiteBaseActivity;
import com.j256.ormlite.dao.Dao;
//借用OrmliteActivity可以快速并直接使用getHelper来获取对应DAO方法
public class MainActivity extends OrmLiteBaseActivity<DatabaseHelper> implements OnClickListener {
private EditText stuNO;
private EditText stuName;
private EditText stuAge;
private EditText stuSex;
private EditText stuScore;
private EditText stuAddress;
private Button bt_next;
private Student mStudent;
private Dao<Student, Integer> stuDao;
private final int MENU_ADD = Menu.FIRST;
private final int MENU_VIEWALL = Menu.FIRST + 1;
private final int MENU_EDIT = Menu.FIRST + 2;
private Bundle mBundle = new Bundle();
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initializeViews();
}
/**
* 初始化UI界面
*/
private void initializeViews() {
stuNO = (EditText) findViewById(R.id.stuno);
stuName = (EditText) findViewById(R.id.name);
stuAge = (EditText) findViewById(R.id.age);
stuSex = (EditText) findViewById(R.id.sex);
stuScore = (EditText) findViewById(R.id.score);
stuAddress = (EditText) findViewById(R.id.address);
bt_next=(Button)findViewById(R.id.bt_next);
bt_next.setOnClickListener(this);
mBundle = getIntent().getExtras();
if (mBundle != null && mBundle.getString("action").equals("viewone")) {
mStudent = (Student) getIntent().getSerializableExtra("entity");
setStudentUIData(mStudent);
}
if (mBundle != null && mBundle.getString("action").equals("edit")) {
mStudent = (Student) getIntent().getSerializableExtra("entity");
setStudentUIData(mStudent);
}
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
if (mBundle != null && mBundle.getString("action").equals("viewone"))
return false;
else
return super.onPrepareOptionsMenu(menu);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
if (mBundle != null && mBundle.getString("action").equals("edit")) {
menu.add(1, MENU_EDIT, 0, "保存");
} else {
menu.add(0, MENU_ADD, 0, "增加");
menu.add(0, MENU_VIEWALL, 0, "查看");
}
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case MENU_ADD:
try {
stuDao = getHelper().getStudentDao();
getStudentData();
if (mStudent != null) {
// 创建记录项
stuDao.create(mStudent);
}
} catch (SQLException e) {
e.printStackTrace();
}
break;
case MENU_VIEWALL:
Intent intent = new Intent();
intent.setClass(MainActivity.this, StudentListActivity.class);
startActivity(intent);
break;
case MENU_EDIT:
try {
getStudentData();
stuDao = getHelper().getStudentDao();//getHelper()是继承OrmliteBaseActivity的方法
if (mStudent != null) {
// 更新某记录项
stuDao.update(mStudent);
}
} catch (SQLException e) {
e.printStackTrace();
}
break;
default:
break;
}
return super.onOptionsItemSelected(item);
}
/**
* 获取界面值(实体信息)
*/
private void getStudentData() {
mStudent = new Student();
mStudent.setStuNO(Integer.valueOf(stuNO.getText().toString()));
mStudent.setName(stuName.getText().toString());
mStudent.setAge(Integer.parseInt(stuAge.getText().toString()));
mStudent.setSex(stuSex.getText().toString());
mStudent.setScore(Double.parseDouble(stuScore.getText().toString()));
mStudent.setAddress(stuAddress.getText().toString());
}
/**
* 赋值给UI界面
*
* @param student
*/
private void setStudentUIData(Student student) {
stuNO.setText(student.getStuNO()+"");
stuName.setText(student.getName());
stuAge.setText(String.valueOf(student.getAge()));
stuSex.setText(student.getSex());
stuScore.setText(String.valueOf(student.getScore()));
stuAddress.setText(student.getAddress());
}
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
Intent in=new Intent(MainActivity.this,ClassActivity.class);
startActivity(in);
}
}
四、Activity实现(二)
针对不使用OrmliteBaseActivity情况下的通用方法:
package com.example.test_dudu.ui;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import com.example.test_dudu.R;
import com.example.test_dudu.bean.ClassName;
import com.example.test_dudu.bean.Student;
import com.example.test_dudu.db.DatabaseHelper;
import com.example.test_dudu.ui.StudentListActivity.ViewHolder;
import com.j256.ormlite.android.apptools.OrmLiteBaseActivity;
import com.j256.ormlite.dao.Dao;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemLongClickListener;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
public class ClassActivity extends Activity
implements OnClickListener, OnItemLongClickListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.class_activity);
initView();
initData();
initListener();
}
private EditText etname;
private EditText etnumber;
private EditText etstunumber;
private Button btadd;
private ListView lv;
private void initView() {
// TODO Auto-generated method stub
etname = (EditText) findViewById(R.id.et_classname);
etnumber = (EditText) findViewById(R.id.et_classnumber);
etstunumber = (EditText) findViewById(R.id.et_classstunumber);
btadd = (Button) findViewById(R.id.bt_add);
lv = (ListView) findViewById(R.id.listView);
}
private DatabaseHelper helper;
private Dao<ClassName, Integer> cdao;
private Adapter adapter;
private void initData() {
// TODO Auto-generated method stub
// list = new ArrayList<ClassName>();
helper = new DatabaseHelper(getApplicationContext());//通过DAO的构造方法声明Helper并获取我们需要的DAO方法
try {
cdao = helper.getClassNameDao();
list = cdao.queryForAll();//直接获取所有
if (list == null) {
list = new ArrayList<ClassName>();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
adapter=new Adapter(list);
lv.setAdapter(adapter);
}
private void initListener() {
// TODO Auto-generated method stub
btadd.setOnClickListener(this);
lv.setOnItemLongClickListener(this);
}
private List<ClassName> list;
@Override
public void onClick(View view) {
// TODO Auto-generated method stub
ClassName cName = new ClassName();
cName.setClassName(etname.getText().toString());
cName.setClassNumber(etnumber.getText().toString());
cName.setClassStuNumber(etstunumber.getText().toString());
try {
cdao.create(cName);
list = cdao.queryForAll();
adapter=new Adapter(list);
lv.setAdapter(adapter);
adapter.notifyDataSetChanged();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public boolean onItemLongClick(AdapterView<?> arg0, View view,
int position, long arg3) {
// TODO Auto-generated method stub
try {
cdao.delete(list.get(position));
Toast.makeText(getApplicationContext(), "已删除 " + position,
Toast.LENGTH_SHORT).show();
list=cdao.queryForAll();
adapter=new Adapter(list);
lv.setAdapter(adapter);
adapter.notifyDataSetChanged();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return false;
}
class Adapter extends BaseAdapter {
private List<ClassName> list;
public Adapter(List<ClassName> className) {
super();
this.list = className;
}
@Override
public int getCount() {
return list.size();
}
@Override
public ClassName getItem(int position) {
return list.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
LayoutInflater mInflater = LayoutInflater.from(getApplicationContext());
convertView = mInflater.inflate(R.layout.item, null);
holder = new ViewHolder();
holder.tvNO = (TextView) convertView.findViewById(R.id.item_tv_classnumber);
holder.tvName = (TextView) convertView
.findViewById(R.id.item_tv_classname);
holder.tvStuNO = (TextView) convertView
.findViewById(R.id.item_tv_classstunumber);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
ClassName objStu = list.get(position);
holder.tvNO.setText(objStu.getClassNumber());
holder.tvName.setText(objStu.getClassName());
holder.tvStuNO.setText(objStu.getClassStuNumber());
return convertView;
}
}
static class ViewHolder {
TextView tvName;
TextView tvNO;
TextView tvStuNO;
}
}
UI就不写了,就是几个EditText和一个ListView。里面用到了查询所有和删除方法,至于其他方法,API里很丰富,上网都可以查到。
很简单很高效很实用的一款Sqlite框架