一直想对数据库的操作进行一个用法整理,翻开现在比较火的GreenDao,里面已经被封装的看不出来最基本CRUD语法了,当然不是说GreenDao不好,至少对初学者来说不太好,学习就应该依序渐进,知其然知其所以然才好。这篇参照某大神blog,加上自己理解整理而来,属于较早期的数据库操作模式。希望对初学者有好的帮助
添加了数据库可视化插件debug_db,方便查看。
对象关系映射(英语:(Object Relational Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换[1] 。从效果上说,它其实是创建了一个可在编程语言里使用的–“虚拟对象数据库”。简单的理解为对象和数据库表字段的简单映射关系
http://ormlite.com/releases/ 在这两版的基础进行操作
使用不同注解来标示表属性,(字段名,字段类型,主键,外键 etc)
@DatabaseTable(tableName = "tb_article") public class Article { @DatabaseField(generatedId = true) private int id; @DatabaseField private String title; @DatabaseField(canBeNull = true, foreign = true, columnName = "user_id", foreignAutoRefresh = true) private User user; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public User getUser() { return user; } public void setUser(User user) { this.user = user; } @Override public String toString() { return "Article [id=" + id + ", title=" + title + ", user=" + user + "]"; } }一般写法就是Dao 和 Bean 对应,dao是对具体表操作的封装,而Bean则是表的映射
package dragger2.nuoyuan.com.myapplication.db; import android.content.Context; import com.j256.ormlite.dao.Dao; import java.sql.SQLException; import java.util.List; import dragger2.nuoyuan.com.myapplication.bean.Student; public class StudentDao { private Context context; private Dao<Student, Integer> userDaoOpe; private DatabaseHelper helper; public StudentDao(Context context) { this.context = context; try { helper = DatabaseHelper.getHelper(context); userDaoOpe = helper.getDao(Student.class); } catch (SQLException e) { e.printStackTrace(); } } /** * 增加一个用户 * * @param student * @throws SQLException */ public void add(Student student) { try { userDaoOpe.create(student); } catch (SQLException e) { e.printStackTrace(); } } public Student get(int id) { try { return userDaoOpe.queryForId(id); } catch (SQLException e) { e.printStackTrace(); } return null; } public List<Student> queryAll() { try { return userDaoOpe.queryForAll(); } catch (SQLException e) { e.printStackTrace(); } return null; } }对数据库操作需要用到Sqlite提供的底层Api SQLiteOpenHelper 的帮助,OrmLiteSqliteOpenHelper已经在SQLiteOpenHelper的基础上做了二次封装,我们直接继承OrmLiteSqliteOpenHelper类实现 onCreate(SQLiteDatabase database,ConnectionSource connectionSource) 和 onUpgrade(SQLiteDatabase database, ConnectionSource connectionSource, int oldVersion, int newVersion) ,来进行数据库的操作以及数据库的升级操作 然后使用单例公布出一个创建实例的方法,getHelper用于获取我们的操作数据库的OpenHelper 实例。
由于测试使用Context环境,无法用AndroidStudo中单元测试来测,推荐在Eclipse中进行尝试测试,需要在Eclipse中配置测试环境
package dragger2.nuoyuan.com.myapplication; import com.j256.ormlite.dao.Dao; import java.sql.SQLException; import java.util.List; import dragger2.nuoyuan.com.myapplication.bean.Article; import dragger2.nuoyuan.com.myapplication.bean.Student; import dragger2.nuoyuan.com.myapplication.bean.User; import dragger2.nuoyuan.com.myapplication.db.ArticleDao; import dragger2.nuoyuan.com.myapplication.db.DatabaseHelper; import dragger2.nuoyuan.com.myapplication.db.StudentDao; import dragger2.nuoyuan.com.myapplication.db.UserDao; import dragger2.nuoyuan.com.myapplication.utils.L; public class TestUtils { public void testAddArticle() { User u = new User(); u.setName("000"); new UserDao(MyApp.context).add(u); Article article = new Article(); article.setTitle("hello world"); article.setUser(u); new ArticleDao(MyApp.context).add(article); } public void testGetArticleById() { Article article = new ArticleDao(MyApp.context).get(1); L.e(article.getUser() + " , " + article.getTitle()); } public void testGetArticleWithUser() { Article article = new ArticleDao(MyApp.context).getArticleWithUser(1); L.e(article.getUser() + " , " + article.getTitle()); } public void testListArticlesByUserId() { List<Article> articles = new ArticleDao(MyApp.context).listByUserId(1); L.e(articles.toString()); } public void testGetUserById() { User user = new UserDao(MyApp.context).get(1); L.e(user.getName()); if (user.getArticles() != null) for (Article article : user.getArticles()) { L.e(article.toString()); } } public void testAddStudent() throws SQLException { Dao dao = DatabaseHelper.getHelper(MyApp.context).getDao(Student.class); Student student = new Student(); student.setDao(dao); student.setName("杨卫超"); student.create(); } public String querystudentDao() throws SQLException { Student user = new StudentDao(MyApp.context).get(1); return user.toString(); } }查看效果
注:ORMLite还提供了一些基类ORMLiteBaseActivity,ORMLiteBaseService之类的,便于数据库操作的,这里不做考虑,毕竟项目中很大可能自己也需要继承自己的BaseActvity之类的。
简单的使用到此,ORMLITE 对象映射到表分析
–
引用 Orm入门 http://blog.csdn.net/lmj623565791/article/details/39121377
