前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SQLite的使用——图片存储

SQLite的使用——图片存储

作者头像
全栈程序员站长
发布2022-09-14 09:56:06
1.8K0
发布2022-09-14 09:56:06
举报
文章被收录于专栏:全栈程序员必看

大家好,又见面了,我是你们的朋友全栈君。

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

简单介绍:

SQLiteOpenHelper是一个抽象类。

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

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

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

先附上一张图

SQLite的使用------图片存储
SQLite的使用------图片存储

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

代码语言:javascript
复制
public class BitmpUtil extends SQLiteOpenHelper {

	public BitmpUtil(Context context) {
		super(context, "djf", null, 2);
	}

	@Override
	public void onCreate(SQLiteDatabase db) {
		
		db.execSQL("Create table img ( id INTEGER PRIMARY KEY AUTOINCREMENT,uname TEXT,uimgae BLOB );");  
	}

	@Override
	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
		
	}

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

代码语言:javascript
复制
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() {

            @Override
            public 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() {

            @Override
            public 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() {

            @Override
            public 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);
                }
            }
        });
    }

    @Override
    protected 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);
    }

三、存储核心代码

代码语言:javascript
复制
 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();
代码语言:javascript
复制
SQLiteDatabase db = bu.getWritableDatabase();获取数据库,使用ContentValues的对象进行数据插入,使用流写入,最后关闭数据库。

四、读取存储中图片预览

代码语言:javascript
复制
 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多张图片存储

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/158085.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年7月1,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档