SQLite的使用——图片存储

SQLite的使用——图片存储在上篇有说到SQLite的文本存储,文本的增删改查,在本篇中主要说SQLite对单张图片的存储。简单介绍:SQLiteOpenHelper是一个抽象类。SQLiteOpenHelper中有两个抽象方法,分别是onCreate()和onUpgrade()。SQLiteOpenHelper中还有两个非常重要的实例方法,getReadableDatabase()和getWritableD…

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

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

简单介绍:

SQLiteOpenHelper是一个抽象类。

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

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

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

先附上一张图

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

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

 

 

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) {
		
	}

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

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);
    }

三、存储核心代码

 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多张图片存储

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 内网渗透系列:内网隧道之NATBypass[通俗易懂]

    内网渗透系列:内网隧道之NATBypass[通俗易懂]本文研究支持多协议双向代理的一个工具,NATBypass

    2022年10月18日
    3
  • 协议和协定有什么区别_协议和合同是一回事吗

    协议和协定有什么区别_协议和合同是一回事吗1、https协议需要到CA(CertificateAuthority,证书颁发机构)申请证书,一般免费证书较少,因而需要一定费用。(原来网易官网是http,而网易邮箱是https。)2、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。4、http的连接很简单,是无状态的。Https协议是由SSL+Http协议构建的可进行加密传输、身份认证的网络协议,比http.

    2022年10月11日
    5
  • 二八原理:你必须知悉的二八原理[通俗易懂]

    二八原理:你必须知悉的二八原理[通俗易懂]有经常阅读习惯的人,应该都听说过二八原理(如果你之前从来没听说过,那你的知识面有太窄的嫌疑)。但是知道二八原理的人有很多却不会(或者不善于)运用。直接的后果就是你在各种事情上付出了很多时间与精力,但是

    2022年8月3日
    9
  • 黑盒 测试用例设计方法「建议收藏」

    黑盒 测试用例设计方法「建议收藏」概述黑盒测试用例设计方法包括等价类划分法、边界值分析法、错误推测法、因果图法、判定表驱动法、正交试验设计法、功能图法等。等价类划分法概念等价类划分法是把程序的输入域划分成若干部分(子集),然后从每个部分中选取少数代表性数据作为测试用例。每一类的代表性数据在测试中的作用等价于这一类中的其他值。等价类划分法的应用1.等价类是指某个输入域的子集合。在该子集合中,各个输入数据对于揭露程序中的错…

    2022年6月11日
    39
  • 2022.01idea激活码[最新免费获取]

    (2022.01idea激活码)JetBrains旗下有多款编译器工具(如:IntelliJ、WebStorm、PyCharm等)在各编程领域几乎都占据了垄断地位。建立在开源IntelliJ平台之上,过去15年以来,JetBrains一直在不断发展和完善这个平台。这个平台可以针对您的开发工作流进行微调并且能够提供…

    2022年4月1日
    157
  • JavaIO流详解

    【I/O流】Input/Output:输入输出机制输入机制:允许java程序获取外部设备的数据(磁盘,光盘,网络等)。输出机制:保留java程序中的数据,输出到外部设备上(磁盘,光盘等)。【可以看出,IO的入出是以java程序为第一人称的】IO各种之间的关系先看张图:流的分类:通过不同的方法,可以对于进行分类。1.按照功能来划分:输入流:只能从中读取数

    2022年4月5日
    62

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号