用java做的程序,读取A服务器上边的oracle里边的一个表,将最新的数据(根据id)读取出来后,再写入到另外一台服务器B上边的oracle数据库里边,问题出来了,先往A里边插入一条数据,然后执行读取的程序,结果没有读到最新插入的那条,但是,在sqlplus 里边select一下,可以知道那条数据是已经插入数据库里边了的,也就是说在执行java程序读取之前,数据是已经成功插入了的(在sqlplus 里边insert的),就是无法获取最新插入的那条.但是,每当我在sqlplus里边,select一遍之后,再执行java程序,又可以读取到最新那条了,我要不先在sqlplus里边select一遍的话,是获取不到的.注,java程序读取oracle里边的数据没有问题,前边所说的,只是执行java程序的时候,没办法获取到最新的,但程序执行后,返回的结果是次新的那条数据.在sqlplus里边select一遍之后,就可以读取到最新的了.盼高人分析解答

解决方案 »

  1.   

    问题解决了.也不算解决吧.原来,我测试的时候实在sqlplus里边插入数据,java程序读取的,现在我不在sqlplus里边插入,而是直接在java程序里边插入数据,然后读取,结果就可以了.总结了一下,应该是sqlplus里边有缓存,当你提交数据的时候,通常都会先帮你缓存起来,并没有即时写入数据库中,这样一来,在sqlplus里边select的时候会快,但是在应用程序中因为sqlplus里边的insert操作没有即时插入,所以就没办法获取到最新的数据了.
      

  2.   

    错了,和缓存没有关系的你在sqlplus里,如果没有commit,其它的会话是读取不到的,因为oracle的机制是读一致性
    你在java程序里insert后如果不提交,在本次对话中是可以读到的,因为在一个事务中,但你再打开sqlplus去查,应该也查不到的.