Java 从excel读取图像并将其存储在sqlserver中
我有一张桌子叫“tab1”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
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)
。