SQL + Java [RESOLVIDO]

Olá pessoal,
Boa noite a todos. :smiley:
alguém poderia me dizer
como eu faço para pegar o
idUsuario que é uma chave
estrangeira da tabela usuario_sistema?

String sql = "INSERT INTO tecnico(idUsuario, nome, telefone, celular, email)"
                    + "VALUES(?,?,?,?,?)";

 ps = conn.prepareStatement(sql);
            //ps.???
            ps.setString(2, tecnico.getNome());
            ps.setString(3, tecnico.getTelefone());
            ps.setString(4, tecnico.getCelular());
            ps.setString(5, tecnico.getEmail());
            ps.executeUpdate();

[]'s.

Se o código está na outra tabela (tabela usuario_sistema) voce tem que fazer um select antes do insert para obter o campo…

Jóia ctdaa?
é justamente isso que eu estou precisando
fazer, mas eu sei um pouco de SQL e não
estou sabendo fazer essa consulta será
que vc ctdaa ou alguém poderia me dar
uma ajuda? :wink:

[]'s.

Eu estou tentando fazer algo deste tipo:

SELECT idUsuario FROM usuario_sistema WHERE nome="Jean Carlos";

Mas o problema é que o nome é da tabela tecnico e não da tabela usuario_sistema.

[]'s.

É um protocolo de boas práticas do fórum ensinar a pescar ao invés de dar o peixe… por isso vou dar umas dicas sem escrever o comando pronto… OK?
assim: do mesmo jeito que você preparou o insert:

# String sql = "INSERT INTO tecnico(idUsuario, nome, telefone, celular, email)"  
#                     + "VALUES(?,?,?,?,?)";  
#   
# ps = conn.prepareStatement(sql);  

Na String sql você vai colocar o comando select, mais ou menos assim:
“select codigo from usuario_sistema where id=?”
o critério de pesquisa você deve saber… só coloquei um exemplo.
depois vai usar o mesmo ps = conn.prepareStatement(sql);
e o ps.setString(1, valor_pesquisa);

depois o ps.execute vai te retornar um resultset de onde voce pega o resultado da pesquisa… o codigo que voce precisa.
É fácil… voce deve encontrar vários exemplos por ai.
(Nao sei se estou respondendo muito básico para a sua pergunta… mas como a pergunta foi básica também…)
OK?

Agora está me confundindo.
Você que inserir um técnico novo, certo? o id do técnico esta na tabela do usuario_sistema, já existe lá ou voce vai criar também o registro na tabela usuario_sistema?

OPa!! cara vc deve fazer um join com a tabela tecnico pra referenciar o nome que esta da tabela tecnico

Primeiramente , procure uma IDE para o Banco de Dados que vc utilize e execulte os codigos la primeiramente ,
o sql para pegar o nome tem q ser por Like pq vc nao tem previsao tipo assim .

Mas deste jeito vc nao tem precisao , tem que pegar algo que seja unico

select id_usuario from usuario_sistema 
where upper(nome) like "JOAO JOSE%"

Um exemplo de unico eh vc pegar uma chave unica uma PrimaryKey , Uniquekey e talz …
Bom Estudo

deve ser tomados alguns cuidados com a forma como vai ser feita esta pesquisa, pois o resultado da consulta pode te retornar mais de um valor, no caso da falta de precisão citada acima pelo edmarr.

olá pessoal seguindo o conselho de todos
vc’s eu consegui chegar até aqui:

String id = "SELECT DISTINCT usuario_sistema.idUsuario FROM usuario_sistema INNER JOIN tecnico WHERE tecnico.nome=?;";
            
            String sql = "INSERT INTO tecnico(idUsuario, nome, telefone, celular, email)"
                    + "VALUES(?,?,?,?,?)";

            ps = conn.prepareStatement(sql);
            
            ps.setString(1, tecnico.getNome());
            
            int idUsuario = Integer.parseInt(id);
            ps.setInt(2, idUsuario);
            ps.setString(3, tecnico.getNome());
            ps.setString(4, tecnico.getTelefone());
            ps.setString(5, tecnico.getCelular());
            ps.setString(6, tecnico.getEmail());
            ps.executeUpdate();

Só que agora está aparecendo a seguinte
mensagem:

01/10/2009 13:23:01 teste.TesteGeral main
SEVERE: null
exception.LAFQADaoException: Erro ao inserir dadosjava.lang.NumberFormatException: For input string: "SELECT DISTINCT usuario_sistema.idUsuario FROM usuario_sistema INNER JOIN tecnico WHERE tecnico.nome=?;"
        at dao.TecnicoDao.salvarTecnico(TecnicoDao.java:59)
        at teste.TesteGeral.main(TesteGeral.java:46)

Será que alguém poderia me dar uma ajuda?
O que eu fiz de errado?

[]'s.

Na consulta eu preciso passar um nome de um técnico
e retornar o idUsuario daquele Técnico.

[]'s.

Não sei como seria em java, mas farei tipo delphi e ai vc refaz pra java:

“SELECT DISTINCT usuario_sistema.idUsuario FROM usuario_sistema INNER JOIN tecnico WHERE tecnico.nome=:pnome”;
se fosse delphi, eu pegaria esse parametro(pnome) e carregaria com o valor que um certa variável estaria entrando. Logo, você pode substituir o parametro pnome pela variável. Em java, não sei como funciona, pois estou aprendendo também, mas o conceito vale pra qualquer linguagem, pois isso é SQL ANSI puro.

Cara vc tem q fazer o seguinteeeeeeeee primierooooooo

Primeiramente , procure uma IDE para o Banco de Dados que vc utilize e execulte os codigos la primeiramente .

APos ito eh simples eh so passar para o Codigo .

[quote=ricardocomp]olá pessoal seguindo o conselho de todos
vc’s eu consegui chegar até aqui:

String id = "SELECT DISTINCT usuario_sistema.idUsuario FROM usuario_sistema INNER JOIN tecnico WHERE tecnico.nome=?;";
            
            String sql = "INSERT INTO tecnico(idUsuario, nome, telefone, celular, email)"
                    + "VALUES(?,?,?,?,?)";

            ps = conn.prepareStatement(sql);
            
            ps.setString(1, tecnico.getNome());
            
            int idUsuario = Integer.parseInt(id);
            ps.setInt(2, idUsuario);
            ps.setString(3, tecnico.getNome());
            ps.setString(4, tecnico.getTelefone());
            ps.setString(5, tecnico.getCelular());
            ps.setString(6, tecnico.getEmail());
            ps.executeUpdate();

Só que agora está aparecendo a seguinte
mensagem:

01/10/2009 13:23:01 teste.TesteGeral main
SEVERE: null
exception.LAFQADaoException: Erro ao inserir dadosjava.lang.NumberFormatException: For input string: "SELECT DISTINCT usuario_sistema.idUsuario FROM usuario_sistema INNER JOIN tecnico WHERE tecnico.nome=?;"
        at dao.TecnicoDao.salvarTecnico(TecnicoDao.java:59)
        at teste.TesteGeral.main(TesteGeral.java:46)

Será que alguém poderia me dar uma ajuda?
O que eu fiz de errado?

[]'s.[/quote]

Oi,

Claro… olha o que você está fazendo:

[code]String id = “SELECT DISTINCT usuario_sistema.idUsuario FROM usuario_sistema INNER JOIN tecnico WHERE tecnico.nome=?;”;

int idUsuario = Integer.parseInt(id);[/code]

Ou seja, tentando “transformar” uma String não numérica em um numero inteiro. ?!?!

Tchauzin!

[quote=ctdaa]Agora está me confundindo.
Você quer inserir um técnico novo, certo? o id do técnico esta na tabela do usuario_sistema, já existe lá ou voce vai criar também o registro na tabela usuario_sistema?
[/quote]
Repito esta pergunta… pois como eh que voce vai inserir um técnico “novo” e quer pegar o nome dele de outra tabela com um código que nem foi criado ainda???
O seu problema é mais conceitual do que programação…
Coloque as definições de catalogo das tabelas tecnico e usuario_sistema para gente analisar… seria um bom começo pro pessoal dar a dica correta!

Jóia Pessoal?
o que eu estou querendo fazer é uma consulta onde eu passo o nome do Técnico
e a consulta me retorne o id_Usuario da Tabela Usuario correspondente aquele Técnico

Será que alguém poderia me dar uma ajuda?
[]'s.

Segue um exemplo de metodo de busca que utilizo:

Retorna um objeto do tipo cliente.

public static Cliente GetCliente(int cod_cli){
    try{
        Connection con = Conexao.Conectar();

        String sql = " Select * FROM tb_cliente Where id_cliente = '" + cod_cli + "'";
        System.out.println(sql);

        Statement stmt = con.createStatement(); 
        ResultSet rs = stmt.executeQuery(sql);
        Cliente cli = new Cliente();
        System.out.println(rs);

        while(rs.next()){
            cli.SetIdent(rs.getInt("id_cliente"));
        }
        return cli;
    }     
    catch(Exception Err){
        System.out.Println(err.getMessage);
        return null;
    }
}

Jóia Thiago?
Eu estou tentando fazer aqui mas não estou conseguindo
será que tem como vc ou alguém me dar uma ajuda aqui?
Eu construir o trecho de código assim:

String sql1 = "SELECT DISTINCT usuario_sistema.idUsuario " +
                          "FROM usuario_sistema INNER JOIN tecnico " +
                          "WHERE nome = '" + tecnico.getNome() + "'";
            
            ps = conn.prepareStatement(sql1);
            ps.setInt(1, tecnico.getIdUsuario());
            
            String sql2 = "INSERT INTO tecnico(idUsuario, nome, telefone, " +
                    "celular, email)"
                    + "VALUES(?,?,?,?,?)";

            ps = conn.prepareStatement(sql2);
            
            ps.setString(2, tecnico.getNome());
            ps.setString(3, tecnico.getTelefone());
            ps.setString(4, tecnico.getCelular());
            ps.setString(5, tecnico.getEmail());
            ps.executeUpdate();

Mas está aparecendo a seguinte mensagem:

SEVERE: null
exception.LAFQADaoException: Erro ao inserir dadosjava.sql.SQLException: Parameter index out of range (1 > number of parameters, which is 0).
        at dao.TecnicoDao.salvarTecnico(TecnicoDao.java:62)
        at teste.TesteGeral.main(TesteGeral.java:47)

[]'s.

Você não pode rodar duas SQLs ao mesmo tempo com a mesma conexão.

Para inserts, updates e deletes(modificações na base em geral) você:

  1. Cria o statement a partir da conexão, passando um SQL
  2. Seta as variáveis
  3. Executa o statement
  4. Fecha o statement

Para selects, você:

  1. Cria o statement a partir da conexão, passando um SQL
  2. Seta as variáveis
  3. Executa o statement, trazendo os resultados num result set
  4. Itera pelo result set, pegando os registros retornados
  5. Fecha o result set
  6. Fecha o statement

Lembrando, um de cada vez.

Você quer pegar o usuário do sistema correspondente àquele técnico específico (passa o nome do técnico e pega as informções do usuário correspondente)? Se for, tente fazer o seguinte:

String sql = "SELECT u.* FROM usuario_sistema AS u, tecnico AS t WHERE t.nome = ? AND u.id = t.id_usuario";
ps = conn.prepareStatement(sql);
ps.setString(1, tecnico.getNome());
ResultSet rs = ps.executeQuery();
while (rs.next()) {
    System.out.println("id: " + rs.getString("id"));
    System.out.println("login: " + rs.getString("login"));
    System.out.println("senha: " + rs.getString("senha"));
    System.out.println("tipo_usuario: " + rs.getString("tipo_usuario"));
}