Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从excel读取图像并将其存储在sqlserver中_Java_Excel_Sql Server 2008 - Fatal编程技术网

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

Java 从excel读取图像并将其存储在sqlserver中,java,excel,sql-server-2008,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

我有一张桌子叫“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();
        }
    }
但是当我动态地存储图像时,我得到的错误如下

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


有人能给我推荐一种实现这一点的方法吗?

像图像和文本这样的数据类型将不受支持,它们已被弃用。
因此,将其更改为VARBINARY(max)。最重要的是,taht图像数据类型需要以特殊方式存储大小,而不是将VARBINARY扩展到2GB。您得到的错误是由于图像不适合cl_图像字段而引起的。

您是否尝试过使用
PreparedStatement.setBinaryStream
方法来给出长度<代码>stmt.setBinaryStream(1,is,data.length)是的,我试过了,但它不起作用数据有多大。长度?它因不同的图像而不同,比如140200等等,所以它不同。如果发生错误,它有多大?如果确实没有那么大,请确保
cl\u image
的字段数据类型确实是
image
。或者尝试
varbinary(max)