从存储库中选择内容,其中id =?更新

时间:2012-12-05 06:35:13

标签: java sql sql-server-2005 jdbc oracle10g

以上查询在Oracle 10g上成功运行。现在我必须使用SQLSERVER 2005实现相同的查询(Application)。

当我在SQLSERVER 2005中运行Above Query时,我收到错误“FOR UPDATE子句仅允许DECLARE CURSOR”。

SQLSERVER 2005是否支持以上查询?或者有替代品吗?

目的:

Basicaly我正在更新我的应用程序中的ducument。我正在使用分块更新,我必须每次都通过新内容追加旧内容。

代码:

Blob bb = getDataAccess().executeScalar( "select content from Repository where id = ? for update", getId());
os = bb.setBinaryStream(startIndex + 1);

while ((read = content.read(buf)) > 0) {
    os.write(buf, 0, read);
    startIndex += read;

    //commit every megabate or every second so upload progress is visible
    //and we don't lose more than 1MB if something happens.

    if (startIndex - lastStartIndex > bufSize || (new Date().getTime() - lastUpdateTime) > UPDATE_INTERVAL) {
        os.close();
        os = null;
        getDataAccess().executeUpdate("UPDATE Repository SET LastChunkSaved = CURRENT_TIMESTAMP  WHERE ID = ?", getId());
        getDataAccess().commit();

        lastStartIndex = startIndex;
        lastUpdateTime = new Date().getTime();

        bb = getDataAccess().executeScalar( "select content from Repository where id = ? for update", getId());
        os = bb.setBinaryStream(startIndex + 1);

        totalSaved += startIndex - lastStartIndex;
    }
}
os.close();

1 个答案:

答案 0 :(得分:3)

我遇到了类似的问题,对我而言,它有助于添加' SelectMethod = Cursor'到连接网址:

jdbc:sqlserver://<server>\SQLEXPRESS:1433;databaseName=<db>;SelectMethod=Cursor;integratedSecurity=true;

实际上我很难找到这个,所以我把它添加到这里我会更快找到它。