Android中内置了sqlite,但是常用的开发语言java是面向对象的,而数据库是关系型的,二者之间的转化每次都很麻烦。(作为程序员,应该学会偷懒)而Java Web开发中有很多orm框架(其实我没学过java web),但是想直接放到Android上用有些麻烦。尝试了一下找Android的orm框架,于是便发现了ORMLite。
首先到官方网站了解一下ormlite:http://ormlite.com/。
然后下载两个jar包,一个是ormlite-core-4.48.jar,另一个是ormlite-android-4.48.jar。(当然,也可以下载对应文档)下载地址为:http://ormlite.com/releases/。
接着做一个简单的操作实现吧(实现对数据库的创表以及增删查改)。
新建一个工程名为“zhj_ORMLite”,包名为“com.topcsa.zhj_ormlite”,选择SDK版本为14,将ormlite-core-4.48.jar和ormlite-android-4.48.jar添加带项目当中。
创建一个实体类Person,这个类就是需要创建的表。
代码中的@DatabaseTable 指定类对应的表明,@DatabaseField 对应的字段名
package com.topcsa.zhj_ormlite; import com.j256.ormlite.field.DatabaseField; import com.j256.ormlite.table.DatabaseTable; @DatabaseTable(tableName = "tb_Person") public class Person { public Person() { } public Person(String name, int age) { super(); this.name = name; this.age = age; } @DatabaseField(generatedId = true)//generatedId 表示id为主键且自动生成 private int id; @DatabaseField(columnName = "name") private String name; @DatabaseField(columnName = "age") private int 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 int getAge() { return age; } public void setAge(int age) { this.age = age; } }
创建一个database helper类,继承OrmLiteSqliteOpenHelper 实现 onCreate 和 onUpgrade ,这个类类似于 android 的SQLiteOpenHelper方法 ,大家应该知道这个类的作用了,创建删除数据库应该使用TableUtils工具类的方法。
创建表,我们直接使用ormlite提供的TableUtils.createTable(connectionSource, Person.class);进行创建。
更新表,使用ormlite提供的TableUtils.dropTable(connectionSource, Person.class, true);进行删除操作。
package com.topcsa.zhj_ormlite; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.util.Log; 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 DBhelper extends OrmLiteSqliteOpenHelper { private static final String TABLE_NAME = "ormlite.db"; private static DBhelper instance; public DBhelper(Context context) { super(context, TABLE_NAME, null, 1); // TODO Auto-generated constructor stub } /** * 单例获取该Helper * * @param context * @return */ public static synchronized DBhelper getHelper(Context context) { if (instance == null) { synchronized (DBhelper.class) { if (instance == null) instance = new DBhelper(context); } } return instance; } @Override public void onCreate(SQLiteDatabase database, ConnectionSource connectionSource) { try { TableUtils.createTable(connectionSource, Person.class); Log.d("DBhelper", "创建表成功"); } catch (java.sql.SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } @Override public void onUpgrade(SQLiteDatabase database, ConnectionSource connectionSource, int oldVersion, int newVersion) { try { TableUtils.dropTable(connectionSource, Person.class, true); } catch (java.sql.SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } onCreate(database, connectionSource); } }
创建DAO类,建立PersonDao.java。
package com.topcsa.zhj_ormlite; import java.sql.SQLException; import java.util.List; import android.content.Context; import android.util.Log; import com.j256.ormlite.dao.Dao; public class PersonDao { Context con; private DBhelper helper; private Dao<Person, Integer> personDao; // 构造函数 public PersonDao(Context con) { helper = DBhelper.getHelper(con); this.con = con; } // 每个表一般我们都会单独写个Dao用于操作 public Dao<Person, Integer> getPersonDao() throws java.sql.SQLException { if (personDao == null) { personDao = helper.getDao(Person.class); } return personDao; } // 根据ID查询 public Person selectPerson(int i) { try { Person p = getPersonDao().queryForId(i); Log.d("TAG", "查询ID为" + i + "的人为:" + p.getName()); return p; } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } // 添加某人 public void addPerson(Person p) { try { getPersonDao().create(p); Log.d("TAG", "添加:" + p.getName()); } catch (SQLException e) { } } // 删除某人 public void deletePerson(Person p) { try { Log.d("TAG", "删除ID为" + p.getId() + "的人:" + p.getName()); getPersonDao().deleteById(p.getId()); } catch (SQLException e) { } } // 更新某人 public void updatePerson(Person p, String name) { try { Log.d("TAG", "修改数据前姓名为:" + p.getName()); p.setName(name); getPersonDao().update(p); Log.d("TAG", "修改数据后姓名为:" + p.getName()); } catch (SQLException e) { } } // 查询所有人 public List<Person> showPersonAll() { try { List<Person> list = getPersonDao().queryForAll(); Log.d("TAG", "查询所有数据条数:" + list.size()); for (int i = 0; i < list.size(); i++) { Log.d("TAG", "单条数据姓名:" + list.get(i).getName()); } return list; } catch (SQLException e) { } return null; } }
最后,在Activity中具体实现:
package com.topcsa.zhj_ormlite; import android.app.Activity; import android.os.Bundle; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Person p = new Person("赵江", 21); PersonDao pdao = new PersonDao(this); try { pdao.addPerson(p); p = new Person("黄秋", 21); pdao.addPerson(p); p = new Person("何权利", 21); pdao.addPerson(p); p = new Person("任贵权", 21); pdao.addPerson(p); p = new Person("涂俊", 21); pdao.addPerson(p); pdao.showPersonAll(); System.out .println("-------------------------------天王盖地虎------------------------------"); Person p1 = pdao.selectPerson(2); pdao.updatePerson(p1, "~~~~苏苏~~~~"); p = pdao.selectPerson(1); pdao.deletePerson(p); pdao.showPersonAll(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
运行结果如下: