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

时间:2015-10-01 06:35:13

标签: java excel sql-server-2008

我有一个名为' 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();
        }
    }

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

  

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

有谁能建议我实现这个目标的方法???

1 个答案:

答案 0 :(得分:0)

不支持IMAGE和TEXT等数据类型,不推荐使用它们。 因此将其更改为VARBINARY(最大)。最重要的导入事物是IMAGE数据类型需要以特殊方式存储大小而不是扩展VARBINARY以满足任何方式一直到2GB。由于图像不适合cl_image字段,因此引发了错误。