Salvar data e hora no BD

Java

12/06/2012

Fala galera, eu queria a juda de voces, pois já tentei muito mais não consegui gravar a data e depois a hora no banco de dados, e eu tenho uma Thread para mostrar data e hora do sistema operacional :
   Date data = new Date();
    SimpleDateFormat formatData = new SimpleDateFormat("dd/MM/yyyy");
    SimpleDateFormat formatHora = new SimpleDateFormat("HH:mm:ss");
	
	   Thread threadRelogio = new Thread() {

            public void run() {
                mostraRelogio();
            }
        };
        threadRelogio.start();
		
		    public void mostraRelogio() {
        try {
            while (true) {
                Date data = new Date();
                String hora = formatHora.format(data);
               jTextfield1.setText(formatHora.format(data));        
                jTextfield2.setText(formatData.format(data));
                Thread.sleep(1000);
               
            }
        } catch (InterruptedException ex) {
        }
    } 
e o que eu quero fazer é aproveitar que a data e hora estão sendo exibidas em seus jtextfields pegar eles e gravar no bd postgresql, a data como [b]Date[/b] e a hora como [b]"Time".[/b] exemplo:
	try{
	 Connection clientes = new conectarBD().getConnection();
	
	String sql1="insert into cadastrar_clientes(nome,idade,datacadastro,horacadastro)values(?,?,?,?)";
PreparedStatement stmt = clientes.prepareStatement(sql1);
stmt.setString(1,jTextfield_n.getText());
stmt.setString(2,jTextfield_i.getText());
stmt.setString(3, no formato data); 
stmt.setString(3, no formato hora);                             

stmt.executeUpdate();
stmt.close();
}catch(Exception errado){
}
Hr

Hr

Curtidas 0

Respostas

Éderson Bologna

Éderson Bologna

12/06/2012

Olá você pode gravar como string e pronto. Para usar só converter depois. Abraços
GOSTEI 0
Hr

Hr

12/06/2012

[quote="edersoncassiano"]Olá você pode gravar como string e pronto. Para usar só converter depois. Abraços
Eu sei que da pra salvar como String, mas eu não posso
   try{   
    Connection clientes = new conectarBD().getConnection();   
      
   String sql1="insert into cadastrar_clientes(nome,idade,datacadastro,horacadastro)values(?,?,?,?)";   
PreparedStatement stmt = clientes.prepareStatement(sql1);   
stmt.setString(1,jTextfield_n.getText());   
stmt.setString(2,jTextfield_i.getText());   
stmt.setDate(3, no formato data);    
stmt.setTime(3, no formato hora);                                
  
stmt.executeUpdate();   
stmt.close();   
}catch(Exception errado){   
}  
GOSTEI 0
Éderson Bologna

Éderson Bologna

12/06/2012

Se "não pode salvar como String", tem que: 1 - determinar qual o tipo da coluna do banco de dados em questão 2 - verificar na documentação do driver JDBC do seu banco qual o tipo do objeto em Java 3 - usar o método correspondente do [color=#008800][b]PreparedStatement[/b][/color] Eu não uso o postgresql, não deu para testar, mas deve ser algo como:
private void inserirData(java.util.Date data) {
  java.sql.Date dataSQL = new java.sql.Date(data.getTime());  // converter para java.sql.Date 
  java.sql.Time horaSQL = new java.sql.Time(data.getTime());  // "                       Time

  try {     
    Connection clientes = new conectarBD().getConnection();     

    String sql1="insert into cadastrar_clientes(nome,idade,datacadastro,horacadastro)values(?,?,?,?)";     

    PreparedStatement stmt = clientes.prepareStatement(sql1);     
    stmt.setString(1,jTextfield_n.getText());     
    stmt.setString(2,jTextfield_i.getText());     
    stmt.setDate(3, dataSQL);      
    stmt.setTime(3, horaSQL);                                  
    
    stmt.executeUpdate();     
    stmt.close();     
  } catch(Exception errado) {     
    errado.printStackTrace();  // se ignorar Exception, não usar printStackTrace, eu não vou mais responder!!!!!!!!
  }  
}
                    [size=11][i](não testado - nenhuma IDE foi ferida ou usada durante a produção ou teste desse código)[/i][/size] Outra possibilidade de obter a data e a hora:
// data no formato: yyyy-[m]m-[d]d
// hora no formato: hh:mm:ss
private void inserirData(String data, String hora) {
  java.sql.Date dataSQL = java.sql.Date.valueOf(data);
  java.sql.Time horaSQL = java.sql.Time.valueOf(hora);

  ...
}
GOSTEI 0
Hr

Hr

12/06/2012

[quote="simu"]Se "não pode salvar como String", tem que: 1 - determinar qual o tipo da coluna do banco de dados em questão 2 - verificar na documentação do driver JDBC do seu banco qual o tipo do objeto em Java 3 - usar o método correspondente do [color=#008800][b]PreparedStatement[/b][/color] Eu não uso o postgresql, não deu para testar, mas deve ser algo como:
private void inserirData(java.util.Date data) {
  java.sql.Date dataSQL = new java.sql.Date(data.getTime());  // converter para java.sql.Date 
  java.sql.Time horaSQL = new java.sql.Time(data.getTime());  // "                       Time

  try {     
    Connection clientes = new conectarBD().getConnection();     

    String sql1="insert into cadastrar_clientes(nome,idade,datacadastro,horacadastro)values(?,?,?,?)";     

    PreparedStatement stmt = clientes.prepareStatement(sql1);     
    stmt.setString(1,jTextfield_n.getText());     
    stmt.setString(2,jTextfield_i.getText());     
    stmt.setDate(3, dataSQL);      
    stmt.setTime(3, horaSQL);                                  
    
    stmt.executeUpdate();     
    stmt.close();     
  } catch(Exception errado) {     
    errado.printStackTrace();  // se ignorar Exception, não usar printStackTrace, eu não vou mais responder!!!!!!!!
  }  
                    [size=11][i](não testado - nenhuma IDE foi ferida ou usada durante a produção ou teste desse código)[/i][/size] Outra possibilidade de obter a data e a hora:
// data no formato: yyyy-[m]m-[d]d
// hora no formato: hh:mm:ss
private void inserirData(String data, String hora) {
  java.sql.Date dataSQL = java.sql.Date.valueOf(data);
  java.sql.Time horaSQL = java.sql.Time.valueOf(hora);

  ...
Cara eu fiz exatamente como voce me sugeriu e nenhum dos dois modos tá cendo aceito, e nessa parte aqui:
private void inserirData(java.util.Date data) {
  java.sql.Date dataSQL = new java.sql.Date(data.getTime());  // converter para java.sql.Date 
  java.sql.Time horaSQL = new java.sql.Time(data.getTime());  // "                       Time
}
  try {     
    Connection clientes = new conectarBD().getConnection();     

    String sql1="insert into cadastrar_clientes(nome,idade,datacadastro,horacadastro)values(?,?,?,?)";     

    PreparedStatement stmt = clientes.prepareStatement(sql1);     
    stmt.setString(1,jTextfield_n.getText());     
    stmt.setString(2,jTextfield_i.getText());     
    stmt.setDate(3, dataSQL);      
    stmt.setTime(3, horaSQL);                                  
    
    stmt.executeUpdate();     
    stmt.close();     
  } catch(Exception errado) {     
    errado.printStackTrace();  // se ignorar Exception, não usar printStackTrace, eu não vou mais responder!!!!!!!!
  }
a parte onde está
   stmt.setDate(3, dataSQL);      
    stmt.setTime(3, horaSQL); 
ele não tá aceitando "dataSQL" e o "horasSQL" e nessa parte aqui:
// data no formato: yyyy-[m]m-[d]d   
// hora no formato: hh:mm:ss   
private void inserirData(String data, String hora) {   
  java.sql.Date dataSQL = java.sql.Date.valueOf(data);   
  java.sql.Time horaSQL = java.sql.Time.valueOf(hora);  
o [b]valueOf[/b] tambem não esta dando certo, e no meu caso eu coloquei essa parte :
 try {     
    Connection clientes = new conectarBD().getConnection();     

    String sql1="insert into cadastrar_clientes(nome,idade,datacadastro,horacadastro)values(?,?,?,?)";     

    PreparedStatement stmt = clientes.prepareStatement(sql1);     
    stmt.setString(1,jTextfield_n.getText());     
    stmt.setString(2,jTextfield_i.getText());     
    stmt.setDate(3, dataSQL);      
    stmt.setTime(3, horaSQL);                                  
    
    stmt.executeUpdate();     
    stmt.close();     
  } catch(Exception errado) {     
    errado.printStackTrace(); 
  }  
dentro do ActionPerformed do botão e o
private void inserirData(String data, String hora) {   
  java.sql.Date dataSQL = java.sql.Date.valueOf(data);   
  java.sql.Time horaSQL = java.sql.Time.valueOf(hora);  
coloquei fora do actionperformed como um método, foi assim que voce fez ? e sobre o que voce falou da coluna do banco, sim ele tem duas colunas data e hora, uma do tipo "Date" e outra do tipo "time with time zone".
GOSTEI 0
Éderson Bologna

Éderson Bologna

12/06/2012

[quote="Higinosui"][quote="simu"] [...]
Cara eu fiz exatamente como voce me sugeriu e nenhum dos dois modos tá cendo aceito, e nessa parte aqui:
private void inserirData(java.util.Date data) {
  java.sql.Date dataSQL = new java.sql.Date(data.getTime());  // converter para java.sql.Date 
  java.sql.Time horaSQL = new java.sql.Time(data.getTime());  // "                       Time
}
  try {     
    Connection clientes = new conectarBD().getConnection();     

    String sql1="insert into cadastrar_clientes(nome,idade,datacadastro,horacadastro)values(?,?,?,?)";     

    PreparedStatement stmt = clientes.prepareStatement(sql1);     
    stmt.setString(1,jTextfield_n.getText());     
    stmt.setString(2,jTextfield_i.getText());     
    stmt.setDate(3, dataSQL);      
    stmt.setTime(3, horaSQL);                                  
    
    stmt.executeUpdate();     
    stmt.close();     
  } catch(Exception errado) {     
    errado.printStackTrace();  // se ignorar Exception, não usar printStackTrace, eu não vou mais responder!!!!!!!!
  }
a parte onde está
   stmt.setDate(3, dataSQL);      
    stmt.setTime(3, horaSQL); 
ele não tá aceitando "dataSQL" e o "horasSQL" e nessa parte aqui:
// data no formato: yyyy-[m]m-[d]d   
// hora no formato: hh:mm:ss   
private void inserirData(String data, String hora) {   
  java.sql.Date dataSQL = java.sql.Date.valueOf(data);   
  java.sql.Time horaSQL = java.sql.Time.valueOf(hora);  
o [b]valueOf[/b] tambem não esta dando certo, e no meu caso eu coloquei essa parte :
 try {     
    Connection clientes = new conectarBD().getConnection();     

    String sql1="insert into cadastrar_clientes(nome,idade,datacadastro,horacadastro)values(?,?,?,?)";     

    PreparedStatement stmt = clientes.prepareStatement(sql1);     
    stmt.setString(1,jTextfield_n.getText());     
    stmt.setString(2,jTextfield_i.getText());     
    stmt.setDate(3, dataSQL);      
    stmt.setTime(3, horaSQL);                                  
    
    stmt.executeUpdate();     
    stmt.close();     
  } catch(Exception errado) {     
    errado.printStackTrace(); 
  }  
dentro do ActionPerformed do botão e o
private void inserirData(String data, String hora) {   
  java.sql.Date dataSQL = java.sql.Date.valueOf(data);   
  java.sql.Time horaSQL = java.sql.Time.valueOf(hora);  
coloquei fora do actionperformed como um método, foi assim que voce fez ? e sobre o que voce falou da coluna do banco, sim ele tem duas colunas data e hora, uma do tipo "Date" e outra do tipo "time with time zone".
o código que você fez é exatamente o mesmo que eu fiz? o que quer dizer com 'ele não tá aceitando "dataSQL" e o "horasSQL"'? Algum erro? tem mensagem de erro? QUAL? o que quer dizer com 'o valueOf tambem não esta dando certo'? Algum erro? tem mensagem de erro? QUAL? O QUE? Parte do código fora do actionPerformed, parte dentro??? Você quebrou o meu método em duas partes? [8-[b][/b]) Com certeza eu não fiz isso, e muito menos vou fazer um acesso a banco de dados dentro do actionPerformed (mas isso é outro problema). Como já escrevi, não uso o postgresql, não fiz nada além de postar aqui, só tentei responder a sua pergunta. Acho que seria muito útil, além de postar as mensagens de erro, você também incluir o respectivo código...
GOSTEI 0
Hr

Hr

12/06/2012

mensagem de erro
GOSTEI 0
Hr

Hr

12/06/2012

vou continuar tentendo aqui, caso eu não consiga, é melhor salvar como string mesmo, pra não dar mais trabalho. sou novato em programação mesmo :sad:
GOSTEI 0
Éderson Bologna

Éderson Bologna

12/06/2012

[quote="Higinosui"]mensagem de erro
esse é apenas o erro do segundo caso. Onde está a do primeiro? esse erro é simples: não tem a [color=blue][b]new[/b][/color] nesses comandos... [color=#008800][b]valueOf [/b][/color]é um método estático dessas classes.
GOSTEI 0
Éderson Bologna

Éderson Bologna

12/06/2012

[quote="Higinosui"]vou continuar tentendo aqui, caso eu não consiga, é melhor salvar como string mesmo, pra não dar mais trabalho. sou novato em programação mesmo :sad:
normalmente não acho boa idéia salvar como [color=#008800][b]String[/b][/color]... e mesmo com o postgresql não deveria ser problema salvar como objeto.
GOSTEI 0
Hr

Hr

12/06/2012

[quote="simu"][quote="Higinosui"]mensagem de erro
esse é apenas o erro do segundo caso. Onde está a do primeiro? esse erro é simples: não tem a [color=blue][b]new[/b][/color] nesses comandos... [color=#008800][b]valueOf [/b][/color]é um método estático dessas classes.
o outro erro é referente a essa parte
stmt.setDate(3, dataSQL);         
stmt.setTime(4, horaSQL); 
o netbeans pergunta se quero criar um campo na classe com o nome de dataSQL e outro com o nome horaSQL.
GOSTEI 0
Hr

Hr

12/06/2012

e tudo que eu queria era aproveitar essa Thread que eu tenho na mesma classe.
   Date data = new Date();   
    SimpleDateFormat formatData = new SimpleDateFormat("dd/MM/yyyy");   
    SimpleDateFormat formatHora = new SimpleDateFormat("HH:mm:ss");   
      
      Thread threadRelogio = new Thread() {   
  
            public void run() {   
                mostraRelogio();   
            }   
        };   
        threadRelogio.start();   
         
          public void mostraRelogio() {   
        try {   
            while (true) {   
                Date data = new Date();   
                String hora = formatHora.format(data);   
               jTextfield1.setText(formatHora.format(data));           
                jTextfield2.setText(formatData.format(data));   
                Thread.sleep(1000);   
                  
            }   
        } catch (InterruptedException ex) {   
        }   
    } 
e aproveitar a data e hora para gravar no bd
GOSTEI 0
Éderson Bologna

Éderson Bologna

12/06/2012

[quote="Higinosui"][quote="simu"][ [...]
o outro erro é referente a essa parte
stmt.setDate(3, dataSQL);         
stmt.setTime(4, horaSQL); 
o netbeans pergunta se quero criar um campo na classe com o nome de dataSQL e outro com o nome horaSQL.
então é que faltou declarar a variável, ou declarou ela fora do método/bloco. [quote="Higinosui"]e tudo que eu queria era aproveitar essa Thread que eu tenho na mesma classe.
   Date data = new Date();   
    SimpleDateFormat formatData = new SimpleDateFormat("dd/MM/yyyy");   
    SimpleDateFormat formatHora = new SimpleDateFormat("HH:mm:ss");   
      
      Thread threadRelogio = new Thread() {   
  
            public void run() {   
                mostraRelogio();   
            }   
        };   
        threadRelogio.start();   
         
          public void mostraRelogio() {   
        try {   
            while (true) {   
                Date data = new Date();   
                String hora = formatHora.format(data);   
               jTextfield1.setText(formatHora.format(data));           
                jTextfield2.setText(formatData.format(data));   
                Thread.sleep(1000);   
                  
            }   
        } catch (InterruptedException ex) {   
        }   
    } 
e aproveitar a data e hora para gravar no bd mas quando é que é para gravar no banco? a cada secundo não faz sentido... e você mencionou um actionPerformed... porque não faz o método como eu postei e chama ela quando for necessário gravar no banco???
GOSTEI 0
Hr

Hr

12/06/2012

[quote="simu"][quote="Higinosui"][quote="simu"][ [...]
o outro erro é referente a essa parte
stmt.setDate(3, dataSQL);         
stmt.setTime(4, horaSQL); 
o netbeans pergunta se quero criar um campo na classe com o nome de dataSQL e outro com o nome horaSQL.
então é que faltou declarar a variável, ou declarou ela fora do método/bloco. [quote="Higinosui"]e tudo que eu queria era aproveitar essa Thread que eu tenho na mesma classe.
   Date data = new Date();   
    SimpleDateFormat formatData = new SimpleDateFormat("dd/MM/yyyy");   
    SimpleDateFormat formatHora = new SimpleDateFormat("HH:mm:ss");   
      
      Thread threadRelogio = new Thread() {   
  
            public void run() {   
                mostraRelogio();   
            }   
        };   
        threadRelogio.start();   
         
          public void mostraRelogio() {   
        try {   
            while (true) {   
                Date data = new Date();   
                String hora = formatHora.format(data);   
               jTextfield1.setText(formatHora.format(data));           
                jTextfield2.setText(formatData.format(data));   
                Thread.sleep(1000);   
                  
            }   
        } catch (InterruptedException ex) {   
        }   
    } 
e aproveitar a data e hora para gravar no bd mas quando é que é para gravar no banco? a cada secundo não faz sentido... e você mencionou um actionPerformed... porque não faz o método como eu postei e chama ela quando for necessário gravar no banco??? isso declarei a variavel fora do bloco, mas como eu faria isso dentro ou fora do bloco try catch ? to ate agora tentando aqui
GOSTEI 0
Hr

Hr

12/06/2012

aqui ta o codigo da minha classe
public class cadastraCliagenda extends javax.swing.JFrame {
  Date data = new Date();   
    SimpleDateFormat formatData = new SimpleDateFormat("dd/MM/yyyy");   
    SimpleDateFormat formatHora = new SimpleDateFormat("HH:mm:ss"); 
    public cadastraCliagenda() {
        initComponents();
       
          Thread mostraRelogio = new Thread() {

            public void run() {
                rodaRelogiopede();
            }
        };
        mostraRelogio.start();
    
//---------------------------------------------    
    public void rodaRelogiopede() {
        try {
            while (true) {
                Date data = new Date();   
                String hora = formatHora.format(data);   
               jTextfield1.setText(formatHora.format(data));           
                jTextfield2.setText(formatData.format(data));  
               read.sleep(1000); 
            }
        } catch (InterruptedException ex) {
        }
    } 
	}
	//metodo que captura de data e hora para salvar no BD;
	private void inserirData(java.util.Date data) {   
  java.sql.Date dataSQL = new java.sql.Date(data.getTime());  // converter para java.sql.Date    
  java.sql.Time horaSQL = new java.sql.Time(data.getTime()); 
  }
  ...
  //botão onde está a ação para gravar no BD
      private void salvar_ActionPerformed(java.awt.event.ActionEvent evt) {                                        
 try{   
    Connection clientes = new conectarBD().getConnection();   
      
   String sql1="insert into cadastrar_clientes(nome,idade,datacadastro,horacadastro)values(?,?,?,?)";   
PreparedStatement stmt = clientes.prepareStatement(sql1);   
stmt.setString(1,jTextfield_n.getText());   
stmt.setString(2,jTextfield_i.getText());   
stmt.setDate(3, dataSQL);         
stmt.setTime(4, horaSQL);                                
  
stmt.executeUpdate();   
stmt.close();   
}catch(Exception errado){   
errado.printStackTrace();
}  
...
}
	
	}
pra voce ver como eu to fazendo
GOSTEI 0
POSTAR