Servlet e BD-consulta

Olá pessoal,

Estou usando um servlet que faz a consulta em duas tabelas relacionadas. Minhas tabelas questao e alternativas estão relacionadas, onde meu cod-questao é a chave estrangeira da tabela alternativa.
Seleciono as questões pelo assunto, o qual é campo da tabela questão. Qdo tenho um determinado assunto, como por exemplo biologia este seleciona na tabela questao todas as que forem de biologia e vai buscar as alternativas daqueles códigos, porém as vezes tenho mais de uma questão com o mesmo assunto, ou seja, cod-questao diferentes e qdo dou o select dos códigos selecionados sobre o assunto biologia na tabela alternativa o select não volta buscar o outro cod-questao que tb foi selecionado na tabela questao.

a sintaxe que estou usando é a seguinte:

try{

                stm = con.createStatement();  
                               
                sql = "SELECT * FROM QUESTAO" +
                    " WHERE assunto='" + assunto + "'" ;
               
                ResultSet rs = stm.executeQuery(sql);
                
                while(rs.next()){
                cod = rs.getString("cod_questao");
                out.println(cod);
             
                
                sql = "SELECT * FROM ALTERNATIVA" + 
                     " WHERE cod_questao='" + cod + "'";
                     rs = stm.executeQuery(sql);
                     
                     while(rs.next()){
                            alternativa = rs.getString("alternativa");
                            descricao_alt = rs.getString("descricao_alt");
                            out.println(alternativa);
                      }
                     
                } 

A parte de println esta incompleta, pois estou testando ainda.

Quem puder me dar uma dica eu agradeço.

Sta. Leisley

[quote=Leisley]Olá pessoal,

Estou usando um servlet que faz a consulta em duas tabelas relacionadas. Minhas tabelas questao e alternativas estão relacionadas, onde meu cod-questao é a chave estrangeira da tabela alternativa.
Seleciono as questões pelo assunto, o qual é campo da tabela questão. Qdo tenho um determinado assunto, como por exemplo biologia este seleciona na tabela questao todas as que forem de biologia e vai buscar as alternativas daqueles códigos, porém as vezes tenho mais de uma questão com o mesmo assunto, ou seja, cod-questao diferentes e qdo dou o select dos códigos selecionados sobre o assunto biologia na tabela alternativa o select não volta buscar o outro cod-questao que tb foi selecionado na tabela questao.

a sintaxe que estou usando é a seguinte:

try{

                stm = con.createStatement();  
                               
                sql = "SELECT * FROM QUESTAO" +
                    " WHERE assunto='" + assunto + "'" ;
               
                ResultSet rs = stm.executeQuery(sql);
                
                while(rs.next()){
                cod = rs.getString("cod_questao");
                out.println(cod);
             
                
                sql = "SELECT * FROM ALTERNATIVA" + 
                     " WHERE cod_questao='" + cod + "'";
                     rs = stm.executeQuery(sql);
                     
                     while(rs.next()){
                            alternativa = rs.getString("alternativa");
                            descricao_alt = rs.getString("descricao_alt");
                            out.println(alternativa);
                      }
                     
                } 

A parte de println esta incompleta, pois estou testando ainda.

Quem puder me dar uma dica eu agradeço.

Sta. Leisley
[/quote]

Olá pessoal,

Descobri meu erro e já solucionei. Era só chamar as duas tabelas ao mesmo tempo. Bem se alguém tiver a mesma dúvida que a minha é só pedir ajuda…

Abraços,

Sta. Leisley

Leily porque você não cria uma outra tabela para armazenar as informações referentes ao assunto(tipo) e relaciona a tabela questão com ela, e para recuperar o(s) registro(s) da tabela questão referente(s) a um assunto em específico o código SQL seria:

//recupera todas as questões de um determinado assunto
select qt.cod_questao,qt.texto_questao, ast.assunto from questao qt
inner join assunto ast on ast.cod_assunto = qt.cod_assunto
where
qt.cod_assunto = ?;

Com isso se os registro que existerem nas tabelas forem:

Tabela Assunto
==========================
cod_assunto | assunto    |
--------------------------
    1       |  Biologia  |
    2       |  Matemática|
==========================


Tabela Questão
==============================================================
cod_questao | cod_assunto | texto_questao                   |
==============================================================
   1        |     1       | Qual é a família das Bromélias ?|
--------------------------------------------------------------
   2        |     1       | O que estuda a Biologia ?       |
===============================================================  


select cod_alternativa, cod_questao, texto from alternativa
where
  cod_questao = ?
 
Abaixo um esqueleto do código e da estrutura das tabelas




public Collection findByAssunto(int idAssunto) throws SQLException {
   PreparedStatement pstm = null;
   //recupere a conexão do Pool.
   Connection conexao = null;
   try {
    pstm =
	conexao.prepareStatement(
	"select qt.cod_questao, qt.texto_questao, ast.assunto from questao qt "
      + " inner join assunto ast on ast.cod_assunto "
      + " qt.cod_assunto here qt.cod_assunto = ?");
    pstm.setInt(1, idAssunto);
    ResultSet res = pstm.executeQuery();
    while (res.next()) {
	//selecione todas as alternativas relacionadas a questão
	pstm = conexao.prepareStatement("select cod_alternativa, cod_questao, texto from alternativa where cod_questao = ?");
	pstm.setInt(1, res.getInt("cod_questao"));
    }
   } finally {
      if (pstm != null) {
	  pstm.close();
      }if(conexao != null){
	  conexao.close();
      }
   }	return null;
}


create table assunto(
 cod_assunto int(10) not null,
 assunto varchar(30) not null,
 constraint pk_assunto primary key(cod_assunto)
);

drop table if exists questao;
create table questao(
  cod_questao integer not null,
  cod_assunto integer not null,
  texto_questao varchar(100) not null,
  constraint pk_questao primary key(cod_questao),
  constraint fk_qst_ass foreign key(cod_assunto) references assunto(cod_assunto)
);


create table alternativa(
  cod_alternativa integer not null,
  cod_questao integer not null,
  texto varchar(100) not null,
  constraint pk_alter primary key(cod_alternativa),
  constraint fk_alter_qst foreign key(cod_questao) references questao(cod_questao)
)

Alessandro
http://www.jroller.com/page/javamail