Date em Java

Forum destinado a Linguagem JAVA! Classes, orientação a objeto, conexão com banco, chamada de procedures, etc
Responder
george15
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 6
Registrado em: Sex, 26 Nov 2010 2:01 pm
Localização: Manaus

Eu fiz métodos para conectar, por isto não estava usando o Statement e o connection naquela query :
Conexao é uma superclasse
public class Conexao
{
final private String driver = "oracle.jdbc.driver.OracleDriver";
final private String url = "jdbc:oracle:thin:@127.0.0.1:1521:XE";
final private String usuario = "*****";
final private String senha = "**********";
private Connection conexao;
public Statement st;
public ResultSet rs;

public boolean conecta()
{
boolean result = true;

try
{
Class.forName(driver);
conexao = DriverManager.getConnection(url, usuario, senha);
st = conexao.createStatement();

}
catch(ClassNotFoundException Driver)
{
JOptionPane.showMessageDialog(null,"Driver não localizado: "+Driver);
result = false;
}
catch(Exception b)
{
JOptionPane.showMessageDialog(null,"Erro de Conexão!");
result = false;
}

return result;
}//fim do metodo conecta

por isto eu usei só o resultSet (rs) naquele código, pois na main eu chamo instancio os objetos e chamo o método conecta...
package Proj_Oracle_Java;

import javax.swing.JOptionPane;

public class Executa_Sistema
{
public static void main(String[] args)
{
int op = 1;

while(op != 0)
{
op = Integer.parseInt(JOptionPane.showInputDialog(null,"\n[ 1 ] LISTAR DADOS \n\n[ 2 ] "+
" INSERIR DADOS\n\n[ 3 ] DELETAR DADOS \n\n[ 4 ] ALTERAR DADOS \n\n[ 5 ] EFETUAR VENDAS\n\n"+
"[ 0 ] SAIR DO SISTEMA\n\n"," *** MENU PRINCIPAL ***",JOptionPane.QUESTION_MESSAGE));

switch(op)
{
case 1:
Listar menu = new Listar();
menu.conecta();
menu.Listar_dados();
break;
case 2:
Inserir dados = new Inserir();
dados.conecta();
dados.Inserir_dados();
break;
case 3:
Delete del = new Delete();
del.conecta();
del.deletar();
break;
case 4:
Update up = new Update();
up.conecta();
up.Update_dados();
break;
case 5:
Conexao vendas = new Conexao();
vendas.conecta();
// vendas.Inserir_dados();
vendas.Listar_dados();
break;

}//switch

}//while

}//main
}//class





Eu encontrei uma solução viável por enquanto e vou estudar este seu código...Veja como consegui, só que me aparece a data e a hora juntos :


rs = st.executeQuery("Insert into venda(vendata,venclicodigo,venfuncodigo) values (to_date(' "+vendata+" ','dd/mm/rr hh24:mi:ss'),' "+venclicodigo+" ', ' "+venfuncodigo+" ')");

Eu coloquei em formato de hora (rr hh24:mi:ss') na query apenas para ficar menos 'deselegante', digamos assim, o meu código. Porém, como poderia fazer para aparecer somente a data ou somente a hora ???
No meu caso eu peço para armazenar a data (vendata) mas, se eu tivesse um outro atributo para inserir somente a hora (venHorario) ??? Esta é a minha dúvida, tanto em Java como em ORACLE..
Obrigado pela dica, mais uma vez... Como sou novato, ainda vou postar bastante dúvidas por aqui e contar com a ajuda da galera gente boa, igual a você ! Valeu.
burga
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 232
Registrado em: Qui, 26 Nov 2009 1:05 pm
Localização: SP
Ricardo H. Tajiri

A data e hora fazem parte do DATE do java e do Oracle, não vejo muito problema em mantê-los juntos...


Caso queira mostrar só a data (ou só a hora), você pode formatá-la com o SimpleDateFormat, transformando-a em string, para depois apresentá-la.

Selecionar tudo

  public static void main(String[] args) 
  {
    Date data = new Date();
    SimpleDateFormat dtFormatData = new SimpleDateFormat("dd-MM-yyyy");
    SimpleDateFormat dtFormatHora = new SimpleDateFormat("hh:mm:ss");

    String dataStr = dtFormatData.format(data);
    
    System.out.println("data formatada: " + dataStr);
    
    String horaStr = dtFormatHora.format(data);
    
    System.out.println("hora formatada: " + horaStr);
    
  }
}

Não sei se tem algum jeito mais elegante.



Eu até pensei em postar a solução que você encontrou, mas o problema é que ela permite SQL Injection, como eu já falei. Segue um link explicativo pra você entender o problema.
http://en.wikipedia.org/wiki/SQL_injection


Outro problema também (coisa do Oracle) é que sempre que você executar algum insert (ou qualquer outro SQL - select, update...) o Oracle vai ter que fazer o Hard Parsing do seu SQL, podendo gerar alguma queda no desempenho, dependendo do tamanho da sua aplicação e do número de usuários. Isto porque você não estará usando BIND variables.

A forma como eu postei no outro tópico soluciona tanto o problema de SQL injection quanto o problema das BINDS. Mas isso é com você... :) [/code]
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 2 visitantes