在Java中使用for update获取需要更新的BLOB数据类型游标会产生锁,是什么时候释放的呢? 感觉很慢,几分钟不能进行操作,即使数据量很小!
[code="java"]
..........
Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@192.168.128.35:1521:accebiz1", "sales", "salesw");
if (conn != null) {
System.out.println("数据库连接成功!");
} else {
System.out.println("数据库连接失败!");
}
PreparedStatement lock = conn.prepareStatement(this.getSql("insertTemplate"));//从自己写的xml文件中取SQL
log.debug(this.getSql("insertTemplate"));
lock.setInt(1, Integer.parseInt(templateNo));
lock.setString(2, url);
lock.setString(3, model);
lock.setInt(4, Integer.parseInt(modelXAxis));
lock.setInt(5, Integer.parseInt(priceXAxis));
lock.setInt(6, Integer.parseInt(inventoryXAxis));
lock.setInt(7, Integer.parseInt(descriptionXAxis));
lock.setInt(8, Integer.parseInt(modelYAxis));
lock.setInt(9, Integer.parseInt(priceYAxis));
lock.setInt(10, Integer.parseInt(inventoryYAxis));
lock.setInt(11, Integer.parseInt(descriptionYAxis));
lock.setString(12, postDate);
lock.setInt(13, Integer.parseInt(siteinfoNo));
lock.executeUpdate();
lock.close();
PreparedStatement ps = conn.prepareStatement(this.getSql("lockSQL"));
ps.setInt(1, Integer.parseInt(templateNo));
ResultSet dataLock = ps.executeQuery();
while (dataLock.next()) {
BLOB modelTemplateBlob = (BLOB) dataLock.getBlob("model_template");
log.debug("------------------->" + modelTemplateBlob.getBufferSize());
OutputStream out = modelTemplateBlob.getBinaryOutputStream();
byte[] blob = modelTemplate.getBytes();
out.write(blob, 0, blob.length);
out.close();
log.debug("------------------->4" + dataLock.getString("description_x_axis"));
// insertBolb(dataLock, "model_template", modelTemplate.getBytes());
insertBolb(dataLock, "price_template", priceTemplate.getBytes());
insertBolb(dataLock, "description_template", inventoryTemplate.getBytes());
insertBolb(dataLock, "inventory_template", descriptionTemplate.getBytes());
}
ps.close();
..............
public void insertBolb(ResultSet data, String columeName, byte[] blob) {
try {
log.debug("------------------->start");
BLOB modelTemplateBlob = (BLOB) data.getBlob(columeName);
OutputStream out = modelTemplateBlob.getBinaryOutputStream();
int size = modelTemplateBlob.getBufferSize();
out.write(blob, 0, blob.length);
out.close();
} catch (IOException ex) {
log.debug(ex.getMessage());
log.debug(ex.getStackTrace());
} catch (SQLException sqle) {
log.debug(sqle.getMessage());
System.err.println(sqle.getMessage());
}
}
[/code]
[b]问题补充:[/b]
嗯!是单行锁定哦!
啊? :cry: 需求文档描述的需求是从客户端取得12个参数,其中4个是blob,然后写入数据库同一张表中...呜呜,怎么用servlet一次从客户端取我都没弄不明白,然后需求人员说用request.getParameter(""),我都没晃明白客户端怎么发送的,能用这个方法取,如果是字符串有一般存clob吧?只好当字符串取了然后转byte[]存。现在存发现被锁住好半天.....需求人员说了算,我提出自己的意见,多说几遍我自己觉得自己在放屁, 明年不打算干这鸟程序员了,干满一年也算对得起这第一份工作了
在现行的情况下,存的时候能够用什么方式优化么?