实例化数据库__Litepal的简单使用
来源:互联网 发布:h3c路由器查看端口8080 编辑:程序博客网 时间:2024/05/18 09:37
导包
compile 'org.litepal.android:core:1.6.0'
初始化litepal
<application android:name="org.litepal.LitePalApplication" 如果有自己的application,那么继承于LitePalApplication 并在自定义的Application中的oncreate()中 LitePal.initialize(this)
创建数据model类
继承DataSupportpublic class Model extends DataSupport { //必须为private否则不能被添加为数据库 private String name; private Byte img; public String getName() { return name; } public void setName(String name) { this.name = name; } public Byte getImg() { return img; } public void setImg(Byte img) { this.img = img; }}
在项目的assets目录下面新建一个litepal.xml文件
创建assets目录在as中将视图切换为project模式,右键main,new folder <!-- <dbname>是数据库的名字 <version>是数据库的版本号 <list>是数据库的映射模型(数据库表) <mapping>是数据库的映射模型的地址(数据库表结构) --><?xml version="1.0" encoding="utf-8"?><litepal> <dbname value="db" ></dbname> <version value="1" ></version> <list> <mapping class="com.junx.litepaldatabase.Model"></mapping> <mapping class="com.junx.litepaldatabase.User"></mapping> </list></litepal>
本来是想把图片转换成byte[]存储进数据库(别吐槽..)
但发现litepal不支持byte[]数组//bitmap转byte[] public byte[] img(int id) { ByteArrayOutputStream baos = new ByteArrayOutputStream(); Bitmap bitmap = ((BitmapDrawable) getResources().getDrawable(id)).getBitmap(); bitmap.compress(Bitmap.CompressFormat.PNG, 100, baos); return baos.toByteArray(); }//byte[]转bitmap public byte[] Bitmap2Bytes(Bitmap bm) { ByteArrayOutputStream baos = new ByteArrayOutputStream(); bm.compress(Bitmap.CompressFormat.PNG, 100, baos); return baos.toByteArray(); }
那我就保存字符串嘛,把图片转换成base64
public static String bitmapToBase64(Bitmap bitmap) { String result = null; ByteArrayOutputStream baos = null; try { if (bitmap != null) { baos = new ByteArrayOutputStream(); //如果有透明的部分,解码后该背景会变黑 //有需要就将格式改为png bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos); baos.flush(); baos.close(); byte[] bitmapBytes = baos.toByteArray(); result = Base64.encodeToString(bitmapBytes, Base64.DEFAULT); } } catch (IOException e) { e.printStackTrace(); } finally { try { if (baos != null) { baos.flush(); baos.close(); } } catch (IOException e) { e.printStackTrace(); } } return result; } public static Bitmap base64ToBitmap(String base64Data) { byte[] bytes = Base64.decode(base64Data, Base64.DEFAULT); return BitmapFactory.decodeByteArray(bytes, 0, bytes.length ); }
创建数据库
public class hehe extends DataSupport { private String name; private byte[] bytes; public String getName() { return name; } public void setName(String name) { this.name = name; } public byte[] getBytes() { return bytes; } public void setBytes(byte[] bytes) { this.bytes = bytes; }}
添加到映射表中<?xml version="1.0" encoding="utf-8"?><litepal> <dbname value="db" ></dbname> <version value="1" ></version> <list> <mapping class="com.junx.litepaldatabase.hehe"></mapping> </list></litepal>
升级数据库
//添加新的字段或者新建一个表public class hehe extends DataSupport { private String name; private byte[] bytes; //添加新的字段 private String updateString; public String getUpdateString() { return updateString; } public void setUpdateString(String updateString) { this.updateString = updateString; } public String getName() { return name; } public void setName(String name) { this.name = name; } public byte[] getBytes() { return bytes; } public void setBytes(byte[] bytes) { this.bytes = bytes; }}
将映射表中的版本号+1<?xml version="1.0" encoding="utf-8"?><litepal> <dbname value="db" ></dbname> <version value="2" ></version> //原本为2 <list> <mapping class="com.junx.litepaldatabase.hehe"></mapping> </list></litepal>
增加新的数据
//为了实现数据的CURD操作,必须Model继承DataSupport//只是创建表的话可以不继承,在映射表中添加映射即可public class hehe extends DataSupport { private String name; private byte[] bytes; public String getName() { return name; } public void setName(String name) { this.name = name; } public byte[] getBytes() { return bytes; } public void setBytes(byte[] bytes) { this.bytes = bytes; }}
new hehe().save();//保存到数据库
更新数据
//获取到旧数据以后修改,执行save()方法即可保存 Model model = DataSupport.findLast(Model.class); model.setName("newName"); model.save(); //批量修改 hehe last = DataSupport.findLast(hehe.class); last.setName("newName"); //约束参数为约束条件,=的作用为equal,不传入参数就是全部更新 last.updateAll("name!=?","newName");
删除数据
//删除指定数据 hehe last = DataSupport.findLast(hehe.class); last.delete();//删除指定类型的全部数据,返回的是删除成功的数量 int i = DataSupport.deleteAll(hehe.class);//删除指定约束条件的 for (int i = 0; i <50 ; i++) { hehe hehe = new hehe(); hehe.setName(i%2==0?"should be deleted":"should not be deleted"); hehe.save(); } //i为25 int i = DataSupport.deleteAll(hehe.class, "name=?", "should be deleted"); //i为50 int i = DataSupport.deleteAll(hehe.class, "name=? or name=?","should be deleted","should not be deleted");
查询数据
//查询指定类型的全部数据List<hehe> all = DataSupport.findAll(hehe.class);//也可以指定idList<hehe> all = DataSupport.findAll(hehe.class, 0, 1);//查询表中的第一条数据 List<hehe> all = DataSupport.findAll(hehe.class, 0, 1); //查询指定表的第一个数据 hehe first = DataSupport.findFirst(hehe.class); //查询指定表的最后一个数据 hehe last = DataSupport.findLast(hehe.class); //下面的查询方式可以链式调用 //查询指定约束条件的数据,对应sql中的where List<hehe> lists = DataSupport.where("name!=?", "null").find(hehe.class); //指定结果的排序方式,对应sql中的order by DataSupport.order("price desc").find(hehe.class); //指定查询结果的数量 DataSupport.limit(3).find(hehe.class); //指定查询结果的偏移量,例如查询低2 3 4条数据时 DataSupport.limit(3).offset(1).find(hehe.class); //原生的查询方式 Cursor c = DataSupport.findBySQL("select * from hehe"); if (c!=null){ Log.v("meee",getClass()+":\n"+""); while(c.moveToNext()){ int name = c.getColumnIndex("name"); String nameString = c.getString(name); } c.close(); }
android中cursor的概念和使用方法
Cursor 是每行的集合。使用 moveToFirst() 定位第一行。你必须知道每一列的名称。你必须知道每一列的数据类型。Cursor 是一个随机的数据源。
if (c!=null){ Log.v("meee",getClass()+":\n"+""); while(c.moveToNext()){ int name = c.getColumnIndex("name"); String nameString = c.getString(name); } }
cursor的使用方法
private void CursorApi(Cursor cursor){ //关闭游标,释放资源 cursor.close(); //在缓冲区中检索请求的列的文本,将将其存储// cursor.copyStringToBuffer(int,chararraybuffer); //返回所有列的总数 cursor.getColumnCount(); //返回指定列的名称,如果不存在返回-1 cursor.getColumnIndex("columnName"); //从0开始返回指定列的名称,如果不存在抛出IllegalArgumentException cursor.getColumnIndexOrThrow("columnName"); //从给定的索引返回列名 cursor.getColumnName(0); //返回列名的String[] cursor.getColumnNames(); //返回行数 cursor.getCount(); //移动光标到第一行 cursor.moveToFirst(); //移动光标到最后一行 cursor.moveToLast(); //移动光标到下一行 cursor.moveToNext(); //移动光标到指定行数 cursor.moveToPosition(0); //移动光标到上一行 cursor.moveToPrevious(); }
阅读全文
0 0
- 实例化数据库__Litepal的简单使用
- Android使用SQLite数据库的简单实例
- java JDBC:一个数据库的简单使用实例
- 数据库的简单使用
- 反射使用的简单实例
- GetOpenFileName的简单使用实例
- 使用curl的简单实例
- 使用curl的简单实例
- Actionbar使用的简单实例
- Memcached的简单使用实例
- 使用springJunit的简单实例:
- 简单AsynTask的使用实例
- libcurl的简单实例使用
- netty的简单使用实例
- 使用JDBC连接数据库 查询数据库中内容 简单实例
- 简单的sql数据库触发器实例
- java操作mongoDB数据库的简单实例
- SQLite数据库使用回调函数的简单C语言实例(摘自sqlite.org)
- python移植到arm的单板
- PHP 常见工厂设计模式
- 项目管理的“三边六拍”
- Linux下查看和添加环境变量
- iOS Error returned in reply
- 实例化数据库__Litepal的简单使用
- 再讲Java对象和类
- HDU5834_Magic boy Bi Luo with his excited tree_树形DP
- lighttpd中的rewrite
- 算法:php求几个数字之和刚好大于或等于某一个给定的值
- 利用加号+连接字符串详解
- 支持向量机(SVM)
- 一个错误A child container failed during start
- zookeeper 安装 windows环境