【转】Android中结合OrmLite for android组件对SQLite的CRUD(增删改查)操作实例
本文中曾经提到过Ormlite的第三方组件包,Ormlite 是一种ORM工具,并且是一种轻量级别的工具。我们可以使用它来对Android中内嵌的sqlite数据库进行相关的操作。Android 的应用程序应使用 Ormlite for android 版本来进行相关的开发。Ormlite是对android提供的sqlite部分的API进行了封装。提供了更加方便的接口来供使用。
本文以一个学生的信息实例程序来展示如何使用ormlite for Android的第三方组件来开发Sqlite的C[增加],R[查询],U[更新],D[查询]应用程序,以便更方便的对sqlite数据库的操作。我们先看下程序的结构图:
【1】.程序结构图如下:
其中包com.andyidea.bean下Student.java为实体类,包com.andyidea.db下 DatabaseHelper.java为数据库辅助类,包com.andyidea.ormsqlite下的MainActivity.java和 StudentListActivity.java是界面信息类。同时我们别忘了在根目录下创建一个lib的文件夹,把第三方组件包ormlite-Android-4.31.jar ,ormlite-core-4.31.jar,ormlite-jdbc-4.31.jar放到lib文件夹下,然后在项目中引用这三个包就OK了。
【2】布局文件源码如下:
main.xml源码:
1:
2: <?xml version="1.0" encoding="utf-8"?>
3: <LinearLayout xmlns:Android="http://schemas.android.com/apk/res/android"
4: Android:orientation="vertical"
5: Android:layout_width="fill_parent"
6: Android:layout_height="fill_parent"
7: Android:padding="5dip">
8: <TextView
9: Android:layout_width="fill_parent" android:layout_height="wrap_content"
10: Android:gravity="center" android:text="ORMLite-AddPage"/>
11: <LinearLayout
12: Android:layout_width="fill_parent" android:layout_height="wrap_content"
13: Android:orientation="horizontal" android:padding="1dip" android:gravity="center_vertical">
14: <TextView
15: Android:layout_width="wrap_content"
16: Android:layout_height="wrap_content"
17: Android:text="学号: "/>
18: <EditText
19: Android:id="@+id/stuno"
20: Android:layout_width="fill_parent"
21: Android:layout_height="wrap_content"/>
22: </LinearLayout>
23: <LinearLayout
24: Android:layout_width="fill_parent" android:layout_height="wrap_content"
25: Android:orientation="horizontal" android:padding="1dip" android:gravity="center_vertical">
26: <TextView
27: Android:layout_width="wrap_content"
28: Android:layout_height="wrap_content"
29: Android:text="姓名: "/>
30: <EditText
31: Android:id="@+id/name"
32: Android:layout_width="fill_parent"
33: Android:layout_height="wrap_content"/>
34: </LinearLayout>
35: <LinearLayout
36: Android:layout_width="fill_parent" android:layout_height="wrap_content"
37: Android:orientation="horizontal" android:padding="1dip" android:gravity="center_vertical">
38: <TextView
39: Android:layout_width="wrap_content"
40: Android:layout_height="wrap_content"
41: Android:text="年龄: "/>
42: <EditText
43: Android:id="@+id/age"
44: Android:layout_width="fill_parent"
45: Android:layout_height="wrap_content"/>
46: </LinearLayout>
47: <LinearLayout
48: Android:layout_width="fill_parent" android:layout_height="wrap_content"
49: Android:orientation="horizontal" android:padding="1dip" android:gravity="center_vertical">
50: <TextView
51: Android:layout_width="wrap_content"
52: Android:layout_height="wrap_content"
53: Android:text="性别: "/>
54: <EditText
55: Android:id="@+id/sex"
56: Android:layout_width="fill_parent"
57: Android:layout_height="wrap_content"/>
58: </LinearLayout>
59: <LinearLayout
60: Android:layout_width="fill_parent" android:layout_height="wrap_content"
61: Android:orientation="horizontal" android:padding="1dip" android:gravity="center_vertical">
62: <TextView
63: Android:layout_width="wrap_content"
64: Android:layout_height="wrap_content"
65: Android:text="分数: "/>
66: <EditText
67: Android:id="@+id/score"
68: Android:layout_width="fill_parent"
69: Android:layout_height="wrap_content"/>
70: </LinearLayout>
71: <LinearLayout
72: Android:layout_width="fill_parent" android:layout_height="wrap_content"
73: Android:orientation="horizontal" android:padding="1dip" android:gravity="center_vertical">
74: <TextView
75: Android:layout_width="wrap_content"
76: Android:layout_height="wrap_content"
77: Android:text="地址: "/>
78: <EditText
79: Android:id="@+id/address"
80: Android:layout_width="fill_parent"
81: Android:layout_height="wrap_content"/>
82: </LinearLayout>
83:
84: </LinearLayout>
students.xml源码:
1: <?xml version="1.0" encoding="utf-8"?>
2: <LinearLayout
3: xmlns:Android="http://schemas.android.com/apk/res/android"
4: Android:orientation="vertical"
5: Android:layout_width="fill_parent"
6: Android:layout_height="fill_parent">
7: <TextView
8: Android:layout_width="fill_parent"
9: Android:layout_height="wrap_content"
10: Android:gravity="center"
11: Android:text="ORMLite-Students"/>
12: <ListView
13: Android:id="@+id/stulist"
14: Android:layout_width="fill_parent"
15: Android:layout_height="fill_parent"/>
16: </LinearLayout>
studentitem.xml源码:
1:
2: <?xml version="1.0" encoding="utf-8"?>
3: <LinearLayout
4: xmlns:Android="http://schemas.android.com/apk/res/android"
5: Android:orientation="horizontal"
6: Android:layout_width="fill_parent"
7: Android:layout_height="fill_parent">
8: <TextView
9: Android:id="@+id/itemno"
10: Android:layout_width="fill_parent"
11: Android:layout_height="wrap_content"
12: Android:layout_weight="1"
13: Android:text="学号"
14: Android:gravity="center"/>
15: <TextView
16: Android:id="@+id/itemname"
17: Android:layout_width="fill_parent"
18: Android:layout_height="wrap_content"
19: Android:layout_weight="1"
20: Android:text="姓名"
21: Android:gravity="center"/>
22: <TextView
23: Android:id="@+id/itemscore"
24: Android:layout_width="fill_parent"
25: Android:layout_height="wrap_content"
26: Android:layout_weight="1"
27: Android:text="分数"
28: Android:gravity="center"/>
29: </LinearLayout>
【3】包com.andyidea.bean下Student.java源码:
1: package com.andyidea.bean;
2:
3: import java.io.Serializable;
4: import com.j256.ormlite.field.DatabaseField;
5:
6: public class Student implements Serializable {
7:
8: private static final long serialVersionUID = -5683263669918171030L;
9:
10: @DatabaseField(id=true)
11: private String stuNO;
12: @DatabaseField
13: private String name;
14: @DatabaseField
15: private int age;
16: @DatabaseField
17: private String sex;
18: @DatabaseField
19: private double score;
20: @DatabaseField
21: private String address;
22:
23: public String getStuNO() {
24: return stuNO;
25: }
26: public void setStuNO(String stuNO) {
27: this.stuNO = stuNO;
28: }
29:
30: public String getName() {
31: return name;
32: }
33: public void setName(String name) {
34: this.name = name;
35: }
36:
37: public int getAge() {
38: return age;
39: }
40: public void setAge(int age) {
41: this.age = age;
42: }
43:
44: public String getSex() {
45: return sex;
46: }
47: public void setSex(String sex) {
48: this.sex = sex;
49: }
50:
51: public double getScore() {
52: return score;
53: }
54: public void setScore(double score) {
55: this.score = score;
56: }
57:
58: public String getAddress() {
59: return address;
60: }
61: public void setAddress(String address) {
62: this.address = address;
63: }
64:
65: }
【4】包com.andyidea.db下DatabaseHelper.java源码:
1:
2: package com.andyidea.db;
3:
4: import java.sql.SQLException;
5:
6: import Android.content.Context;
7: import Android.database.sqlite.SQLiteDatabase;
8: import Android.util.Log;
9:
10: import com.andyidea.bean.Student;
11: import com.j256.ormlite.Android.apptools.OrmLiteSqliteOpenHelper;
12: import com.j256.ormlite.dao.Dao;
13: import com.j256.ormlite.support.ConnectionSource;
14: import com.j256.ormlite.table.TableUtils;
15:
16: public class DatabaseHelper extends OrmLiteSqliteOpenHelper {
17:
18: private static final String DATABASE_NAME = "ormlite.db";
19: private static final int DATABASE_VERSION = 1;
20:
21: private Dao<Student,Integer> stuDao = null;
22:
23: public DatabaseHelper(Context context){
24: super(context, DATABASE_NAME, null, DATABASE_VERSION);
25: }
26:
27: /**
28: * 创建SQLite数据库
29: */
30: @Override
31: public void onCreate(SQLiteDatabase sqliteDatabase, ConnectionSource connectionSource) {
32: try {
33: TableUtils.createTable(connectionSource, Student.class);
34: } catch (SQLException e) {
35: Log.e(DatabaseHelper.class.getName(), "Unable to create datbases", e);
36: }
37: }
38:
39: /**
40: * 更新SQLite数据库
41: */
42: @Override
43: public void onUpgrade(
44: SQLiteDatabase sqliteDatabase,
45: ConnectionSource connectionSource,
46: int oldVer,
47: int newVer) {
48: try {
49: TableUtils.dropTable(connectionSource, Student.class, true);
50: onCreate(sqliteDatabase, connectionSource);
51: } catch (SQLException e) {
52: Log.e(DatabaseHelper.class.getName(),
53: "Unable to upgrade database from version " + oldVer + " to new "
54: + newVer, e);
55: }
56: }
57:
58: public Dao<Student,Integer> getStudentDao() throws SQLException{
59: if(stuDao == null){
60: stuDao = getDao(Student.class);
61: }
62: return stuDao;
63: }
64:
65: }
【5】包com.andyidea.ormsqlite下源码:
MainActivity.java源码:
1: package com.andyidea.ormsqlite;
2:
3: import java.sql.SQLException;
4:
5: import com.andyidea.bean.Student;
6: import com.andyidea.db.DatabaseHelper;
7: import com.j256.ormlite.Android.apptools.OrmLiteBaseActivity;
8: import com.j256.ormlite.dao.Dao;
9:
10: import Android.content.Intent;
11: import Android.os.Bundle;
12: import Android.view.Menu;
13: import Android.view.MenuItem;
14: import Android.widget.EditText;
15:
16: public class MainActivity extends OrmLiteBaseActivity<DatabaseHelper> {
17:
18: private EditText stuNO;
19: private EditText stuName;
20: private EditText stuAge;
21: private EditText stuSex;
22: private EditText stuScore;
23: private EditText stuAddress;
24:
25: private Student mStudent;
26: private Dao<Student,Integer> stuDao;
27:
28: private final int MENU_ADD = Menu.FIRST;
29: private final int MENU_VIEWALL = Menu.FIRST+1;
30: private final int MENU_EDIT = Menu.FIRST+2;
31:
32: private Bundle mBundle = new Bundle();
33:
34: /** Called when the activity is first created. */
35: @Override
36: public void onCreate(Bundle savedInstanceState) {
37: super.onCreate(savedInstanceState);
38: setContentView(R.layout.main);
39:
40: initializeViews();
41: }
42:
43: /**
44: * 初始化UI界面
45: */
46: private void initializeViews(){
47: stuNO = (EditText)findViewById(R.id.stuno);
48: stuName = (EditText)findViewById(R.id.name);
49: stuAge = (EditText)findViewById(R.id.age);
50: stuSex = (EditText)findViewById(R.id.sex);
51: stuScore = (EditText)findViewById(R.id.score);
52: stuAddress = (EditText)findViewById(R.id.address);
53:
54: mBundle = getIntent().getExtras();
55: if(mBundle!=null && mBundle.getString("action").equals("viewone")){
56: mStudent = (Student)getIntent().getSerializableExtra("entity");
57: setStudentUIData(mStudent);
58: }
59:
60: if(mBundle!=null && mBundle.getString("action").equals("edit")){
61: mStudent = (Student)getIntent().getSerializableExtra("entity");
62: setStudentUIData(mStudent);
63: }
64: }
65:
66: @Override
67: public boolean onPrepareOptionsMenu(Menu menu) {
68: if(mBundle!=null && mBundle.getString("action").equals("viewone"))
69: return false;
70: else
71: return super.onPrepareOptionsMenu(menu);
72:
73: }
74:
75: @Override
76: public boolean onCreateOptionsMenu(Menu menu) {
77: if(mBundle!=null && mBundle.getString("action").equals("edit")){
78: menu.add(1,MENU_EDIT,0,"保存");
79: }else{
80: menu.add(0,MENU_ADD,0,"增加");
81: menu.add(0,MENU_VIEWALL,0,"查看");
82: }
83: return super.onCreateOptionsMenu(menu);
84: }
85:
86: @Override
87: public boolean onOptionsItemSelected(MenuItem item) {
88: switch (item.getItemId()) {
89: case MENU_ADD:
90: try {
91: stuDao = getHelper().getStudentDao();
92: getStudentData();
93: if(mStudent != null){
94: //创建记录项
95: stuDao.create(mStudent);
96: }
97: } catch (SQLException e) {
98: e.printStackTrace();
99: }
100: break;
101: case MENU_VIEWALL:
102: Intent intent = new Intent();
103: intent.setClass(MainActivity.this, StudentListActivity.class);
104: startActivity(intent);
105: break;
106: case MENU_EDIT:
107: try {
108: getStudentData();
109: stuDao = getHelper().getStudentDao();
110: if(mStudent != null){
111: //更新某记录项
112: stuDao.update(mStudent);
113: }
114: } catch (SQLException e) {
115: e.printStackTrace();
116: }
117: break;
118: default:
119: break;
120: }
121: return super.onOptionsItemSelected(item);
122: }
123:
124: /**
125: * 获取界面值(实体信息)
126: */
127: private void getStudentData(){
128: mStudent = new Student();
129: mStudent.setStuNO(stuNO.getText().toString());
130: mStudent.setName(stuName.getText().toString());
131: mStudent.setAge(Integer.parseInt(stuAge.getText().toString()));
132: mStudent.setSex(stuSex.getText().toString());
133: mStudent.setScore(Double.parseDouble(stuScore.getText().toString()));
134: mStudent.setAddress(stuAddress.getText().toString());
135: }
136:
137: /**
138: * 赋值给UI界面
139: * @param student
140: */
141: private void setStudentUIData(Student student){
142: stuNO.setText(student.getStuNO());
143: stuName.setText(student.getName());
144: stuAge.setText(String.valueOf(student.getAge()));
145: stuSex.setText(student.getSex());
146: stuScore.setText(String.valueOf(student.getScore()));
147: stuAddress.setText(student.getAddress());
148: }
149: }
StudentListActivity.java源码:
1:
2: package com.andyidea.ormsqlite;
3:
4: import java.sql.SQLException;
5: import java.util.List;
6:
7: import Android.app.AlertDialog;
8: import Android.content.Context;
9: import Android.content.DialogInterface;
10: import Android.content.Intent;
11: import Android.os.Bundle;
12: import Android.view.ContextMenu;
13: import Android.view.ContextMenu.ContextMenuInfo;
14: import Android.view.LayoutInflater;
15: import Android.view.Menu;
16: import Android.view.MenuItem;
17: import Android.view.View;
18: import Android.view.ViewGroup;
19: import Android.widget.AdapterView.AdapterContextMenuInfo;
20: import Android.widget.BaseAdapter;
21: import Android.widget.ListView;
22: import Android.widget.TextView;
23:
24: import com.andyidea.bean.Student;
25: import com.andyidea.db.DatabaseHelper;
26: import com.j256.ormlite.Android.apptools.OrmLiteBaseActivity;
27: import com.j256.ormlite.dao.Dao;
28:
29: public class StudentListActivity extends OrmLiteBaseActivity<DatabaseHelper> {
30:
31: private Context mContext;
32: private ListView lvStudents;
33: private Dao<Student,Integer> stuDao;
34: private List<Student> students;
35: private StudentsAdapter adapter;
36: private Student mStudent;
37:
38: private final int MENU_VIEW = Menu.FIRST;
39: private final int MENU_EDIT = Menu.FIRST+1;
40: private final int MENU_DELETE = Menu.FIRST+2;
41:
42: private int position;
43:
44: @Override
45: public void onCreate(Bundle savedInstanceState) {
46: super.onCreate(savedInstanceState);
47: setContentView(R.layout.students);
48: mContext = getApplicationContext();
49:
50: lvStudents = (ListView)findViewById(R.id.stulist);
51: registerForContextMenu(lvStudents); //注册上下文菜单
52:
53: queryListViewItem();
54:
55: adapter = new StudentsAdapter(students);
56: lvStudents.setAdapter(adapter);
57:
58: }
59:
60: @Override
61: public void onCreateContextMenu(ContextMenu menu, View v,
62: ContextMenuInfo menuInfo) {
63: if(v == lvStudents)
64: position = ((AdapterContextMenuInfo)menuInfo).position;
65:
66: menu.add(0,MENU_VIEW, 0, "查看");
67: menu.add(0,MENU_EDIT, 0, "编辑");
68: menu.add(0,MENU_DELETE,0,"删除");
69: super.onCreateContextMenu(menu, v, menuInfo);
70: }
71:
72: @Override
73: public boolean onContextItemSelected(MenuItem item) {
74: switch (item.getItemId()) {
75: case MENU_VIEW:
76: viewListViewItem(position);
77: break;
78: case MENU_EDIT:
79: editListViewItem(position);
80: break;
81: case MENU_DELETE:
82: deleteListViewItem(position);
83: break;
84: default:
85: break;
86: }
87: return super.onContextItemSelected(item);
88: }
89:
90: /**
91: * 查询记录项
92: */
93: private void queryListViewItem(){
94: try {
95: stuDao = getHelper().getStudentDao();
96: //查询所有的记录项
97: students = stuDao.queryForAll();
98: } catch (SQLException e) {
99: e.printStackTrace();
100: }
101: }
102:
103: /**
104: * 查看记录项
105: * @param position
106: */
107: private void viewListViewItem(int position){
108: mStudent = students.get(position);
109: Intent intent = new Intent();
110: intent.setClass(mContext, MainActivity.class);
111: intent.putExtra("action", "viewone");
112: intent.putExtra("entity", mStudent);
113: startActivity(intent);
114: }
115:
116: /**
117: * 编辑记录项
118: */
119: private void editListViewItem(int position){
120: mStudent = students.get(position);
121: Intent intent = new Intent();
122: intent.setClass(mContext, MainActivity.class);
123: intent.putExtra("action", "edit");
124: intent.putExtra("entity", mStudent);
125: startActivity(intent);
126: }
127:
128: /**
129: * 删除记录项
130: * @param position
131: */
132: private void deleteListViewItem(int position){
133: final int pos = position;
134: AlertDialog.Builder builder2 = new AlertDialog.Builder(StudentListActivity.this);
135: builder2.setIcon(Android.R.drawable.ic_dialog_alert)
136: .setTitle("警告")
137: .setMessage("确定要删除该记录");
138: builder2.setPositiveButton("确定", new DialogInterface.OnClickListener() {
139:
140: @Override
141: public void onClick(DialogInterface dialog, int which) {
142: Student mDelStudent = (Student)lvStudents.getAdapter().getItem(pos);
143: try {
144: stuDao.delete(mDelStudent); //删除记录
145: queryListViewItem();
146: } catch (SQLException e) {
147: e.printStackTrace();
148: }
149:
150: }
151: });
152: builder2.setNegativeButton("取消", new DialogInterface.OnClickListener() {
153:
154: @Override
155: public void onClick(DialogInterface dialog, int which) {
156: dialog.dismiss();
157: }
158: });
159: builder2.show();
160: }
161:
162: class StudentsAdapter extends BaseAdapter{
163:
164: private List<Student> listStu;
165:
166: public StudentsAdapter(List<Student> students){
167: super();
168: this.listStu = students;
169: }
170:
171: @Override
172: public int getCount() {
173: return listStu.size();
174: }
175:
176: @Override
177: public Student getItem(int position) {
178: return listStu.get(position);
179: }
180:
181: @Override
182: public long getItemId(int position) {
183: return position;
184: }
185:
186: @Override
187: public View getView(int position, View convertView, ViewGroup parent) {
188: ViewHolder holder;
189: if(convertView == null){
190: LayoutInflater mInflater = (LayoutInflater) mContext
191: .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
192: convertView = mInflater.inflate(R.layout.studentitem, null);
193: holder = new ViewHolder();
194: holder.tvNO = (TextView)convertView.findViewById(R.id.itemno);
195: holder.tvName = (TextView)convertView.findViewById(R.id.itemname);
196: holder.tvScore = (TextView)convertView.findViewById(R.id.itemscore);
197: convertView.setTag(holder);
198: }else{
199: holder = (ViewHolder)convertView.getTag();
200: }
201:
202: Student objStu = listStu.get(position);
203: holder.tvNO.setText(objStu.getStuNO());
204: holder.tvName.setText(objStu.getName());
205: holder.tvScore.setText(String.valueOf(objStu.getScore()));
206:
207: return convertView;
208: }
209:
210: }
211:
212: static class ViewHolder{
213: TextView tvNO;
214: TextView tvName;
215: TextView tvScore;
216: }
217:
218: }
【6】成功运行程序的截图效果:


![02_thumb[1]_thumb](http://images0.cnblogs.com/blog/198079/201303/11091659-920395287b6241adb937e8a46bf7d89d.png)
![03_thumb[1]_thumb](http://images0.cnblogs.com/blog/198079/201303/11091701-75c36c2250ef4f7183579bc806ad47bd.png)
![04_thumb[1]_thumb](http://images0.cnblogs.com/blog/198079/201303/11091702-31b370fd0f4f4074bbf2a62454de8f06.png)
浙公网安备 33010602011771号