我有一个名为' 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();
}
}
但是当我动态存储图像时,我得到的错误就像
"字符串或二进制数据将被截断"。
有谁能建议我实现这个目标的方法???
答案 0 :(得分:0)
不支持IMAGE和TEXT等数据类型,不推荐使用它们。 因此将其更改为VARBINARY(最大)。最重要的导入事物是IMAGE数据类型需要以特殊方式存储大小而不是扩展VARBINARY以满足任何方式一直到2GB。由于图像不适合cl_image字段,因此引发了错误。