为什么用Java操纵Oracle的时候会出现这样的情况:给一张表添加了主键或者唯一性约束之后,往里面添加一条数据,再把这条数据删除。然后再插入一条和刚才一样的数据,就插不进去了,但也不报错,就是不执行。请问这是怎么回事呢?

解决方案 »

  1.   

    添加-删除-再添加,
    均commit了?
      

  2.   

    比如表Test里有两个字段name、password
    NAME                           PASSWORD
    ------------------------------ ------------------------------

    往里面插入一条数据insert into test values ('云天河','yuntianhe');
    然后把这条数据删去,再添加一条同样的数据,就添加不上了。
    在Java里操作就是这样。而在SQL Server里就不是这样的。
      

  3.   

    具体情况说下看看,操作步骤。估计你是多session,均未commit
    所以发生等待。
      

  4.   

    SQL> create table test
      2  (
      3    id   int,
      4    name varchar2(8)
      5  );表已创建。SQL> create unique index un_test_id on test (id);索引已创建。SQL> insert into test values (1,'a');已创建 1 行。SQL> commit;提交完成。SQL> delete test where id=1;已删除 1 行。SQL> commit;提交完成。SQL> insert into test values (1,'a');已创建 1 行。SQL> commit;提交完成。SQL> select * from test;        ID NAME
    ---------- --------
             1 aSQL>
      

  5.   

    你可以在sqlplus或其他工具里开2个session第一个执行如下命令:SQL> insert into test values (1,'a');已创建 1 行。SQL> delete test where id=1;已删除 1 行。SQL>
    然后开第二个,执行如下命令:
    SQL> insert into test values (1,'b');此时第二个session将一直等待,因为你第一个session未提交。
      

  6.   

    第一session一commit,第二session马上显示:
    已创建 1 行。
      

  7.   

    在Oracle里直接操作没有任何问题。
      

  8.   

    还求索什么啊?你的java执行程序之后,没有commit!
      

  9.   

    没有提交导致的问题
    在pl sql中,你没提交却能看到数据变化是因为在同一个会话及事务中
    你再用pl sql做试验,一样的操作,然后新开一个session查看表试试
    和你用java操作是一样的道理
      

  10.   

    数据库中删除后commit了吗,java和数据库客户端两个session不一样,所以若没有提交的话会出现这样的情况,不单是说Java那边事务需要提交。
      

  11.   

    ...每执行完一个语句COMMIT一次试试