转载出处:http://blog.csdn.net/lmj623565791/article/details/39121377
大家在Android项目中或多或少的都会使用数据库,为了提高我们的开发效率,当然少不了数据库ORM框架了,尤其是某些数据库操作特别频繁的app;本篇博客将详细介绍ORMLite的简易用法。
使用方法:
1、下载ORMLite的jar包:对于Android为:ormlite-android-4.48.jar 和 ormlite-core-4.48.jar ;
2、有了jar包就可以开始配置Bean类了
package db; import com.j256.ormlite.field.DatabaseField; import com.j256.ormlite.table.DatabaseTable; /** * Created by wls on 2016/10/4. */ @DatabaseTable(tableName = "tb_student") public class Student { @DatabaseField(generatedId = true) private int id; @DatabaseField(columnDefinition = "name") private String name; @DatabaseField(columnDefinition = "sex") private String sex; @DatabaseField(columnDefinition = "address") private String address; @DatabaseField(columnDefinition = "age") private int age; public Student() { } public Student(String name, String sex, String address, int age) { this.name = name; this.sex = sex; this.address = address; this.age = age; } public int getId() { return id; } public void setId(int id) { this.id = id; } 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; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
首先在Student类上添加@DatabaseTable(tableName = "tb_student"),标明这是数据库中的一张表,标明为tb_student,
然后分别在属性上添加@DatabaseField(columnName = "name") ,columnName的值为该字段在数据中的列名
@DatabaseField(generatedId = true) ,generatedId 表示id为主键且自动生成3、编写Dao类,原生的数据库操作,需要继承SQLiteOpenHelper,这里我们需要继承OrmLiteSqliteOpenHelper,看代码:
package db; 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; import java.sql.SQLException; /** * Created by wls on 2016/10/4. */ public class DatabaseHelper extends OrmLiteSqliteOpenHelper{ private static final String TABLE_NAME = "sqlite-test.db"; private static DatabaseHelper daHelper; /** * studentDao 每张表对于一个 */ private Dao<Student,Integer> studentDao; public DatabaseHelper(Context context) { super(context, TABLE_NAME, null, 1); } @Override public void onCreate(SQLiteDatabase sqLiteDatabase, ConnectionSource connectionSource) { try { TableUtils.createTable(connectionSource,Student.class); } catch (SQLException e) { e.printStackTrace(); } } @Override public void onUpgrade(SQLiteDatabase sqLiteDatabase, ConnectionSource connectionSource, int i, int i1) { try { TableUtils.dropTable(connectionSource,Student.class,true); onCreate(sqLiteDatabase,connectionSource); } catch (SQLException e) { e.printStackTrace(); } } /** * 单里获取该Helper * @param context * @return */ public static synchronized DatabaseHelper getDaHelper(Context context){ if(daHelper == null){ synchronized (DatabaseHelper.class){ if(daHelper == null){ daHelper = new DatabaseHelper(context); } } } return daHelper; } /** * 获得studentDao * @return * @throws SQLException */ public Dao<Student, Integer> getStudentDao() throws SQLException{ if(studentDao == null){ studentDao = getDao(Student.class); } return studentDao; } /** * 释放资源 */ @Override public void close() { super.close(); studentDao = null; } }
这里我们需要继承OrmLiteSqliteOpenHelper,其实就是间接继承了SQLiteOpenHelper
然后需要实现两个方法:
1、onCreate(SQLiteDatabase database,ConnectionSource connectionSource)
创建表,我们直接使用ormlite提供的TableUtils.createTable(connectionSource, User.class);进行创建~
2、onUpgrade(SQLiteDatabase database, ConnectionSource connectionSource, int oldVersion, int newVersion)
更新表,使用ormlite提供的TableUtils.dropTable(connectionSource, User.class, true);进行删除操作~
删除完成后,别忘了,创建操作:onCreate(database, connectionSource);
然后使用单例公布出一个创建实例的方法,getHelper用于获取我们的help实例;
最后我们可能会有很多表嘛,每个表一般我们都会单独写个Dao用于操作,这里为了简单我并没有抽取出来,直接写在helper中:
4、把StudentDao类单独提取出来:
package db; import android.content.Context; import java.sql.SQLException; /** * Created by wls on 2016/10/4. */ public class StudentDao { private Context context; public StudentDao(Context context) { this.context = context; } public void add(Student student){ try { DatabaseHelper.getDaHelper(context).getStudentDao().create(student); } catch (SQLException e) { } }//...... }
5、具体的操作配置(增删改查)
package db; import android.content.Context; import android.test.AndroidTestCase; import android.util.Log; import java.sql.SQLException; import java.util.List; /** * Created by wls on 2016/10/4. */ public class StudentHelper extends AndroidTestCase{ private static final String TAG = "print"; private DatabaseHelper datahelper; public StudentHelper(Context context){ datahelper = DatabaseHelper.getDaHelper(context); } /** * 插入数据 * @param name * @param sex * @param address * @param age */ public void insertData(String name,String sex,String address,int age){ Student student = new Student(name,sex,address,age); try { datahelper.getStudentDao().create(student); Log.d(TAG, "insertData: "+"插入成功"); } catch (SQLException e) { e.printStackTrace(); } } /** * 查询数据(全部) */ public void queryAllData(){ try { List<Student> list = datahelper.getStudentDao().queryForAll(); for(int i = 0;i<list.size();i++){ Log.d(TAG, "queryAllData: "+list.get(i).getName()+"----"+list.get(i).getSex() +"----"+list.get(i).getAddress()+"----"+list.get(i).getAge()); } } catch (SQLException e) { e.printStackTrace(); } } /** * 查询数据(根据数据) * @param address */ public void queryData(String address){ try { List<Student> list = datahelper.getStudentDao().queryBuilder().where().eq("address",address).query(); for(int i = 0;i<list.size();i++){ Log.d(TAG, "queryData: "+list.get(i).getName()+"----"+list.get(i).getSex() +"----"+list.get(i).getAddress()+"----"+list.get(i).getAge()); } } catch (SQLException e) { e.printStackTrace(); } } /** * 更新数据 * @param name * @param sex * @param address * @param age */ public void updata(String name,String sex,String address,int age){ try { List<Student> list = datahelper.getStudentDao().queryBuilder().where().eq("sex",sex).query(); if(list.size()>0){ Student student = new Student(name,sex,address,age); student.setId(list.get(0).getId()); datahelper.getStudentDao().update(student); } } catch (SQLException e) { e.printStackTrace(); } } /** * 删除(根据条件) * @param name */ public void delectData(String name){ try { List<Student> list = datahelper.getStudentDao().queryBuilder().where().eq("name",name).query(); int id = list.get(0).getId(); datahelper.getStudentDao().deleteById(id); } catch (SQLException e) { e.printStackTrace(); } } /** * 删除全部 */ public void delectAllData(){ try { datahelper.getStudentDao().deleteBuilder().delete(); List<Student> list = datahelper.getStudentDao().queryForAll(); Log.d(TAG, "delectAllData: "+list.size()); } catch (SQLException e) { e.printStackTrace(); } } }
6、至此,基本的配置结束,下面为测试代码:
XML文件:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.example.wls.ormliteandroid.MainActivity"> <Button android:id="@+id/insertData" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="14sp" android:text="插入数据" android:onClick="btnClick"/> <Button android:id="@+id/queryData" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="14sp" android:text="查询数据" android:onClick="btnClick"/> <Button android:id="@+id/upData" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="14sp" android:text="修改数据" android:onClick="btnClick"/> <Button android:id="@+id/delectData" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="14sp" android:text="删除数据" android:onClick="btnClick"/> </LinearLayout>MainActivtiy:
public class MainActivity extends AppCompatActivity { private Student student; private StudentHelper studentHelper; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); student = new Student(); studentHelper = new StudentHelper(this); } public void btnClick(View view){ switch (view.getId()){ case R.id.insertData: studentHelper.insertData("进藤光","男","东京",12); studentHelper.insertData("藤原佐为","男","神户",1000); studentHelper.insertData("小明","女","东京",10); studentHelper.insertData("塔矢亮","男","东京",12); studentHelper.insertData("小红","女","北京",15); break; case R.id.queryData: studentHelper.queryAllData(); studentHelper.queryData("东京"); break; case R.id.upData: studentHelper.updata("进藤光","男","东京",20); break; case R.id.delectData: // studentHelper.delectData("小明"); studentHelper.delectAllData(); break; } } }根据打印的LOG可观察不同的操作所展示的效果。对于该框架的进一步了解,请看: http://blog.csdn.net/lmj623565791/article/details/39122981