一卷旌收千骑虏,万全身出百重围。这篇文章主要讲述Android数据库框架-----ORMLite 的基本用法相关的知识,希望能为你提供帮助。
ORMLite 是一款非要流行的android平台上的数据库框架,性能优秀,代码简洁;
简述: 优点: 1.轻量级;2.使用简单,易上手;3.封装完善;4.文档全面。
缺点:1.基于反射,效率较低(本人还没有觉得效率低);2.缺少中文翻译文档
准备工作:
- jar包 地址:http://ormlite.com/releases/
- 集成方法:把jar包复制到as的libs文件夹下,并且引用jar包即可
之后创建一个类User,并完成相关配置
@DatabaseTable(tableName="tb_user")//标明数据库中的一张表,表名tb_user public class User {@DatabaseField(generatedId = true)//generatedId 表示id为主键且自动生成 private int id; @DatabaseField(columnName = "name") private String name; @DatabaseField(columnName = "desc") private String desc; public User() { }public User(String name, String desc) { this.name = name; this.desc = desc; }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 getDesc() { return desc; }public void setDesc(String desc) { this.desc = desc; }
}
基本的数据库操作
public class DatabaseHelper extends OrmLiteSqliteOpenHelper{private static final String TABLE_NAME = "sqlite-test.db"; /** * userDao ,每张表对于一个 */ private Dao< User, Integer> userDao; private DatabaseHelper(Context context) { super(context, TABLE_NAME, null, 2); } //创建表 @Override public void onCreate(SQLiteDatabase sqLiteDatabase, ConnectionSource connectionSource) { try { TableUtils.createTable(connectionSource,User.class); } catch (SQLException e) { e.printStackTrace(); } } //更新表 @Override public void onUpgrade(SQLiteDatabase sqLiteDatabase, ConnectionSource connectionSource, int i, int i1) { try { TableUtils.dropTable(connectionSource,User.class,true); //删除操作 onCreate(sqLiteDatabase, connectionSource); //创建 } catch (SQLException e) { e.printStackTrace(); } }private static DatabaseHelper instance; public static synchronized DatabaseHelper getHelper(Context context) { if (instance == null) { synchronized (DatabaseHelper.class) { if (instance == null) instance = new DatabaseHelper(context); } }return instance; }/** * 获得userDao * * @return * @throws SQLException */ public Dao< User, Integer> getUserDao() throws SQLException { if (userDao == null) { userDao = getDao(User.class); } return userDao; } //释放资源 @Override public void close() { super.close(); } }
MainActivity.java
得到操作对象
DatabaseHelper helper = DatabaseHelper.getHelper(this);
1:添加
User user= new User("zhangqie"+ni++, "2B青年"); try { helper.getUserDao().create(user); //返回> 0则成功 } catch (SQLException e) { }
2:删除
try { return helper.getUserDao().deleteById(id); } catch (SQLException e) { } return 0;
3:修改
User user= new User("zhangqie----android", "2B青年");
user.setId(1); //修改Id=1的
try { return helper.getUserDao().update(user); } catch (SQLException e) { } return 0;
4:查询
try { List< User> users=helper.getUserDao().queryForAll(); } catch (SQLException e) { }
以上的实现方式是基本的使用方式;只有一个类User操作的,万一有多个呢,就不好操作了;
接下来的这种方式:通过一个DatabaseHelper类就可以完成所有类的数据库操作
整个DatabaseHelper使用单例只对外公布出一个对象,参考文章:http://www.touchlab.co/2011/10/single-sqlite-connectio
public class DatabaseHelpers extends OrmLiteSqliteOpenHelper {private static final String TABLE_NAME = "sqlite-test.db"; private Map< String,Dao> daos=new HashMap< String, Dao> (); public DatabaseHelpers(Context context){ super(context,TABLE_NAME,null,4); }@Override public void onCreate(SQLiteDatabase sqLiteDatabase, ConnectionSource connectionSource) { try { TableUtils.createTable(connectionSource, User.class); //多个类在此添加即可 //TableUtils.createTable(connectionSource, Article.class); } catch (SQLException e) { e.printStackTrace(); } }@Override public void onUpgrade(SQLiteDatabase sqLiteDatabase, ConnectionSource connectionSource, int i, int i1) { try { TableUtils.dropTable(connectionSource, User.class, true); //TableUtils.dropTable(connectionSource,Article.class,true); //多个类在此添加即可 onCreate(sqLiteDatabase, connectionSource); } catch (SQLException e) { e.printStackTrace(); } }//整个DatabaseHelper使用单例只对外公布出一个对象,保证app中只存在一个SQLite Connection private static DatabaseHelpers instance; /** * 单例获取该Helper * * @param context * @return */ public static synchronized DatabaseHelpers getHelper(Context context) { context = context.getApplicationContext(); if (instance == null) { synchronized (DatabaseHelper.class) { if (instance == null) instance = new DatabaseHelpers(context); } }return instance; }public synchronized Dao getDao(Class clazz) throws SQLException { Dao dao = null; String className = clazz.getSimpleName(); if (daos.containsKey(className)) { dao = daos.get(className); } if (dao == null) { dao = super.getDao(clazz); daos.put(className, dao); } return dao; }/** * 释放资源 */ @Override public void close() { super.close(); for (String key : daos.keySet()) { Dao dao = daos.get(key); dao = null; } } }
我已User为例介绍即可
用一个UserDao来完成相关操作,多个实体类建立多个 XXDao操作了即可
public class UserDao {private Context context; //通过此集合和DatabaseHelper的Map集合相对应Dao中的类 如User 就可以随意变换了 private Dao< User, Integer> userDaoOpe; private DatabaseHelpers helper; public UserDao(Context context) { this.context = context; try { helper = DatabaseHelpers.getHelper(context); userDaoOpe = helper.getDao(User.class); } catch (SQLException e) { e.printStackTrace(); } }/** * 增加一个用户 * @param user */ public int add(User user) { try { return userDaoOpe.create(user); } catch (SQLException e) { e.printStackTrace(); } return 0; }/** * 增加一个用户 * @param id */ public int delete(int id) { try { return userDaoOpe.deleteById(id); } catch (SQLException e) { e.printStackTrace(); } return 0; } /** * 修改 * @param user */ public int update(User user) { try { returnuserDaoOpe.update(user); } catch (SQLException e) { e.printStackTrace(); } return 0; } /** * 查询 */ public List< User> query() { try { return userDaoOpe.queryForAll(); } catch (SQLException e) { e.printStackTrace(); } return null; }public User get(int id) { try { return userDaoOpe.queryForId(id); } catch (SQLException e) { e.printStackTrace(); } return null; }}
得到操作对象UserDao
UserDao userDaos=new UserDao(this);
1:添加
User u1 = new User("zq"+(ni+=5), "2B青年"); userDaos.add(u1);
2:删除
int is=userDaos.delete(2); //成功1失败 0
3:修改
User u2 = new User("张三丰", "老道"); u2.setId(1); userDaos.update(u2);
4:查询
List< User> users=userDaos.query(); String username=""; for (int i=0; i< users.size(); i++){ username+=+users.get(i).getId()+"-----"+users.get(i).getName()+"\\n"; } textView.setText(username);
两种效果差不多,实现方式不同而已,运行效果如下:
文章图片
由于代码太多,就不一一贴出来了,直接下载源码即可 源码点击下载
上面简单介绍了如何使用ORMLite框架,Android数据库框架-----ORMLite关联表的使用 将对其用法进行深入的介绍。
不足之处请留言指正!有问题的可以给我留言!谢谢!
【Android数据库框架-----ORMLite 的基本用法】
推荐阅读
- android --多线程下载
- Android Studio报Error:Execution failed for task &#39;:Companion:preDexDebug&#39;.
- Choosing between .NET Core and .NET Framework for server apps
- 快学Scala 第二课 (apply, if表达式,循环,函数的带名参数,可变长参数,异常)
- JavaFX打包到Android上
- android mvp高速开发框架介绍(dileber的简单介绍)
- Android-风格和主题
- @RequestMapping-限定参数映射
- 翻译View Frustum Culling --3 Clip Space Approach – Extracting the Planes