图片以BLOB存储在后台数据库中,Android客户端要进行读取显示

解决方法:

1:在后台以InputStream的方式将图片从数据库中读出:

public static InputStream getPicInputStream(){
        String id = "f304733361e243779b2340afe20e62bf";

         Connection conn = JdbcUtil.getConnection();

         PreparedStatement ps = null;

         ResultSet rs = null;

         InputStream is = null;

         String sql = "select zp from pic_test where id= ?";

        try {

            ps = conn.prepareStatement(sql);

            ps.setString(1, id);

            rs = ps.executeQuery();

            if(rs.next()){
                is = rs.getBlob("zp").getBinaryStream();
            }

        } catch (SQLException ex) {
            Logger.getLogger(Test.class.getName()).log(Level.SEVERE, null, ex);
        }finally{
            try {
                if(null!=ps){
                    ps.close();
                }
            } catch (SQLException ex) {
                Logger.getLogger(Test.class.getName()).log(Level.SEVERE, null, ex);
            }
            try {
                if(null!=rs){
                    rs.close();
                }
            } catch (SQLException ex) {
                Logger.getLogger(Test.class.getName()).log(Level.SEVERE, null, ex);
            }
            JdbcUtil.release(conn);
        }

        return is;
    }

2:在Servlet中直接生成图片:

response.setContentType("image/jpeg");

        InputStream is = Test.getPicInputStream();

        if(null!=is){

            OutputStream os = response.getOutputStream();

            int len;

            byte buf[] = new byte[1024];

            while((len=is.read(buf))!=-1){
                os.write(buf, 0, len);
            }

            is.close();
            os.close();
        }

3:Android客户端的处理

public class MainActivity extends Activity {

    ImageView imgView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        imgView = (ImageView)findViewById(R.id.imgView);

        new ImgViewAsyncTask().execute("");
    }

    class ImgViewAsyncTask extends AsyncTask<String,String,String>{
        Bitmap bitmap = null;

        @Override
        protected void onPreExecute() {

        }

        @Override
        protected String doInBackground(String... strings) {
            InputStream is = null;
            String result = "";

            try {
                URL picURL = new URL("http://192.168.0.165:8084/wisdompm/PicServlet");
                HttpURLConnection conn = (HttpURLConnection)picURL.openConnection();
                conn.setConnectTimeout(10000);
                conn.connect();

                is = conn.getInputStream();
                if(null!=is){
                    bitmap = BitmapFactory.decodeStream(is);
                }
            } catch (MalformedURLException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }finally {
                try {
                    if(null!=is){
                        is.close();
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

            return result;
        }

        @Override
        protected void onPostExecute(String s) {
            if(null!=bitmap && null!=imgView){
                imgView.setImageBitmap(bitmap);
            }
        }
    }
}

测试结果:

时间: 2024-10-07 16:15:11

图片以BLOB存储在后台数据库中,Android客户端要进行读取显示的相关文章

SharePoint 2013 使用 RBS 功能将二进制大型对象 BLOB 存储在内容数据库外部。

为每个内容数据库设置 BLOB 存储 启用并配置 FILESTREAM 之后,请按照以下过程在文件系统中设置 BLOB 存储.必须为要对其使用 RBS 的每个内容数据库设置 BLOB 存储. 设置 BLOB 存储 确认执行这些步骤的用户帐户是要为其配置 RBS 的每个数据库上 db_owner 固定数据库角色的成员. 依次单击"开始"."所有程序"."Microsoft SQL Server 2008"和"SQL Server Mana

.net的session详解 存储模式 存到数据库中 使用范围与大小限制 生命周期

Session又称为会话状态,是Web系统中最常用的状态,用于维护和当前浏览器实例相关的一些信息.举个例子来说,我们可以把已登录用户的用户名放在Session中,这样就能通过判断Session中的某个Key来判断用户是否登录,如果登录的话用户名又是多少. 我们知 道,Session对于每一个客户端(或者说浏览器实例)是"人手一份",用户首次与Web服务器建 立连接的时候,服务器会给用户分发一个 SessionID作为标识.SessionID是一个由24个字符组成的随机字符串.用户每次提

解决SSM框架中,存储到mysql数据库中乱码问题的究极方案

因为编码格式不匹配的问题,设置了好多遍,都不行,就试着让所有的编码格式保持一致.然后读取.插入数据库再也不乱码了. 数据库编码格式必须和myeclipse编码格式一致 其次依次让以下各文件的编码格式保持一致: 1.设置tomcat 中server.xml编码格式(路径:tomcat/conf/server.xml) 2.检查IDE的编码格式(路径:Windows/preferences/General/workspace) 3.检查jsp头文件设置的编码格式 4.检查web.xml中设置的编码格

解决SQL Server 2005数据库中datetime时间字段在前端显示时分秒的问题

SQL Server 2005中时间类型datetime的格式是"年月日时分秒",直接读出来该字段,为了不让它在前端显示"时分秒"若是显示在dataGridView中,可以修改控件的某一列格式,如: dataGridView1.Columns[10].DefaultCellStyle.Format = "yyyy-MM-dd"; 但是要在listview控件中的话,就有点困难了,貌似没有类似的属性,这样的话,考虑从数据源入手. 1.获取当前年月日

Java中将图片保存到数据库中

在实际的开发中,我们可能需要将图片.影音等文件直接保存到数据库中,然后通过编程方式将数据读出进行使用.例如将读出的图片数据显示出来,将读出的电影文件播放出来. 二进制数据直接保存到文件和从文件中读出非常的简单.和普通的数据库操作差别不大.只是用到部分流操作.例如各种输入输出流操作.所以深刻理解流操是非常重要的. 在此我借助于一个JSP的简单实例进行讲解.此实例保存职员数据,其中职员数据包含一个图片列.此列保存每名员工的照片.在此将照片直接保存到数据库中.首先建立职员信息表EmployeeInfo

php将图片以二进制保存到mysql数据库并显示

一.存储图片的数据表结构: -- -- 表的结构 `image` -- CREATE TABLE IF NOT EXISTS `image` ( `id` int(3) NOT NULL AUTO_INCREMENT, `name` varchar(100) CHARACTER SET utf8 NOT NULL, `pic` blob NOT NULL, `type` varchar(50) CHARACTER SET utf8 NOT NULL, `date` datetime NOT NU

从数据库中导出excel报表

通常需要将后台数据库中的数据集或者是其他列表等导出excel 报表,这里主要引用了Apose.cells dll 类库, (1)直接上主要代码: protected void txtExport_Click(object sender, EventArgs e)         { try             { // 获取测试商品报表 IList<ProductEntity> pList = ProductBLL.getProductList(); // 导出到Excel中 Workbo

jquery 解析数据库中的json日期为正常的格式

//在action从后台数据库中请求获得日期以后,得到的是json格式的数据,因此要解析才能显示在前台1.在jsp页面写的代码如下:<html> <script> Date.prototype.format = function(format) { var o = { "M+": this.getMonth() + 1, // month "d+": this.getDate(), // day "h+": this.ge

如何将Sql server数据库中的模型图转化到Word中--并能够查看字段的属性信息

1. 在Sql server数据库中创建数据库的模型图 -- Database Diagrams 2. 控制面板--管理工具--ODBC数据源链接--创建一个Sql server的数据源链接 3. 打开Visio工具,打开数据库模型--Database--Reverse Engineer[反向工程] 选择要导入到Visio中的表: 4. 将DB的表结构导入到Visio中,界面可能需要略微调整一下 可以在Visio中查看字段的详细信息 将Visio保存成一个文件. 5.打开Word,插入对象 将V