从excel读取图像并将其存储在sql server中

Posted

技术标签:

【中文标题】从excel读取图像并将其存储在sql server中【英文标题】:Reading image from excel and storing it in sqlserver 【发布时间】:2015-12-29 02:42:42 【问题描述】:

我有一个名为“tab1”的表

cl_id int //auto imcrement
cl_image image

我想用图片从excel中读取一张图片并将其存储在上表中

FileInputStream fileInputStream = new FileInputStream(
            "Delux.xls");
    System.out.println(fileInputStream);
    HSSFWorkbook workbook = new HSSFWorkbook(fileInputStream);
    HSSFSheet worksheet = workbook.getSheet("Delux");
    Iterator rows = worksheet.rowIterator();
    HSSFRow row = (HSSFRow) rows.next();
      List lst = workbook.getAllPictures();
      Iterator it = lst.iterator();
    while (rows.hasNext()) 
        row = (HSSFRow) rows.next();

//reading the image from excel

        HSSFCell cellP1 = row.getCell((short) 1);
           PictureData pict = (PictureData)it.next();
            String ext = pict.suggestFileExtension();
            byte[] data = pict.getData();

                InputStream is = new ByteArrayInputStream(data);

        try 

            PreparedStatement stmt = getdbconn()
                    .prepareStatement(
                            "insert into tab1 (cl_image) values(?)");

            stmt.setBinaryStream(1, is);
            stmt.executeUpdate();
            is.close();
         catch (ClassNotFoundException e) 

            e.printStackTrace();
         catch (SQLException e) 

            e.printStackTrace();
        
    

但是当我动态存储图像时,我得到了类似的错误

“字符串或二进制数据将被截断”。

谁能给我建议一个方法来实现这一点???

【问题讨论】:

您是否尝试过使用给出长度的PreparedStatement.setBinaryStream 方法? stmt.setBinaryStream(1, is, data.length); 是的,我试过了,但它不起作用 data.length 有多大? 它因不同的图像而异,例如 140,200 等 当然会有所不同。如果发生错误,它有多大?如果它真的没有那么大,请确保您的字段数据类型cl_image 真的是image。或者试试varbinary(max) 【参考方案1】:

IMAGE 和 TEXT 等数据类型将不受支持且已弃用。 所以将其更改为 VARBINARY(max)。最重要的导入内容是 IMAGE 数据类型需要以特殊方式存储大小,而不是扩展 VARBINARY 以适应任何一直到 2GB 的需求。您得到的错误是由于图像不适合 cl_image 字段而引发的。

【讨论】:

以上是关于从excel读取图像并将其存储在sql server中的主要内容,如果未能解决你的问题,请参考以下文章

从 excel 文件列中读取列表列表并将其存储在 python 列表中

从 Access 数据库到 SQL Server 的图像

C 编程和 OpenCV(如何从文件中读取图像并将其加载以在 openCv 中进行进一步处理)

从 C# SQL 创建 Excel 文件

从 excel 中检索数据并将其存储在 Access 中

有没有办法从文件夹中读取图像并将其保存在 powerpoint 中