在上篇有说到SQLite的文本存储,文本的增删改查,在本篇中主要说SQLite对单张图片的存储。

简单介绍:

SQLiteOpenHelper是一个抽象类。

SQLiteOpenHelper中有两个抽象方法,分别是onCreate()和onUpgrade()。

SQLiteOpenHelper中还有两个非常重要的实例方法,getReadableDatabase()和getWritableDatabase()。

在文章最后仍然会附上DEMO.

先附上一张图

一、此例与文本例互相独立,继承 SQLiteOpenHelper 类实现的 dbHelper 类。

public class BitmpUtil extends SQLiteOpenHelper {public BitmpUtil(Context context) {super(context, "djf", null, 2);}@Overridepublic void onCreate(SQLiteDatabase db) {db.execSQL("Create table img ( id INTEGER PRIMARY KEY AUTOINCREMENT,uname TEXT,uimgae BLOB );");  }@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {}

二、主界面中选择相册中图片,存储,预览

public class MainActivity extends Activity {private Button btnSave, btnQuery;private ImageView selectIcon;private ImageView showIcon;/*数据库操作*/private BitmpUtil bu;private Bitmap bit;/*数据库操作*/protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);bu = new BitmpUtil(MainActivity.this);btnSave = (Button) findViewById(R.id.save);btnQuery = (Button) findViewById(R.id.query);selectIcon = (ImageView) findViewById(R.id.iv_icon);showIcon = (ImageView) findViewById(R.id.iv_showIcon);/*** 选择图片*/selectIcon.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {Intent intent = new Intent(Intent.ACTION_PICK, null);intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,"image/*");startActivityForResult(intent, 0x1);}});/*** 增加*/btnSave.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {SQLiteDatabase db = bu.getWritableDatabase();ContentValues values = new ContentValues();final ByteArrayOutputStream os = new ByteArrayOutputStream();bit.compress(Bitmap.CompressFormat.PNG, 100, os);values.put("uimgae", os.toByteArray());values.put("uname", "zhangsan");db.insert("img", null, values);db.close();Toast.makeText(MainActivity.this, "Success!", Toast.LENGTH_SHORT).show();}});/*** 显示图片*/btnQuery.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {SQLiteDatabase db = null;db = bu.getReadableDatabase();Cursor c = db.query("img", new String[]{"id", "uname", "uimgae"}, "uname=?", new String[]{"zhangsan"}, null, null, null);while (c.moveToNext()) {String id = c.getString(c.getColumnIndex("id"));String name = c.getString(c.getColumnIndex("uname"));byte[] in = c.getBlob(c.getColumnIndex("uimgae"));Bitmap bit = BitmapFactory.decodeByteArray(in, 0, in.length);showIcon.setImageBitmap(bit);}}});}@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {if (requestCode == 0x1 && resultCode == RESULT_OK) {Uri u = data.getData();ContentResolver cr = MainActivity.this.getContentResolver();try {bit = BitmapFactory.decodeStream(cr.openInputStream(u));selectIcon.setImageBitmap(bit);} catch (Exception e) {e.printStackTrace();}}super.onActivityResult(requestCode, resultCode, data);}

三、存储核心代码

 SQLiteDatabase db = bu.getWritableDatabase();ContentValues values = new ContentValues();final ByteArrayOutputStream os = new ByteArrayOutputStream();bit.compress(Bitmap.CompressFormat.PNG, 100, os);values.put("uimgae", os.toByteArray());values.put("uname", "zhangsan");db.insert("img", null, values);db.close();
SQLiteDatabase db = bu.getWritableDatabase();获取数据库,使用ContentValues的对象进行数据插入,使用流写入,最后关闭数据库。

四、读取存储中图片预览

 SQLiteDatabase db = null;db = bu.getReadableDatabase();Cursor c = db.query("img", new String[]{"id", "uname", "uimgae"}, "uname=?", new String[]{"zhangsan"}, null, null, null);while (c.moveToNext()) {String id = c.getString(c.getColumnIndex("id"));String name = c.getString(c.getColumnIndex("uname"));byte[] in = c.getBlob(c.getColumnIndex("uimgae"));Bitmap bit = BitmapFactory.decodeByteArray(in, 0, in.length);showIcon.setImageBitmap(bit);}}});

主要代码已贴

百度网盘:  下载         提取码:aupa

CSDN:下载

下一篇:SQLite多张图片存储

SQLite的使用------图片存储相关推荐

  1. android 图片存储读取数据库中,如何在android中存储(位图图像​​)并从sqlite数据库中检索图像?...

    设置数据库public class DatabaseHelper extends SQLiteOpenHelper { // Database Version private static final ...

  2. 浅谈利用SQLite存储离散瓦片的思路和实现方法

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.背景 在多个项目中涉及到互联网地图的内网显示,通过自制工具完成了互联 ...

  3. SQLite的使用------多张图片存储

    上一篇说了SQLite的使用------单张图片存储,本片说说多张图片资源的存储,删除,在文章最后附上DEMO 先上两张图片: 为什么要存储图片: 1.手机数据大多都是从网络加载的,不存储,每次滚动界 ...

  4. android数据库isnull,Android中SQLite数据库知识点总结

    SQLite 数据库简介 SQLite 是一个轻量级数据库,它是D. Richard Hipp建立的公有领域项目,在2000年发布了第一个版本.它的设计目标是嵌入式的,而且占用资源非常低,在内存中只需 ...

  5. C++ VS2013环境编译使用sqlite数据库全过程

    转载:http://www.cnblogs.com/imoon/archive/2012/11/30/2796726.html 转载:https://blog.csdn.net/hjm4702192/ ...

  6. iOS开发-xcdatamodeld文件 CoreData的介绍和使用,sqlite的使用

    CoreData的介绍和使用  源引:http://www.jianshu.com/p/d027090af00e CoreData是数据存储的一种方式,CoreData实质也是对SQLite的封装. ...

  7. node sqlite 插入数据_安卓手机中的应用数据都保存在哪些文件中?

    随笔 知识 案例 声音 其他 编者按 手机取证,品牌是一方面,从操作系统入手是另外一个渠道.手机中的重要数据基本上都以轻量数据库的形式保存在本地,也就是经常讲的sqlite db文件中. 从推特上得知 ...

  8. android数据库降级_Android SQLite (二.数据库创建,升级及降级)

    上篇文章简介和常用语法介绍了SQLite数据库的基本信息和一些常用的语法操作,本篇文章主要介绍Android开发过程中SQLite数据库的创建使用和常见问题处理. 一.SQLiteOpenHelper ...

  9. android 数据库索引,SQLite数据库提供警告自动索引(列)升级Android L后

    我已经升级了我的Nexus 7与Android 5.0 Lollipop,之前,我的应用程序运行良好与SQLite数据库,但现在每当我执行任何类型的查询,它给我log cat错误,如: 12-09 1 ...

最新文章

  1. 大连关于领取软考2021年上半年合格证书的通知
  2. 从svn导入项目后处理一些报错信息
  3. 人工智能第二课:认知服务和机器人框架探秘
  4. 奇妙的数学动图,美到令人窒息!
  5. python举两种字符串引号的例子_python里的单引号和双引号的有什么作用
  6. apache arm 交叉编译_MacOS 下交叉编译的折腾笔记
  7. 带你读AI论文:基于Transformer的直线段检测
  8. 随想录(提高代码质量的几个工具)
  9. ❤️《集成SSM框架—图书系统》Mybatis+Spring+SpirngMVC
  10. 拓端tecdat|R语言时变波动率和ARCH,GARCH,GARCH-in-mean模型分析股市收益率时间序列
  11. win10计算机被网络设备发现,图文解决win10系统网络发现已关闭计算机和设备不见的方法...
  12. eclipse java类图_Eclipse下生成/编辑Java类图或时序图(UML)[转载]
  13. 高通蓝牙耳机开发方法-周康
  14. 如何使用计算机远程关闭手机软件,手机怎么控制电脑 手机远程控制电脑关机方法 (全文)...
  15. python自动注册邮箱_Python自动登录126邮箱的方法
  16. 万万没想到,低功耗也会烧毁元器件?
  17. php liger 表格排序,jQuery LigerUI 使用教程表格篇(1)
  18. 微信小程序RSA非对称加密。
  19. 警惕男人出轨的六个高发期
  20. 网络类型 ---- PAP认证配置 ---- CHAP认证----隧道技术

热门文章

  1. linux 命令行高亮显示
  2. java多线程(分分钟基础秒杀)
  3. 【STM32】5分钟了解STM32的串口通信
  4. 【Linux网络编程】epoll进阶之水平模式和边沿模式
  5. 理解实时频谱分析仪的频域电平触发
  6. Java IO流之规律总结
  7. 有效的预防电脑辐射的方法
  8. ubuntu 18.04 开启rc.local
  9. C语言程序设计培训视频教程
  10. backtrader和vnpy哪个更好用?