oi meus amigos,tudo bem? bem fiz um programa de cadastro de impressoras e esta rodando funcioando bem, mais eu queria na parte do cadastro do tombamento comparar se existe algum tombamento já cadastrado, pois um tombamento é unico,como posso fazer esse procedimento.
Vamos ver se eu entendi a pergunta…
Na tabela onde são guardados os tombamentos (seja lá o que for isso…) NÃO podem existir dois iguais. Se esse for o caso, você deve definir um índice único para esse campo no banco de dados (uma alternate key, se esse campo não for a chave).
Particularmente, eu prefiro definir a restrição no banco e tratar o erro na aplicação, avisando o usuário que o código já existe.
K
kerbage
É isso mesmo! eu estava fazendo desse jeito, mais estava tando erro
try{sqlinsert=("select from * impressoras where tombo");if(tf_tombo==con_impressoras.resultset.last())JOptionPane.ShowMessageDialog(null,"esse tombamento já esta cadastrado no sistema");catch(SQLExceptionerro)(JOptionPane.ShowMessageDialog(null,"esse no sistema."+erro);)
agora como posso fazer a restrição do banco como vc disse.
obrigado
rsantik
Qual a mensagem de erro que o SQLException emiti?
B
Bruno_Laturner
Se o numero do tombo for a única chave primária da tabela, ele já vai ser único, se não for, da para procurar com um sql:
select numero_tombo, count(numero_tombo)
from tabela_tombo
group by numero_tombo
having count(numero_tombo) > 1
K
kerbage
blz Bruno,como vc esta? entao e aconselhado eu criar uma tabela so para o tombo? pois estou usando tudo numa tabela só, a respeito do primary key ele é usado em codigo automatico que coloquei, entao cada vez que o usuário cadastra um impressora tem uma numeração crescente como 1,2,3,4 e por ai vai
o que e having?
B
Bruno_Laturner
kerbage:
blz Bruno,como vc esta? entao e aconselhado eu criar uma tabela so para o tombo? pois estou usando tudo numa tabela só, a respeito do primary key ele é usado em codigo automatico que coloquei, entao cada vez que o usuário cadastra um impressora tem uma numeração crescente como 1,2,3,4 e por ai vai
o que e having?
Aquilo só foi um exemplo, pegue o nome da tua tabela e os teus campos e coloque lá.
having é um operador para trabalhar com agrupamentos, funciona como se fosse o where.
D
demente
Mesmo que a tabela já tenha uma chave primária (pk), se não podem haver dois registros com o mesmo número de tombamento você pode criar um índice (com unicidade) para este campo também, tranformando-o em uma chave-alternativa. O código de erro que vai retornar depende do seu banco de dados. Teste a query de insert na ferramenta do banco (inserindo um duplicado) e veja o número do erro.
K
kerbage
certo mais no caso eu cologo no meu codigo no netbeans quando eu vou salvar meu registro, ou eu faço isso no banco mesmo…
D
demente
No banco mesmo (com algum utilitário de query que acompanhe o mesmo). Qual banco você esta usando?
K
kerbage
estou começando a usar banco de dados,então comecei pelo mais simples que e o access!
D
demente
O Access é uma das piores opções para usar com Java, pois é necessário usar a ponte jdbc -> odbc. Se for um projeto novo, considere seriamente a possibilidade de usar o PostgreSQL (www.postgresql.org/) que é livre e tem uma interface amigável.
K
kerbage
vlz pela dica! o portgree é fácil de operar; e como faço a conexão com o java especificamente com o netbeans
D
demente
No Netbeans, vá para janela serviços (Ctrl+5) e expanda o nó Banco de dados e o nó drivers, no Netbeans 6.7 já vem o driver do postgres. Caso não tenha, click com o botão direito em drivers e escolha no driver. Para o postgres é apenas um jar (disponível no site). Depois tente conectar: click com o botão direito sobre o driver do PostgreSQL e escolha conectar utilizando, preencha os campos e teste. Se não me engano, a instalação padrão do postgres não aceita conexões externas (outras máquinas), somente aceita da máquina onde esta instalado (situação onde tudo esta instalado na mesma máquina).
K
kerbage
putz galera obrigado mesmo pela força que vcs estao me dando… fiz um código e não esta dando erro, mais tb não tem nenhum resultado, que é comparar se existe algum tombamento cadastrado.
aqui esta o código:
try{while(con_impressoras.resultset.last());Stringinsert=("Select From * cidade by tombo ");con_impressoras.executeSQL(insert);mostrar_dados();navega=1;}catch(SQLExceptionerro){JOptionPane.showMessageDialog(null,"Não foi possível ir para o registro anterior"+erro);}
pq nao acontece nada! sera que não estou fazendo o update, ou tenho que comparar todos os campos que fiz no registro?
D
demente
Vamos lá:
Não é "Select From * cidade by tombo ", é “Select * From…”
Evite o uso de “*” nos selects, coloque a lista de campos. É mais rápido (o parser do SGDB não tem que pesquisar o dicionário todo da tabela) e mais elegante.
Para consultar dados (select) use:
try {
Statement st = cn.createStatement();
ResultSet rs = st.executeQuery("SELECT vl_parametro " +
" FROM parametro " +
"WHERE no_parametro = '" + parametro + "'");
if (rs.next()) {
valor = rs.getString(1);
}
rs.close();
st.close();
} catch (SQLException e) {
System.out.println("Erro em DbUtil.getParametro: " + e.getMessage());
}
4. Utilize o método [execute] do objeto Statement para insert, delete e update.
Uma das coisas mais importantes no trabalho de um desenvolvedor de software é manipulação de dados em um SGDB via SQL, praticamente tudo acaba em um database. Quando você já estiver confortável com o uso do JDBC, estude a JPA (java persistance API).
K
kerbage
Demente mais uma vez obrigado. Eu vou fazer as alterações e cologo aqui no fórum o resultado,alias vc tem algum tutorial bom de sql que conheça?
agora surgiu outro problema clássico! bem, agora não estou conseguindo fazer a alteraração do cadastro que o usuário queira mudar, dar sempre erro!No caso aqui estou querendo atualizar nome,origem,destino e situação, o tf_codigo não deve ser alterado, pois é um controle de equipamentos que foram cadastrados tipo cadastro 1,2,3,4 e por ai vai…
aqui esta o código,ele esta reclamando que falta um operador faltando nas expressões.
try{Stringsql="UPDATE cidade SET nome ='"+tf_nome.getText()+"'"+"origem = '"+tf_origem.getText()+"'"+"destino = '"+tf_destino.getText()+"situacao = '"+tf_situacao.getText()+"'Where codigo = "+tf_codigo.getText();con_impressoras.statement.executeUpdate(sql);JOptionPane.showMessageDialog(null,"Alteração realizada com sucesso");//atualiza banco de dados resultset //con_impressoras.executeSQL("Select *from cidade +"+ordenacao);con_impressoras.resultset.next();//posiciona o primeiro registro//mostrar_dados();}catch(SQLExceptionerro){JOptionPane.showMessageDialog(null,"Erro ao tentar Alterar o Registro"+erro);}
D
demente
Falta a vírgula, separando a lista de campos no update:
UPDATE SET =valor , =valor, etc… WHERE <condição>
K
kerbage
Deu certo Demente meu amigo,obrigado.
K
kerbage
Como faço para cologar para o usuario entrar com o login e senha dele?
D
demente
Usuário e senha fazem parte da string de conexão do JDBC. Você precisa coletar estes dados do usuário (com um form) e concatenar na string.
Em aplicações web normalmente se usa um usuário “interno” para se conectar (que o usuário real não conhece) e com esse usuário se estabelece a conexão e
se valida o usuário/senha fornecidos em uma tabela interna da aplicação.