JXDatePicker

21 respostas
wamarra
Olá Pesoal, Tenho o seguinte código:
PreparedStatement ps = con.prepareStatement("INSERT INTO lancamentosjuridico WHERE condominio = ? , servico = ?, " +
                    "hora = ? , data = ? , contato = ? , comentario = ?");     
            ps.setString(1, (String) comboJurLancCondominio.getSelectedItem());     
            ps.setString(2, (String) comboJurLancServico.getSelectedItem());     
            ps.setString(3, cxTxtJurLancHorario.getText());     
            ps.setString(4, jxJurLancData.getDate());     
            ps.setString(5, cxTxtJurLancContatoCom.getText());     
            ps.setString(6, cxTxtJurLancComentarios.getText());     
               
            ps.executeUpdate();
Estou tentando inserir o conteúdo de um JXDatePicker em meu banco de dados, porém dá erro na linha:
ps.setString(4, jxJurLancData.getDate());
O erro apresentado é o seguinte:

setString(int,java.lang.String) in java.sql.PreparedStatement cannot be applied to(int,java.util.Date)

Se alguém tiver alguma idéia,
Desde já agradeço
Vlw :D

21 Respostas

H

É claro que dará erro, e so ler a mensagem de erro, o correto seria você adicionar uma data.

.setDate(1,new java.sql.Date(jxJurLancData.getDate().getTime));

Dá seguinte maneira tenho certeza que ira funcionar.

_Renatu

Bom, vou corrigir seu erro e ja adiantar um proximo…

para voce inserir datas no PreparedStatement voce utiliza o metodo setDate, e nao o setString.

O erro que voce vai encontrar é que o PreparedStatement nao trabalha com a classe java.util.Date e sim com a classe java.sql.Date…

para voce “parsear” de uma classe pra outra precisa utilizar os milissegundos:

java.util.Date datautil = jxJurLancData.getDate();
java.sql.Date datasql = new java.sql.Date(datautil.getTime());
ps.setDate(4, datasql);
wamarra

_Renatu:
Bom, vou corrigir seu erro e ja adiantar um proximo…

para voce inserir datas no PreparedStatement voce utiliza o metodo setDate, e nao o setString.

O erro que voce vai encontrar é que o PreparedStatement nao trabalha com a classe java.util.Date e sim com a classe java.sql.Date…

para voce “parsear” de uma classe pra outra precisa utilizar os milissegundos:

java.util.Date datautil = jxJurLancData.getDate(); java.sql.Date datasql = new java.sql.Date(datautil.getTime()); ps.setDate(4, datasql);


Bom, funcionou :smiley:
Mas, agora está caindo no catch com a seguinte mensagem:
no suitable driver
Sabe o que pode ser?
Vlw!

_Renatu

provavelmente algum problema com seu driver JDBC

qual banco voce usa? verifique se o driver está correto.

Fernandojdk

Olá…

vc pode converter a data para string…

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String data = sdf.format(jxJurLancData.getDate());
ps.setString(4, data);

Não teste esse codigo pois nao estou em meu ambiente de desenvolvimento, mas axo q deve funcionar…

Diga depois se deu certo…

Abraços…

Fernandojdk

Concordo com o _Renato…

Tente baixar o driver mais novo do MySQL para testar…

wamarra

_Renatu:
provavelmente algum problema com seu driver JDBC

qual banco voce usa? verifique se o driver está correto.


Meu banco é o MySQL.
Quando utilizo a conexão em outro evento, funciona perfeitamente.
A parte que faz a conexão é a seguinte:

try{ Class.forName("com.mysql.jdbc.Driver"); String url = "jdbc:mysql//localhost:3306/gerpro"; String usuario = "root"; String senha = "admin"; Connection con; con = DriverManager.getConnection(url, usuario, senha);
e depois eu trato os catchs

Será que tem algo errado no código?
Porque já olhei revisei e não achei nada de errado.
Mas se identificar alguma coisa, por favor me dê uma luz
Vlw!

Fernandojdk

Aparentemente seu código está normal…

Mas qual a versão do servidor MySQL vc está utilizando???

E qual a versão do driver…???

wamarra

Fernandojdk:
Aparentemente seu código está normal…

Mas qual a versão do servidor MySQL vc está utilizando???

E qual a versão do driver…???


Tanto o servidor quanto o driver são 5.0

Fernandojdk

Manda o código da classe(se não for muito extenso :wink: ) da classe no qual o erro ocorre…

wamarra
Na verdade eu utilizo um evento de um JButton para fazer a conexão. Segue o evento:
private void IncluirLancamentosJuridico(java.awt.event.ActionEvent evt) {                                            
        try{     
            Class.forName("com.mysql.jdbc.Driver");     
            String url = "jdbc:mysql//localhost:3306/gerpro";     
            String usuario = "root";     
            String senha = "admin";     
            Connection con;     
            con = DriverManager.getConnection(url, usuario, senha);     
            PreparedStatement ps = con.prepareStatement("INSERT INTO lancamentosjuridico WHERE condominio = ? , servico = ?, " +
                    "hora = ? , data = ? , contato = ? , comentario = ?");     
            ps.setString(1, (String) comboJurLancCondominio.getSelectedItem());     
            ps.setString(2, (String) comboJurLancServico.getSelectedItem());     
            ps.setString(3, cxTxtJurLancHorario.getText()); 
            java.util.Date datautil = jxJurLancData.getDate();   
            java.sql.Date datasql = new java.sql.Date(datautil.getTime());   
            ps.setDate(4, datasql);      
            ps.setString(5, cxTxtJurLancContatoCom.getText());     
            ps.setString(6, cxTxtJurLancComentarios.getText());     
               
            ps.executeUpdate();     
              
            con.close();     
                JOptionPane.showMessageDialog(null, "Lançamento incluido com sucesso!","Mensagem do Programa",JOptionPane.INFORMATION_MESSAGE);     
        }catch (ClassNotFoundException e ){     
                JOptionPane.showMessageDialog(null, "Falha na conexão.\n" + e.getMessage());     
                    e.printStackTrace();     
        }catch (SQLException e){     
                JOptionPane.showMessageDialog(null, "Erro na inclusão.\n" + e.getMessage(),     
                    "Mensagem do Programa",JOptionPane.ERROR_MESSAGE);     
        }
}
Fernandojdk

Saca só… Verifique se o driver está incluido na sua classpath…

Pelo que pesquisei, esse erro ocorre com varias pessoas quando o java não consegue carregar a classe do driver…

Tente realizar o download mais uma vez do driver para testar se o seu não está corrompido…

Fernandojdk

Olha…

Tente remover a instrucao que utiliza java.sql.Date e rode o programa para ver se o driver funciona normalmente…
Caso de certo, vc já saberá que o problema seria na utilizacao desta classe…

Daí vc tenta o exemplo de parsear para string q eu citei acima…

wamarra

Tenho que fazer algum import?
Pois, o compilador está perguntando pela classe SimpleDateFormat

wamarra

Fernandojdk:
Saca só… Verifique se o driver está incluido na sua classpath…

Pelo que pesquisei, esse erro ocorre com varias pessoas quando o java não consegue carregar a classe do driver…

Tente realizar o download mais uma vez do driver para testar se o seu não está corrompido…


O driver está corretamente incluido no CLASSPATH,
Uma vez que consigo conectar atravez de outros eventos
somente neste tá dando erro.

Cara, e peço desculpas por tá te importunando.
Vlw!

Fernandojdk

import java.util.*;

Fernandojdk

Tente fazer assim(só uma dica :lol: ):

private void IncluirLancamentosJuridico(java.awt.event.ActionEvent evt) {                                            
        try{     
            Class.forName("com.mysql.jdbc.Driver");     
            String url = "jdbc:mysql//localhost:3306/gerpro";     
            String usuario = "root";     
            String senha = "admin";     
            Connection con;     
            con = DriverManager.getConnection(url, usuario, senha);  
        }catch (ClassNotFoundException e ){     
                JOptionPane.showMessageDialog(null, "Falha na conexão.\n" + e.getMessage());     
                    e.printStackTrace();     
                return;
        }   
            try {
            PreparedStatement ps = con.prepareStatement("INSERT INTO lancamentosjuridico WHERE condominio = ? , servico = ?, " +
                    "hora = ? , data = ? , contato = ? , comentario = ?");     
            ps.setString(1, (String) comboJurLancCondominio.getSelectedItem());     
            ps.setString(2, (String) comboJurLancServico.getSelectedItem());     
            ps.setString(3, cxTxtJurLancHorario.getText()); 
            //A parte  4 do ps eu comentei só para testar...
            ps.setString(5, cxTxtJurLancContatoCom.getText());     
            ps.setString(6, cxTxtJurLancComentarios.getText());     
               
            ps.execute();     
              
            con.close();     
            JOptionPane.showMessageDialog(null, "Lançamento incluido com sucesso!","Mensagem do Programa",JOptionPane.INFORMATION_MESSAGE);     
}catch (SQLException e){     
                JOptionPane.showMessageDialog(null, "Erro na inclusão.\n" + e.getMessage(),     
                    "Mensagem do Programa",JOptionPane.ERROR_MESSAGE);     
}
}

Tente dessa forma para tentar localizar o erro... Diga o que foi retornado...
Vc esta utilizando qual IDE?

wamarra
Tentei com o:

import java.util.*;

Não deu certo, então tentei com o:

import java.text.SimpleDateFormat;

Funcionou, porém continua dando a mesma mensagem

No Suitable driver

O que será que ainda pode está errado?
wamarra

Tentei da maneira que me falou:
retirei o ps.setString(4…
porém continua com o mesmo erro.
será que há necessidade de fazer com outro campos?

Quanto ao IDE, utilizo o NetBeans.

Fernandojdk

Amigo… Talvez por uma falta de atenção minha e sua, faltou uma coisinha veja:

String url = "jdbc:mysql//localhost:3306/gerpro";

Consegue notar o erro???

Bem…

Substitua sua linha por isso:

String url = "jdbc:mysql://localhost:3306/gerpro";

Note, entre “jdbc:mysql” e “//localhost:3306/gerpro” vc esqueceu o ‘:’…

Tenta lá que vai dar certo… Avisa aew se deu…

wamarra

Cara não acredito que era só esses : que tava tirando meu juizo :shock:
A conexão foi estabelecida. agora só falta corrigir a sintaxe do sql que ainda tá dando erro.
e Fernando, Valeu mesmo a força fico te devendo essa.
Abração

Criado 22 de novembro de 2007
Ultima resposta 22 de nov. de 2007
Respostas 21
Participantes 4