noriko
Março 16, 2013, 7:39pm
#1
O seguinte, tenho essas duas tabelas criadas:
create table livro
(liv_codigo number(10),
liv_titulo varchar2(70),
liv_preco number(7,2),
liv_lancamento date,
edi_codigo number(10),
ass_sigla char(3) not null);
create table assunto
(ass_sigla char(3),
ass_descricao varchar2 (20));
As duas, e as outras interligadas, já estão povoadas. Como eu faço pra selecionar o preço que seja maior que 50 da tabela LIVRO ou o livro que começe com a letra p da tabela ASSUNTO?
jeffev
Março 16, 2013, 9:02pm
#2
Qual a relação entre a tabela livro e assunto?
noriko
Março 16, 2013, 9:15pm
#3
ass_sigla é a primary key da tabela assunto, e a tabela livro tá recebendo a ass_sigla como uma fk
Xmio
Março 16, 2013, 10:39pm
#4
[code]select * from livro liv inner join assunto ass on (liv.ass_sigla = ass.ass_sigla)
WHERE
liv.liv_preco >50
ass.ass_descricao ilike ‘p%’
[/code]
As duas linhas de where contem seus filtros… o i em frente ao like ira ignorar o upercase
jrmelo
Março 17, 2013, 3:33pm
#5
Boa tarde!
Cria dois métodos em sua classe DAO um para consultar o preço do livro e outro para consultar a descrição da tabela assunto.
Por exemplo:
public List<Livro> consultaPreco(Livro livro, String condicao){
String sql = "Select l.liv_codigo, l.titulo from livro l " +
"inner join assunto a " +
"on l.ass_sigla = a.ass_sigla " +
"where l.liv_preco "
+ condicao + "?";
List<Livro> lista = new ArrayList<Livro>();
try {
PreparedStatement stmt = connection.prepareStatement(sql);
stmt.setLong(1, livro.getPreco());
ResultSet rs = stmt.executeQuery();
while (rs.next()) {
Livro liv = new Livro();
liv.setCodigo(rs.getLong("liv_codigo"));
liv.setTitulo(rs.getString("titulo"));
lista.add(liv);
}
rs.close();
stmt.close();
return lista;
} catch (SQLException e) {
// TODO Auto-generated catch block
throw new RuntimeException(e);
}
}
public List<Assunto> consultaDescricao(Assunto ass){
String sql = "Select a.ass_sigla, a.ass_descricao from assunto a " +
"inner join livro l " +
"on a.ass_sigla = l.ass_sigla " +
"where a.ass_descricao "
+ "like ?" ;
List<Assunto> lista = new ArrayList<Assunto>();
try {
PreparedStatement stmt = connection.prepareStatement(sql);
stmt.setLong(1, ass.getAssDescricao());
ResultSet rs = stmt.executeQuery();
while (rs.next()) {
Assunto a = new Assunto();
a.setAssSigla(rs.getString("ass_sigla"));
a.setAssDescricao(rs.getString("ass_descricao"));
lista.add(a);
}
rs.close();
stmt.close();
return lista;
} catch (SQLException e) {
// TODO Auto-generated catch block
throw new RuntimeException(e);
}
}
Aí você adapta ao que desejar de retorno.
Outrossim, com o Hibernate economizará em código e trabalhará de uma outra forma, mas a essência é a mesma.