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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Ubuntu更换软件源

    Ubuntu更换软件源查看版本信息lsb_release-a查看Ubuntu软件源

    2022年5月14日
    84
  • intellij idea快速生成main方法、for循环、out输出

    intellij idea快速生成main方法、for循环、out输出点击这里查看<intellijidea使用教程汇总篇>1、System.out.println()输入sout,按下enter键,生成System.out.println()方法.sout—>soutv=System.out.println("变量名 = " + 变量)soutp—>System.out.println("")2、public…

    2022年5月6日
    163
  • WPF日期时间控件

    WPF日期时间控件最近一个WPF项目需要用到日期时间控制,因为WPF自带的控件只有日期没办法选择时间,所以后面用到了一个DateTimePicker控件,支持日期和时间的选择,但使用过程发现有一些小bug,所以进行修正。控制的效果如下:…

    2022年5月13日
    34
  • 西门子PLC_300F系列PLC_初始化MMC卡实验教程 S_L01[通俗易懂]

    西门子PLC_300F系列PLC_初始化MMC卡实验教程 S_L01[通俗易懂]西门子300F安全PLC忘记安全密码没有读卡器如何清空MMC卡西门子300FPLC安全密码操作前注意事项本次实验使用的硬件设备将新硬件进行组态和IP分配使用此硬件配合MMC进行操作西门子300FPLC安全密码300系列PLC在下载程序前必须设定一个安全密码,此密码会写在MMC卡里面,而且无法通过PLC拨码初始化,如果忘记密码可以通过使用西门子官方读卡器进行格式化,但是绝对不能插在普通读卡器或者带有读卡器的电脑上,这样操作会导致内存卡误格式化,损坏MMC卡。本实验将讲解如何在没有西门子官方读卡器的情

    2022年5月9日
    245
  • android activity的跳转动画,实现activity跳转动画的若干种方式

    android activity的跳转动画,实现activity跳转动画的若干种方式第一种:(使用overridePendingTransition方法实现Activity跳转动画)在Activity中代码如下/***点击按钮实现跳转逻辑*/button1.setOnClickListener(newView.OnClickListener(){@OverridepublicvoidonClick(Viewv){/***在调用了startActivity方法之后…

    2022年5月21日
    32
  • eplan永久激活码[最新免费获取]

    (eplan永久激活码)本文适用于JetBrains家族所有ide,包括IntelliJidea,phpstorm,webstorm,pycharm,datagrip等。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html…

    2022年3月29日
    3.0K

发表回复

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

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