求教!!java与DB2数据库连接问题!在线等! 小弟,最近在写一个把文件的内容读入数据库时,遇到了用JDBC连接方式不能对大型BLOB字段的数据进行操作,请问在使用JDBC连接方式情况下有什么方法解决这个问题呢?谢谢了! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 不会的,只要db2支持blob,java就能用。你往里面写文件的时候,要注意blob的大小,超过了这个大小你要把剩余的数据写到新的一条记录里。换句话说,你要把文件数据给slip成blob的限制大小,把这些数据片按序存放。 我是这样的 int rows = dsLog.getRowCount(); String[] strSql = new String[rows]; Vector[] v = new Vector[rows]; int i=0; dsLog.first(); while(dsLog.inBounds()){ strSql[i] = "Insert into " + EntranceClassB.pubsysinfo.GetSysSchema() + ".RegAnaLog( " + " SeqNo, " + " UserID, " + " ForecastTime, " + " RegType, " + " Re, " + " AnaResult, " + " R2) " + " values( " + " COALESCE((select MAX(SeqNo) from " + EntranceClassB.pubsysinfo.GetSysSchema() + ".RegAnaLog), 0)+1, " + dsLog.getInt("UserID") + ", " + ClientSysPub.SetMark(dsLog.getString("ForecastTime"))+ ", " + ClientSysPub.SetMark(dsLog.getString("RegType")) + ", " + ClientSysPub.SetMark(dsLog.getString("Re")) + ", " + " ?, " //+ ClientSysPub.SetMark(sContent) + ", " + dsLog.getBigDecimal("R2").setScale(4,java.math.BigDecimal.ROUND_FLOOR) + ") "; byte[] ba = dsLog.getString("AnaResult").getBytes(); v[i] = new Vector(); v[i].add(ba); dsLog.next(); i++; }我用的是Vector存取的,规定最大的是10M 没看明白你的,你看下面怎么存取图片。//stmt = con.prepareStatement("INSERT INTO BOOKCOVERS VALUES(?,?)");//File imageFile = new File("c:\\test.jpg");//InputStream inputStream = new FileInputStream(imageFile);//stmt.setString(1,"0738425826");//stmt.setBinaryStream(2,inputStream,(int)(imageFile.length()));//stmt.executeUpdate();stmt = con.prepareStatement("SELECT BOOKCOVER FROM BOOKCOVERS WHERE BOOKISBN=?");stmt.setString(1, "0738425826");ResultSet resultSet = stmt.executeQuery();while (resultSet.next()) {// materialization of the BlobBlob blob = resultSet.getBlob(1);InputStream inputStream = blob.getBinaryStream();File fileOutput = new File("e:\\songshe\\clonetest.jpg");FileOutputStream fo = new FileOutputStream(fileOutput);int c;while ((c = inputStream.read()) != -1)fo.write(c);fo.close();System.out.println("Blob retrieved");}blob这个数据类型本身是有限制的,就像byte的范围是-127-128一样。超过了这个大小你就要拆分。你的10M肯定超出了bolb的取值范围,把你数据进行拆分存储。 好像没超过,这是db2 blob的介绍:BLOB(n) 若n<=2GB, 则使用BLOB(n)看看你们的表中n的大小吧,文件大小不能超过n,超过了就得拆分存储了。 我的没有啊还有,我的代码是先把文件的内容以字节形式存入byte[],你看下面的代码:byte[] ba = dsLog.getString("AnaResult").getBytes();//从数据得到AnaResult字段的值存入再把ba写入Vector中,再来进行操作数据库的 在db2里面有个参数设置,具体什么忘了,好像是dataspace 可以满足你的要求 求助java如何实现跨平台加解密 求一个!目前还可以用的,免费发短信的方法? J2SE与蓝牙 各位前辈请教一个多态的问题 java cs jb6 报表如何制作,请给思路 將dbf轉換成txt ServerSocket和URLConnection能成一对吗? 怎样将整形 4 输出成0004 的字符串形式 可能还是Swing控件作用域的问题, 求解 JAVA中如何在线程间传多个参数 30分求教下面几行代码的使用方法 JBuilder2005升级为JDK5.0之后的问题。在线等...
你往里面写文件的时候,要注意blob的大小,超过了这个大小你要把剩余的数据写到新的一条记录里。换句话说,你要把文件数据给slip成blob的限制大小,把这些数据片按序存放。
int rows = dsLog.getRowCount();
String[] strSql = new String[rows];
Vector[] v = new Vector[rows];
int i=0;
dsLog.first();
while(dsLog.inBounds()){
strSql[i] = "Insert into " + EntranceClassB.pubsysinfo.GetSysSchema() +
".RegAnaLog( "
+ " SeqNo, "
+ " UserID, "
+ " ForecastTime, "
+ " RegType, "
+ " Re, "
+ " AnaResult, "
+ " R2) "
+ " values( "
+ " COALESCE((select MAX(SeqNo) from "
+ EntranceClassB.pubsysinfo.GetSysSchema()
+ ".RegAnaLog), 0)+1, "
+ dsLog.getInt("UserID") + ", "
+ ClientSysPub.SetMark(dsLog.getString("ForecastTime"))+ ", "
+ ClientSysPub.SetMark(dsLog.getString("RegType")) + ", "
+ ClientSysPub.SetMark(dsLog.getString("Re")) + ", "
+ " ?, "
//+ ClientSysPub.SetMark(sContent) + ", "
+ dsLog.getBigDecimal("R2").setScale(4,java.math.BigDecimal.ROUND_FLOOR) + ") "; byte[] ba = dsLog.getString("AnaResult").getBytes();
v[i] = new Vector();
v[i].add(ba);
dsLog.next();
i++;
}
我用的是Vector存取的,规定最大的是10M
//stmt = con.prepareStatement("INSERT INTO BOOKCOVERS VALUES(?,?)");
//File imageFile = new File("c:\\test.jpg");
//InputStream inputStream = new FileInputStream(imageFile);
//stmt.setString(1,"0738425826");
//stmt.setBinaryStream(2,inputStream,(int)(imageFile.length()));
//stmt.executeUpdate();
stmt = con.prepareStatement("SELECT BOOKCOVER FROM BOOKCOVERS WHERE BOOKISBN=?");
stmt.setString(1, "0738425826");
ResultSet resultSet = stmt.executeQuery();
while (resultSet.next()) {
// materialization of the Blob
Blob blob = resultSet.getBlob(1);
InputStream inputStream = blob.getBinaryStream();
File fileOutput = new File("e:\\songshe\\clonetest.jpg");
FileOutputStream fo = new FileOutputStream(fileOutput);
int c;
while ((c = inputStream.read()) != -1)
fo.write(c);
fo.close();
System.out.println("Blob retrieved");
}blob这个数据类型本身是有限制的,
就像byte的范围是-127-128一样。超过了这个大小你就要拆分。你的10M肯定超出了bolb的取值范围,把你数据进行拆分存储。
BLOB(n) 若n<=2GB, 则使用BLOB(n)看看你们的表中n的大小吧,文件大小不能超过n,超过了就得拆分存储了。
还有,我的代码是先把文件的内容以字节形式存入byte[],你看下面的代码:
byte[] ba = dsLog.getString("AnaResult").getBytes();//从数据得到AnaResult字段的值存入
再把ba写入Vector中,再来进行操作数据库的