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?
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();
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)
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.
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.
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.
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í.
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?
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?