Campo auto-incrementador SQL [RESOLVIDO]

Pessoal quero saber como funciona um campo auto-incrementador que tenho que ter no meu sistema em JAVA para ultilizar nas minhas tabelas, por exemplo se eu precisar de um registro ele é so colocar o nro de registro dele (primary key) e ele puxa todos os dados!

vlw! :smiley:

Depende do banco que você está utilizando…

PostGres

Você terá que trabalhar com ‘sequences’ para cada tabela sua que possuir um índice auto-numérico.

Essas ‘sequences’ geram o próximo id não correndo risco de duplicar índices.

Veja neste link como fazer isso:

http://www.postgresql.org/docs/8.1/static/sql-createsequence.html

Espero ter ajudado.

Abraço!

Vlw, to dando uma “lida”, mas se tiver material em portugues fico mais grato ainda! :smiley:

Acho bom vc nao ir acostumando com esse negócio de material em portugues nao… :wink:

Isso mesmo. No PostgreSQL você precisará criar uma SEQUENCE para cada campo auto-increment.
A forma mais simples de fazer isso é declara o campo como SERIAL, assim, quando o script for executado o próprio servidor irá criar a sequence.

Algo assim:

CREATE TABLE teste (
    id_teste SERIAL,
    nm_teste VARCHAR(100)
)

//e para criar a PK
ALTER TABLE teste ADD CONSTRAINT pk_teste 
	PRIMARY KEY (id_teste);

No caso acima a sequence criada será a seguinte: teste_id_teste_seq. (O padrão é [nm_tabela]_[coluna serial]_seq);

E para recuperar a chave criada logo após inserir o registro, você deve executar o seguinte SQL: SELECT CURRVAL (‘teste_id_teste_seq’);

[]´s

Daniel

Aqui vai uma dica de como fazer no Java

public static void main(String args[]) {
     Teste teste = new Teste(); //Vamos supor que você mapeou a tabela 'teste'
     teste.setNmTeste('Curinga');
     
     PreparedStatement ps = conexao.prepareStatement("INSERT INTO teste (nm_teste) VALUES (?)");
     ps.setString(teste.getNmTeste());
     ps.execute();
     teste.setIdTeste(getIdentidade("teste"));
     ps.close;
     
     System.out.println(teste.getIdTeste());
     
}


private static Integer getIdentidade(String tabela) {
   String SQL_POSTGRE = "SELECT CURRVAL (" + "'public." + tabela + "_id_" + tabela + "_seq')";
   PreparedStatement preparedStatementAuxiliar = null;
   ResultSet resultSetAuxiliar = null;
   Integer retornoAuxiliar = null;

   try {
       preparedStatementAuxiliar = conexao.prepareStatement(SQL_POSTGRE);
       resultSetAuxiliar = preparedStatementAuxiliar.executeQuery();
       if(resultSetAuxiliar.next()) {
           retornoAuxiliar = resultSetAuxiliar.getInt(1);
       }
   } catch (SQLException e) {
       e.printStackTrace();
   }

   return retornoAuxiliar;
}

Fiz o código no Textpad, então tem que revisar.

[]´s

Daniel

Olha soh no momento to precisando saber ql a sintaxe SQL pra mim adicionar um registro em uma Tabela que contenha um campo de auto-incremento, alguem sabe como?

vlw!

Bom, você não leu o código então né?

Olha a tabela que criei e olha a linha a linha 5 do código.

PreparedStatement ps = conexao.prepareStatement("INSERT INTO teste (nm_teste) VALUES (?)"); //Aqui ta o SQL

Você basicamente informa todas as colunas da sua tabela nos primeiros () e depois os valores de cada coluna no segundo.
A única coluna que você não irá informar é a coluna com auto-incremento. E é por não informar ela que você deve declarar todas as outras, caso contrário bastaria informar os values para todas as colunas.

E caso ainda não tenha entendido, se você criar a tabela teste e executar o SQL INSERT INTO teste (nm_teste) VALUES (‘Primeiro Registro’), será inserido o registro com id_teste = 1 e nm_teste = ‘Primeiro Registro’

[]´s

Daniel

vou dar uma olhada

Assim gente tenho o seguinte codigo em JAVA para add um cara em uma tabela SLQ com sgbd PostGre, mas ta dando erro :

public void adicionaPessoa(){
       String pessoa = "INSERT INTO cadastro(id_pessoa, Cliente, Apelido, Endereço, Bairro, Cidade, CEP, telefone, FAX, Email_geral, HomePage) +
                                VALUE(?,'João','John','Rua','Centro','POA','123','321','000','oi@oi','www.oi.br')";
       bancoDeDados.executaSql(pessoa);

Não sei o que passo para aquele campo auto-incrementador.
Alguem sabe o que devo fazer?

Você não deve informar nenhum valor para o campo auto incremento, pois o valor dele é gerenciado pelo banco de dados.

O seu código deve ficar assim:

public void adicionaPessoa(){ String pessoa = "INSERT INTO cadastro(Cliente, Apelido, Endereço, Bairro, Cidade, CEP, telefone, FAX, Email_geral, HomePage) + VALUES('João','John','Rua','Centro','POA','123','321','000','oi@oi','www.oi.br')"; bancoDeDados.executaSql(pessoa);

… caso id_pessoa for a primary key da tabela cadastro, o que deve ser provável.

[quote=nephestos]Você não deve informar nenhum valor para o campo auto incremento, pois o valor dele é gerenciado pelo banco de dados.

O seu código deve ficar assim:

public void adicionaPessoa(){ String pessoa = "INSERT INTO cadastro(Cliente, Apelido, Endereço, Bairro, Cidade, CEP, telefone, FAX, Email_geral, HomePage) + VALUES('João','John','Rua','Centro','POA','123','321','000','oi@oi','www.oi.br')"; bancoDeDados.executaSql(pessoa);

… caso id_pessoa for a primary key da tabela cadastro, o que deve ser provável.[/quote]

Tu acredita que o erro era no VALUES eu tinha colocado “VALUE” :?