Duvida bd select com java

22 respostas
K

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.

obrigado

22 Respostas

D

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

É 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  (SQLException erro )
(
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

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

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

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

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

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

No banco mesmo (com algum utilitário de query que acompanhe o mesmo). Qual banco você esta usando?

K

estou começando a usar banco de dados,então comecei pelo mais simples que e o access!

D

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

vlz pela dica! o portgree é fácil de operar; e como faço a conexão com o java especificamente com o netbeans

D

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

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());
        String insert = ("Select From * cidade by tombo ");
        con_impressoras.executeSQL(insert);
           mostrar_dados();
           navega = 1;
    }


        catch(SQLException erro)
        {
            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

Vamos lá:

  1. Não é "Select From * cidade by tombo ", é “Select * From…”
  2. 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.
  3. 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

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?

obrigado

D

No site http://pgdocptbr.sourceforge.net/pg80/tutorial-sql.html tem um muito bom!

K

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
{
    String sql = "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 (SQLException erro)
{

    JOptionPane.showMessageDialog(null,"Erro ao tentar Alterar o Registro"+erro);
}
D

Falta a vírgula, separando a lista de campos no update:
UPDATE SET =valor , =valor, etc… WHERE <condição>

K

Deu certo Demente meu amigo,obrigado.

K

Como faço para cologar para o usuario entrar com o login e senha dele?

D

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.

Criado 17 de julho de 2009
Ultima resposta 26 de ago. de 2009
Respostas 22
Participantes 4