【发布时间】: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)。
标签: java excel sql-server-2008