Meu sistema era com mysql, resolvi trocar para postgresql por motivos da empresa, então começou a dar o seguinte erro:
Exception in thread "AWT-EventQueue-0" java.lang.RuntimeException: ERRO: operador não existe: date ~~ unknown
Dica: Nenhum operador corresponde com o nome e o(s) tipo(s) de argumento(s) informados. Você precisa adicionar conversões de tipo explícitas.
Posição: 167
at dao.EventosDAO.pesquisar(EventosDAO.java:176)
A parte da conexão com o banco é a seguinte:
Vector<Vector>dados=newVector<Vector>();Stringcomando="SELECT e.id, e.descricao, e.data, s.descricao, e.conclusao"+" FROM evento AS e INNER JOIN situacao AS s ON e.id_situacao = s.id "+"WHERE (e.descricao) LIKE '"+campoPesquisa+"%' "+"OR "+"(e.data) LIKE '"+campoPesquisa+"%' "+"OR "+"(s.descricao) LIKE '"+campoPesquisa+"%' "+"OR "+"(e.conclusao) LIKE '"+campoPesquisa+"%'"+"ORDER BY e.data desc";try{java.sql.Statementstmt=con.createStatement();java.sql.ResultSetrs=stmt.executeQuery(comando);while(rs.next()){intidevento=rs.getInt("e.id");Stringsituacao=rs.getString("e.descricao");Stringdata=newSimpleDateFormat("dd/MM/yyyy").format(rs.getDate("data"));// O ERRO APONTA PARA ESTA LINHAStringdescricao=rs.getString("s.descricao");Stringconclusao=rs.getString("e.conclusao");VectorregistroLido=newVector();registroLido.add(idevento);registroLido.add(situacao);registroLido.add(data);registroLido.add(descricao);registroLido.add(conclusao);dados.add(registroLido);
A linha apontada pelo erro ta comentada.. sabem me dizer o que tem que mudar na utilização do DATE com o banco postgre?
Exception in thread "AWT-EventQueue-0" java.lang.RuntimeException: ERRO: operador não existe: date ~~ unknown
Dica: Nenhum operador corresponde com o nome e o(s) tipo(s) de argumento(s) informados. Você precisa adicionar conversões de tipo explícitas.
Posição: 167
at dao.EventosDAO.pesquisar(EventosDAO.java:177)
Código:
try{java.sql.Statementstmt=con.createStatement();java.sql.ResultSetrs=stmt.executeQuery(comando);while(rs.next()){intidevento=rs.getInt("e.id");Stringsituacao=rs.getString("e.descricao");Stringdata=newSimpleDateFormat("dd/MM/yyyy").format(newDate(rs.getDate("data").getTime()));Stringdescricao=rs.getString("s.descricao");Stringconclusao=rs.getString("e.conclusao");VectorregistroLido=newVector();registroLido.add(idevento);registroLido.add(situacao);registroLido.add(data);registroLido.add(descricao);registroLido.add(conclusao);dados.add(registroLido);System.out.println(dados);}stmt.close();con.close();}catch(java.sql.SQLExceptione){thrownewjava.lang.RuntimeException(e.getMessage());//O ERRO AGORA TA AQUI}
nextuser
opa… vc tem que pegar e.data hehehe e nuam data
jrbilll
nextuser:
opa.... vc tem que pegar e.data hehehe e nuam data
isso mesmo.. mas ja fiz isso tbm e continua no mesmo erro..
Stringcomando="SELECT e.id, e.descricao, e.data, s.descricao, e.conclusao"+" FROM evento AS e INNER JOIN situacao AS s ON e.id_situacao = s.id "+"WHERE (e.descricao) LIKE '"+campoPesquisa+"%' "+"OR "+"(e.data) LIKE '"+campoPesquisa+"%' "+"OR "+"(s.descricao) LIKE '"+campoPesquisa+"%' "+"OR "+"(e.conclusao) LIKE '"+campoPesquisa+"%'"+"ORDER BY e.data desc";try{java.sql.Statementstmt=con.createStatement();java.sql.ResultSetrs=stmt.executeQuery(comando);while(rs.next()){intidevento=rs.getInt("e.id");Stringsituacao=rs.getString("e.descricao");Stringdata=newSimpleDateFormat("dd/MM/yyyy").format(newDate(rs.getDate("e.data").getTime()));Stringdescricao=rs.getString("s.descricao");Stringconclusao=rs.getString("e.conclusao");VectorregistroLido=newVector();registroLido.add(idevento);registroLido.add(situacao);registroLido.add(data);registroLido.add(descricao);registroLido.add(conclusao);dados.add(registroLido);System.out.println(dados);}stmt.close();con.close();}catch(java.sql.SQLExceptione){thrownewjava.lang.RuntimeException(e.getMessage());//erro apota aqui}
erro:
Exception in thread "AWT-EventQueue-0" java.lang.RuntimeException: ERRO: operador não existe: date ~~ unknown
Dica: Nenhum operador corresponde com o nome e o(s) tipo(s) de argumento(s) informados. Você precisa adicionar conversões de tipo explícitas.
Posição: 167
at dao.EventosDAO.pesquisar(EventosDAO.java:172)
o que é essa posição 167 que aparece no erro?
nextuser
a coluna é date?? e vc ta fazendo like?
jrbilll
Isso, a coluna data é do tipo Date, e estou fazendo like nela e nas demais colunas
nextuser
ja executou a query na mao né? ela está retornando oq vc procura?? pq o java aparentemente está ok não tem mais erros… ja o sql com os valores não sei se roda certo em sua base… tenta executar ela no banco primeiro e ver oq retorna
jrbilll
Poisé, antes de vc falar eu tava testando aqui, tentei um simples SELECT * FROM eventos e retornou certinh o com a conversão da data… o Jeito da conversão q eu tava usando tava até certo tbm, problema era no sql, pq essa query eu usava qnd tava usando mysql, e acabei nem mexendo nela qnd mudei de banco. Obrigado
jrbilll
Não sei qual é a onda desse postgre.. Testei a query simples sem WHERE sireto no banco e funcionou normalmente.. quando testei na aplicação acusa q nao encontra o nome da coluna no resultset, sabe me dizer o pq?
Vector<Vector>dados=newVector<Vector>();Stringcomando="select e.id, e.descricao, e.data, s.descricao, e.conclusao "+"from evento as e inner join situacao as s on e.id_situacao = s.id;";try{java.sql.Statementstmt=con.createStatement();java.sql.ResultSetrs=stmt.executeQuery(comando);while(rs.next()){intidevento=rs.getInt("e.id");Stringsituacao=rs.getString("e.descricao");Stringdata=newSimpleDateFormat("dd/MM/yyyy").format(newDate(rs.getDate("e.data").getTime()));Stringdescricao=rs.getString("s.descricao");Stringconclusao=rs.getString("e.conclusao");
Erro:
Exception in thread "AWT-EventQueue-0" java.lang.RuntimeException: A nome da coluna e.id não foi encontrado neste ResultSet.
nextuser
tente apenas id para pegar…
o descrição está como s.descricao
e vc pode tentar alias nas colunas para facilitar na hora de pegar tb
ou melhor para teste faça um loop nas colunas e tente pegar pelo index da coluna… só para ver se vai ter dados
jrbilll
nextuser:
tente apenas id para pegar…
o descrição está como s.descricao
e vc pode tentar alias nas colunas para facilitar na hora de pegar tb
ou melhor para teste faça um loop nas colunas e tente pegar pelo index da coluna… só para ver se vai ter dados
Sou meio fraco com SQL, mas ja havia tentado buscar só pelo ID, ae acusa que nao pode encontrar o e.descricao… e essa s.descricao é pq é de outra tabela
jrbilll
Bom, minha tavela eventos tem id, descricao, data, id_situacao e conclusao. O id conclusão é chave estrangeira ta tabela SITUACAO q possui 2 registros, então usei o inner join pra dizer pro banco q id_situacão da tabela evento é igual a id da tabela situacao, buscando assim a descricao da tabela situacao apartir deste id_situacao. Entendeu?
nextuser
ai vc pega id, edesc, d, sdesc, con
nuam gosto de usar as pelavras date e data então vai um d
ai vc pega id, edesc, d, sdesc, con
nuam gosto de usar as pelavras date e data então vai um d
jrbilll
nextuser:
SELECT e.id as id, e.descricao as edesc, e.data as d, s.descricao as sdesc, e.conclusao as con
ai vc pega id, edesc, d, sdesc, con
nuam gosto de usar as pelavras date e data então vai um d
Até ai td bem, mas na hora de usar o e.date no WHERE LIKE nao funciona e acaba retornando o mesmo erro de qnd começei o topico… ps: os outros WHERE LIKE funcionam corretamente
Exception in thread "AWT-EventQueue-0" java.lang.RuntimeException: ERRO: operador não existe: date ~~ unknown
Dica: Nenhum operador corresponde com o nome e o(s) tipo(s) de argumento(s) informados. Você precisa adicionar conversões de tipo explícitas.
Acho que desde o começo o problema era ai nesse like do e.data
pmlm
Para comparar datas, usa simplesmente = e não LIKE
jrbilll
Mas isso faz uma pesquisa dinamica, que busca o q é digitado no jtextfield por todos os campos da tabela EVENTO, o erro ta dando pq o valos inicial do JTEXTFIELD eh vazio “”, e preciso q essa busca contenha o campo data tbm