ERRO ao Usar DATE no PostgreSQL

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:

[code]Vector dados = new Vector();

    String comando = "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.Statement stmt = con.createStatement();
        java.sql.ResultSet rs = stmt.executeQuery(comando);

        while (rs.next()) {

            int idevento = rs.getInt("e.id");
            String situacao = rs.getString("e.descricao");
            String data = new SimpleDateFormat("dd/MM/yyyy").format(rs.getDate("data"));// O ERRO APONTA PARA ESTA LINHA
            String descricao = rs.getString("s.descricao");
            String conclusao = rs.getString("e.conclusao");
            


            Vector registroLido = new Vector();

            registroLido.add(idevento);
            registroLido.add(situacao);
            registroLido.add(data);
            registroLido.add(descricao);
            registroLido.add(conclusao);




            dados.add(registroLido);[/code]

A linha apontada pelo erro ta comentada… sabem me dizer o que tem que mudar na utilização do DATE com o banco postgre?

o resultset retorna um sql.Date e o simpledateformat precisa de um util.Date

Tem q transformar a data que o resultset retorna em until.date?

Continua retornando o mesmo 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:177)

Código:

[code]try {
java.sql.Statement stmt = con.createStatement();
java.sql.ResultSet rs = stmt.executeQuery(comando);

        while (rs.next()) {

            int idevento = rs.getInt("e.id");
            String situacao = rs.getString("e.descricao");
            String data = new SimpleDateFormat("dd/MM/yyyy").format(new Date(rs.getDate("data").getTime()));
            String descricao = rs.getString("s.descricao");
            String conclusao = rs.getString("e.conclusao");
            


            Vector registroLido = new Vector();

            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.SQLException e) {
        throw new java.lang.RuntimeException(e.getMessage());//O ERRO AGORA TA AQUI
    }[/code]

opa… vc tem que pegar e.data hehehe e nuam data

isso mesmo… mas ja fiz isso tbm e continua no mesmo erro…

[code]String comando = “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.Statement stmt = con.createStatement();
        java.sql.ResultSet rs = stmt.executeQuery(comando);

        while (rs.next()) {

            int idevento = rs.getInt("e.id");
            String situacao = rs.getString("e.descricao");
            String data = new SimpleDateFormat("dd/MM/yyyy").format(new Date(rs.getDate("e.data").getTime()));
            String descricao = rs.getString("s.descricao");
            String conclusao = rs.getString("e.conclusao");
          
            Vector registroLido = new Vector();

            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.SQLException e) {
        throw new java.lang.RuntimeException(e.getMessage());//erro apota aqui
    }[/code]

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?

a coluna é date?? e vc ta fazendo like?

Isso, a coluna data é do tipo Date, e estou fazendo like nela e nas demais colunas

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

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

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?

[code]Vector dados = new Vector();

    String comando = "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.Statement stmt = con.createStatement();
        java.sql.ResultSet rs = stmt.executeQuery(comando);

        while (rs.next()) {

            int idevento = rs.getInt("e.id");
            String situacao = rs.getString("e.descricao");
            String data = new SimpleDateFormat("dd/MM/yyyy").format(new Date(rs.getDate("e.data").getTime()));
            String descricao = rs.getString("s.descricao");
            String conclusao = rs.getString("e.conclusao");[/code]

Erro:

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

[quote=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[/quote]

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

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?


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

[quote=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[/quote]

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

Para comparar datas, usa simplesmente = e não LIKE

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

Mas para a data, deves usar o = e não o LIKE.