Como gerar um código automático em uma aplicação Desktop

Olá!

Estou criando um sistema desktop em java, estou utilizando Netbeans 7.0 e Banco de dados SQL Server 2008.
Criei uma tela onde mostra os campos de cadastro de usuário, e gostaria de saber como faço para que seja
gerado um código aleatório, além do mais quero criar uma matrícula para cada usuário do tipo:
Ano Corrente+4 dígitos aleatórios, por exemplo, 20110896. Como faço isso?

:smiley:

http://www.guj.com.br/articles/17

Isso? :lol:

renamed,

Pelo que vi no artigo o Randon só gera número únicos, isto é, 1 ou 2 ou 45, etc.
Mas usando dessa maneira a seguir gera um conjunto de números (Como no exemplo anterior[20110896])?

long l = random.nextLong();
int i = random.nextInt();

Até.

É só você montar uma lógica para que a classe gere números de 4 dígitos, ne?

Ou seja, ela deveria gerar de 1000 até 9999

Tá ok.
:slight_smile:

Poderiam me dar um exemplo de como construir a função para gerar o código automático?
tenho a seguinte tela de cadastro e quero que a matrícula seja automática,
então acho que preciso criar uma função dentro da componente Jtextfield.
O código deve pegar o ano corrente + quatro números aleatorios (ex.: 20110879)

O ID deve ser único no Banco de dados, então devo usar o quê?
o UUID? Como faço isso?

Veja para usar uma sequencia criada no banco de dados, assim você pode apenas capturar ela pelo seu sistema !

Se este numero sera a pk da sua tabela vc tera que realizar algumas verificações. Se vc quer criar o numero manualmente, como vc falou, sendo montado com os 4 primeiros digitos com o ano e mais 4 digitos sorteados, vc tera que verificar se o numero sorteado não existe na tabela (ja é uma pk existente) antes de utiliza-lo. Se ele ja existir vc tera q sortear outro ate q ele não exista mais na tabela.

Provavelmente sua aplicação é algo q vc esta desenvolvendo para aprender a linguagem enãto sem problema, porem se fosse uma aplicação real, vc teria que repensar isso, pois vc poderia ter problemas de desempenho por ter q realizar varias consultas ao banco para gerar um id de uma tabela.

Crie um metodo q sorte a combinação de 4 numeros e concatene isto com os 4 digitos do ano. Posterirmente verifique se este id ja existe na tabela, realizando um select por exemplo e verificando se a senteça retornou valor. Se ele existir realize todo o procedimento de geração de numerio e consulta ate q a sua senteca retorne vazia.

use a API commons-math-2.2

lá tem vários métodos para gerar numeros e strings aleatórias muito mais precisas que os métodos encontrados na API padrão do java.

Eu tô usando hibernate, isso ajuda um pouco?
E como faço para gerar o código automatico no banco de dados (uso o SQL Server 2008) ?
O código deve ser gerado no momento da criação das tabelas do BD?

Mais detalhes da aplicação:
Se trata de um sistema de controle bibliotecário.
Para o desenvolvimento estou utilizando netbeans 7.0, hibernate e SQL Server 2008.

Até mais.
:slight_smile:

System.out.println(new RandomDataImpl().nextSecureInt(1, 50));
System.out.println(new RandomDataImpl().nextSecureHexString(20));
System.out.println(new RandomDataImpl().nextSecureLong(1, 50000000));

usando o Commons Math você tem a disposição no minimo esses 3 métodos básicos.

os parametros são usados para definir um valor entre, e ou um valor máximo gerado.

E não sabemos o que vc quer com código automatico.

mas geralmente vc gera isso no java e joga o valor gerado/criado num insert para a sua tabela.

a saída no meu caso/codigo foi:

8
6bf75c1b34692fc493cb
15568420

No seu caso com ovc quer numeros aleatorios de 4 digitos eu recomendo isto:

System.out.println(new RandomDataImpl().nextSecureInt(1000, 9999));

Que vai gerar números entre 1000 e 9999.

Mas te pergunto se ao ives de aleatorios eles não deveriam ser sequenciais. já que no segundo caso te evita de ficar testando se a matricula já existe no banco.

Matricula = Ano+Total de Matriculados+1

e

Já no caso da data:

	public static String getAno(){
		Date data = new Date();
		return ""+(data.getYear()+1900);
	}

isso retorna uma String de uma Data atual (mas apenas o ano)

Está usando o Date que está em desuso. mas funciona.

o resto é com vc! =)

samirrolemberg,

na aplicação fica mais fácil gerar um código automático, para facilitar no cadastro de usuários, obras e etc, ou seja,
não ter que ficar analisando se o código já existe.
Vou tentar os códigos que mostrou aí.

Até mais. [Com mais dúvidas, rsrsrsrsrs)] :lol:
:slight_smile:

foi isso que eu disse.

se vc gera um número aleatório VC TEM QUE verificar a existencia dele no banco antes.
já que pode ocorrer de vc cadastrar um 20119876 e depois tentar cadastrar um 20119876 novamente (por conta dos 4 ultimos numeros serem gerados aleatoriamente)

faça progressivo.

conte o numero de matriculados em uma determinada data no banco e depois some mais 1 ao resultado. como eu falei no post anterior.

Se você pretende que sua aplicação gerencie e incremente as matriculas.

Crie uma tabela de contadores, com o nome da tabela e o campo da ultima_matricula com o valor inicial da matricula, e demais campos você acreditar que sejam necessários.

Quando seu programa criar um novo registro, ele faz o seguinte:

Seleciona a informação ultima_matricula da tabela de contadores e incrementa essa informação no banco na tabela contadores. (Isso vai impedir que ao tentar inserir dois registros ao mesmo tempo eles tenham o mesmo número)

Insere a informação ultima_matricula + 1 no campo matricula do seu formulário (Classe de Cadastro)

Ao terminar o cadastro iserir normalmente os registros em sua tabela de cadastro com o numero de matricula correto sem risco de ter o mesmo número.

Oi,
Se eu usar o seguinte comando no banco de dados [SQL Server 2008]:
CREATE TABLE tbUsuario (idUsuario INT IDENTITY(1,1), nome VARCHAR(50))
No campo de auto_incremento 1,1 como posso capturar o ano corrente e gerar os outros digitos?

:slight_smile:

Tenta usar o seguinte então:

CREATE TABLE tbUsuario (idUsuario INT IDENTITY(10000000,1), nome VARCHAR(50))

10000000 valor a ser utilizado para o primeiro valor inserido na coluna.
1 valor a ser incrementado a cada nova inserção de registros.

Como é um campo auto increment ele mesmo se encarrega de gerar os próximos valores de matricula.

Para testar os códigos antes de criar a aplicação real utilizei o seguinte exemplo:
#Para criar a tabela usuario:

create TABLE Usuario (
idUsuario INT IDENTITY(10000000,1) not null,
nomeusuario VARCHAR(50) not null,
datacadastro datetime not null)

Quando executo dá o seguinte erro:

[color=red]Msg 544, Level 16, State 1, Line 1
Cannot insert explicit value for identity column in table ‘tbUsuario’ when IDENTITY_INSERT is set to OFF.[/color]

Pelo que entendi, deve configurar na tabela na propriedade do campo a ativação para que ela receba o parâmetro. É isso mesmo? :smiley:

Quando fiz INSERT na tabela dessa forma:

[color=blue]insert into Usuario (nomeusuario,datacadastro)
values (‘Maria José’,GETDATE())
[/color]
e deu certo.
o resultado foi [Veja imagem]:

Como faço para gerar um código automático usando Java?