关于java使用oracle操作图像
我没有使用SSH来执行我的项目。首先,我插入一个空的\u blob,然后更新它。但是当我调用executeUpdate时,其他进程似乎插入了一条新记录。我的sql maxno会选择错误的记录。我如何在交易中使用该交易关于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
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);
}