向数据库中存一张图片
情况1:
String sql="INSERT INTO photo(userId,photo) VALUES(?,?)";
String url="jdbc:mysql://localhost:3306/lnu";
String user="root";
String password="yanshujun";
Connection c=null;
try {
c = DriverManager.getConnection(url,user,password);
PreparedStatement ps;
ps = c.prepareStatement(sql);
ps.setInt(1, photoBean.getUserId());
ps.setBinaryStream(2, photoBean.getPhoto(), photoBean.getSize());
i=ps.executeUpdate();
photoBean.getPhoto().close();
} catch (Exception e) {
e.printStackTrace();
}
成功,没有问题(部分内容没有给出)
情况2:
使用DBCP或c3p0取得连接,执行
Connection c=使用连接池获取的链接;
try {
c = DriverManager.getConnection(url,user,password);
PreparedStatement ps;
ps = c.prepareStatement(sql);
ps.setInt(1, photoBean.getUserId());
ps.setBinaryStream(2, photoBean.getPhoto(), photoBean.getSize());
i=ps.executeUpdate();
photoBean.getPhoto().close();
} catch (Exception e) {
e.printStackTrace();
}
报异常:
java.lang.AbstractMethodError: org.apache.commons.dbcp.DelegatingPreparedStatement.setBinaryStream(ILjava/io/InputStream;J)V
异常说是DelegatingPreparedStatement.setBinaryStream是个抽象的方法。
情况3:
同样通过连接池获取连接,向数据库存其他信息,不包括二进制文件,成功,说明不是连接池的问题。
请问这种情况如何解决?
情况1:
String sql="INSERT INTO photo(userId,photo) VALUES(?,?)";
String url="jdbc:mysql://localhost:3306/lnu";
String user="root";
String password="yanshujun";
Connection c=null;
try {
c = DriverManager.getConnection(url,user,password);
PreparedStatement ps;
ps = c.prepareStatement(sql);
ps.setInt(1, photoBean.getUserId());
ps.setBinaryStream(2, photoBean.getPhoto(), photoBean.getSize());
i=ps.executeUpdate();
photoBean.getPhoto().close();
} catch (Exception e) {
e.printStackTrace();
}
成功,没有问题(部分内容没有给出)
情况2:
使用DBCP或c3p0取得连接,执行
Connection c=使用连接池获取的链接;
try {
c = DriverManager.getConnection(url,user,password);
PreparedStatement ps;
ps = c.prepareStatement(sql);
ps.setInt(1, photoBean.getUserId());
ps.setBinaryStream(2, photoBean.getPhoto(), photoBean.getSize());
i=ps.executeUpdate();
photoBean.getPhoto().close();
} catch (Exception e) {
e.printStackTrace();
}
报异常:
java.lang.AbstractMethodError: org.apache.commons.dbcp.DelegatingPreparedStatement.setBinaryStream(ILjava/io/InputStream;J)V
异常说是DelegatingPreparedStatement.setBinaryStream是个抽象的方法。
情况3:
同样通过连接池获取连接,向数据库存其他信息,不包括二进制文件,成功,说明不是连接池的问题。
请问这种情况如何解决?
这种通用的连接池,对于某种数据库的特性支持不够,是很正常的。
比如JBoss的连接池,并没有实现Oracle的二维数组作为输入参数的方法。所以,你可以看看DBCP或c3p0里面有没有具体实现通用的存二进制流的方法。
如果有,就采用它的方法来实现。
如果没有,认命把,直接jdbc
我上次做oracle,从自己的连接池往jboss的连接池搬,就出了这个问题,搞了好几天才发现,原来是jboss没有实现,嬲!楼主好运!。