Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
关于java使用oracle操作图像_Java_Transactions - Fatal编程技术网

关于java使用oracle操作图像

关于java使用oracle操作图像,java,transactions,Java,Transactions,我没有使用SSH来执行我的项目。首先,我插入一个空的\u blob,然后更新它。但是当我调用executeUpdate时,其他进程似乎插入了一条新记录。我的sql maxno会选择错误的记录。我如何在交易中使用该交易 conn.setAutoCommit(false); pstm = conn.prepareStatement(ADD_SQL); pstm.setString(1, brand.getName()); pstm.setString(2, brand

我没有使用SSH来执行我的项目。首先,我插入一个空的\u blob,然后更新它。但是当我调用executeUpdate时,其他进程似乎插入了一条新记录。我的sql maxno会选择错误的记录。我如何在交易中使用该交易

    conn.setAutoCommit(false);
    pstm = conn.prepareStatement(ADD_SQL);
    pstm.setString(1, brand.getName());
    pstm.setString(2, brand.getDescription());
    pstm.setString(3, brand.getAddress());
    pstm.executeUpdate();

    pstm = conn.prepareStatement("select * from brands where no=(select max(no) from brands)        for update");
rs = pstm.executeQuery();

与事务隔离级别有关

您不需要where no=选择maxno from

我假设您正在使用一个序列填充“no”,并且需要返回新插入的值

insert into foo(no, name,description, address)
values(seq_no.nextvalue, ?,?,?);
returning no into ?
然后


要检索最后生成的序列值,有两个选项:

您可以在运行insert语句后使用seq_name.nextval,例如,从dual中选择my_sequence.nextval

如果使用触发器填充列,则可以使用JDBC API检索生成的值:

pstm = conn.prepareStatement(ADD_SQL, new String[] { "NO"} );
...
pstm.executeUpdate();

ResultSet rsNo = pstmt.getGeneratedKeys();
if (rs.next())
{
   long id = rs.getLong(1);
   System.out.println("The generated value was: " + id);
}

SSH与此有什么关系?我认为Oracle不支持PL/SQL之外的returning子句。我很高兴您回答了我的问题。但我找不到名为registerOutParameter的方法。幸运的是,我找到了一个简单的方法来解决它。首先“从dual中选择sequence.nextval”,然后插入记录。我的英语很差,谢谢你的回答。我非常想知道如何在事务中执行事务。我只知道执行事务的“conn.setAutoCommitfalse”。我很高兴你回答了我的问题。但是我的roacle不支持功能方法getGeneratedKeys。幸运的是,我找到了一个简单的方法来解决它。首先“从dual中选择sequence.nextval”,然后插入记录。我的英语很差,感谢您的回答。我非常想知道如何在事务中执行事务。我只知道执行事务的“conn.setAutoCommitfalse”。Oracle驱动程序至少任何最新版本都支持getGeneratedKeys。为什么你不这么认为?我尝试了你指导我做的事情。结果,api解释不支持的feture的异常发生了。然后你需要从这里升级你的驱动程序:任何版本大于10.x的都可以。
pstm = conn.prepareStatement(ADD_SQL, new String[] { "NO"} );
...
pstm.executeUpdate();

ResultSet rsNo = pstmt.getGeneratedKeys();
if (rs.next())
{
   long id = rs.getLong(1);
   System.out.println("The generated value was: " + id);
}