lorcx 2016-01-13 13:50 采纳率: 46.7%
浏览 2937
已采纳

jsp 输出图片 blob.getBytes()问题

    response.setContentType("image/jpeg");
String userName = request.getParameter("userName");
Class.forName("oracle.jdbc.driver.OracleDriver");
String url = "jdbc:oracle:thin:@127.0.0.1:1521:orcl";
Connection conn = DriverManager.getConnection(url,"llxx","lorcx");
StringBuilder sql = new StringBuilder();
sql.append("select u.pic from base_user u where u.user_name = '").append(userName).append("'");
PreparedStatement ps = conn.prepareStatement(sql.toString());
ResultSet rs = ps.executeQuery();
if(rs != null){
  while (rs.next()){
    Blob blob = rs.getBlob(1);//获取文件
    int size = (int)blob.length();
    byte[] b = blob.getBytes(1,size);
    ServletOutputStream os = response.getOutputStream();
    os.write(b);
    os.flush();
    os.close();
  }
}

    我在调用getBytes时开始位置是1才能显示,为什么不是0
  • 写回答

2条回答

  • 毕小宝 博客专家认证 2016-01-13 23:43
    关注

    java.util.sql.Blog类型的getBytes方法,第一个参数pos是指从第几个字节开始提取数据,这个是实际的字节序号。
    显然第0个字节是没有东西的,第一个字节的位置是1的。可以参考jdk API是这样的:

        @param pos the ordinal position of the first byte in the
        <code>BLOB</code> value to be extracted; the first byte is at position 1
    

    直接用getBytes,需要自己计算起止位置,还有一个方法可以直接获取二进制文件流对象的。

     InputStream bis = blob.getBinaryStream() ; //得到Blob实例的字节流 
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)
  • ¥20 matlab yalmip kkt 双层优化问题
  • ¥15 如何在3D高斯飞溅的渲染的场景中获得一个可控的旋转物体
  • ¥88 实在没有想法,需要个思路
  • ¥15 MATLAB报错输入参数太多