Java 如何使用配置单元jdbc显示配置单元二进制字段中的图像

Java 如何使用配置单元jdbc显示配置单元二进制字段中的图像,java,hadoop,jdbc,hive,binary-data,Java,Hadoop,Jdbc,Hive,Binary Data,我想从配置单元二进制字段加载和显示图像,该字段是从SQL Server图像字段存储为二进制的 我尝试了以下几种方法来解决这个问题 将配置单元jdbc结果集中的二进制数据提取为字符串: 查询:从表4中选择图像,其中imageId=12 String image=res.getString(1); byte[] imageBytes=image.getBytes("UTF-8"); .... byte[] imageBytes=res.getBytes(1); ..... Blob imageB

我想从配置单元二进制字段加载和显示图像,该字段是从SQL Server图像字段存储为二进制的

我尝试了以下几种方法来解决这个问题

  • 将配置单元jdbc结果集中的二进制数据提取为字符串:

    查询:
    从表4中选择图像,其中imageId=12

    String image=res.getString(1);
    byte[] imageBytes=image.getBytes("UTF-8");
    ....
    
    byte[] imageBytes=res.getBytes(1);
    .....
    
    Blob imageBlob=res.getBlob(1);
    .....
    
    InputStream imageStream=res.getBinaryStream(1);
    byte[] imageBytes=IOUtils.toByteArray(is);
    ....
    
    写入输出流并保存为一些jpg图像。 但由于文件格式不受支持,无法显示图像

  • 从配置单元jdbc结果集中提取二进制数据作为字节数组:

    查询:
    从表4中选择图像,其中imageId=12

    String image=res.getString(1);
    byte[] imageBytes=image.getBytes("UTF-8");
    ....
    
    byte[] imageBytes=res.getBytes(1);
    .....
    
    Blob imageBlob=res.getBlob(1);
    .....
    
    InputStream imageStream=res.getBinaryStream(1);
    byte[] imageBytes=IOUtils.toByteArray(is);
    ....
    
    不支持将异常获取为方法HiveResulSet.getBytes

  • 将配置单元jdbc结果集中的二进制数据提取为Blob:

    查询:
    从表4中选择图像,其中imageId=12

    String image=res.getString(1);
    byte[] imageBytes=image.getBytes("UTF-8");
    ....
    
    byte[] imageBytes=res.getBytes(1);
    .....
    
    Blob imageBlob=res.getBlob(1);
    .....
    
    InputStream imageStream=res.getBinaryStream(1);
    byte[] imageBytes=IOUtils.toByteArray(is);
    ....
    
    不支持将异常获取为方法HiveResulSet.getBlob

  • 从配置单元jdbc结果集中提取二进制数据作为输入流,即二进制流:

    查询:
    从表4中选择图像,其中imageId=12

    String image=res.getString(1);
    byte[] imageBytes=image.getBytes("UTF-8");
    ....
    
    byte[] imageBytes=res.getBytes(1);
    .....
    
    Blob imageBlob=res.getBlob(1);
    .....
    
    InputStream imageStream=res.getBinaryStream(1);
    byte[] imageBytes=IOUtils.toByteArray(is);
    ....
    
    写入输出流并保存为一些jpg图像。 但由于文件格式不受支持,无法显示图像

  • 注意:图像是配置单元中的二进制类型。我们在JavaJDBC中没有任何这样的二进制类型。这就是为什么我试图将二进制文件访问到字符串/字节数组/输入流中。。。等


    请帮助我如何使用配置单元jdbc访问配置单元二进制数据并将其显示为图像。如果我的做法是正确的,那么请帮助我使用不同的编码方式,以便能够以支持的文件格式显示图像内容

    您是如何在配置单元中移动SQL Server
    image
    数据的?使用sqoop…将SQL Server表移动到配置单元中。“我们在java jdbc中没有任何这样的二进制类型”--您是认真的吗??Class
    java.sql.Types
    列出了BINARY、VARBINARY和LONGVARBINARY;类
    ResultSet
    有方法
    getBytes()
    getBinaryStream()
    重要的是配置单元JDBC驱动程序映射二进制数据类型的方式。您尝试过什么:Apache Type-3驱动程序?Cloudera 4型驱动程序?DataDirect驱动程序(与Oracle、IBM、MicroStrategy等捆绑在一起)?您是否确保SQL Server中的二进制数据与Hive中的二进制数据相同(例如基于hexa表示),并且Sqoop没有破坏导入?