Sequence disparando

3 respostas
P
Após um cadastro(na segunda vez) minha sequence(usando ORACLE 10g) dispara! Faço assim:
try{ //faz o insert do Client      
	   	        new ClientDao().insert(c);
	   	       //pega o id do último registro 
	   	       int id_c=new DBUtils().getSequence(Conexao.getConnection(),"SELECT CLIENTSEQ.CURRVAL FROM DUAL");  	        
	   	    System.out.println("ID do CLIENT após o insert:"+id_c);
Meu getSequence:
public int getSequence(Connection conn,String query){
		  int sequence=0;
		    try{ 
		      PreparedStatement  stmt = conn.prepareStatement(query);
		               ResultSet result = stmt.executeQuery();
				        if (result.next()) {
				           sequence=(int)result.getLong(1);
				        } else {
				     System.out.println("Sequence não encontrada!");
				             throw new SQLException("Sistema incapaz de pegar a Sequence da base!");
						              }
						 result.close();             
						 stmt.close();
		     }catch(Exception e){
			throw new RuntimeException(e);
		     }
		  return sequence;
		}
Na primeira vez, vai OK:
Entrou no insert: ID do CLIENT após o insert:1
No segundo insert dispara:
Entrou no insert: ID do CLIENT após o insert:21
Meu insert na base:
try{
	    	
				int sequence=0;
				  stmt = this.connection.prepareStatement("SELECT CLIENTSEQ.NEXTVAL FROM DUAL");
				             ResultSet result = stmt.executeQuery();
				              if (result.next()) {
				                  sequence=(int)result.getLong(1);
				              } else {
				                   System.out.println("primary-key não encontrada!");
				                   throw new SQLException("PK not found!");
				              }
				 result.close();             
				 stmt.clearParameters();	   
		
		   stmt = (PreparedStatement) this.connection.prepareStatement(INSERT);
		   System.out.println("Entrou no insert:");
		              stmt.setInt(1, sequence);
			      stmt.setString(2, obj.getName());
                                      stmt.executeUpdate();
				      stmt.close();				        
		       }catch(Exception e){
		            throw new RuntimeException(e);
		       }

O que pode estar ocorrendo?

3 Respostas

E
  1. Como foi configurada a sequence? Pode ser que ela esteja contando de 10 em 10
  2. É só você que usa o banco? Muita gente boa se dá mal porque esquece de pensar nisso.
P

Fiz assim:

E a aplicação é para apenas um usuario.

Ironlynx

Paul,
apesar do nome SEQUENCE, uma sequence não garante a continuidade de seus números.Você pode por NOCACHE(que tem custos de performance-não relevantes numa app monousuário), mas não haverá garantias de uma sequencia sem intervalos se você der um rollback.Sequence é para garantir a unicidade dos valores, não a continuidade.

Criado 21 de março de 2013
Ultima resposta 23 de mar. de 2013
Respostas 3
Participantes 3