Java / Firebird / Access etc..... tô vivo

14 respostas
G

Oi pessoal !!!

No dia 17/03/2003, fiz minha primeira pergunta a galera do GUJ, hoje ela me parece boba, mas tava mais perdido que cego em tiroteio, dai pra cá só pauleira, e graças a voces hoje dia 28/04/2003, entrou no ar meu primeiro sistema em JAVA acessando o FIREBIRD, por volta de 14 usuarios irão usa-lo e até agora tudo bem.

VALEU PESSOAL, pela FORÇA, incentivo, e paciência. :lol:
Muito Obrigado.

[]…

GuttoSP

PS. Se alguem tiver neste mesmo rumo digo (Java/Firebird), e tiver alguma duvida pode contar comigo (sei tudo não, mas o que souber tá na mão)

Valeu…

14 Respostas

wbsouza

Sabe como definir/configurar um DataSource do Firebird no JBoss ?

Estou à procura disso.

[]s, Welington B. Souza

D

estou tendo um problema com a data, me parece que um “Date” para o Java não é o mesmo que um “date” para o Firebird, mas não consigo converter!

Jair_Rillo_Junior

Ja usei Firebird com Java
mas atualmente eu uso o mySQL pois seu Driver JDBC é bem melhor, além que depois que o mySQL criou tabelas InnoDB ficou muito bom usar ele.

Sobre datas do Firebird ele realmente são diferentes.
o que eu usava era o seguinte, usar PreparedStatement e usar o setString e gravar a data como um String do tipo mm-dd-aaaa, vc pode criar um método que recebe um date ou um String, não sei o seu caso, ele faz arruma a Data para o formato que eu disse e retorna uma String e joga no Banco de Dados.

Algo não muito complicado.
aqui no Guj tem algo falando sobre SimpleDateFormat, que ajuda a fazer isso que eu falei

D

foi essa a solução que eu adotei, eu gravo a data como uma string no B e passo para Date no Java, mas estou com um problema com isso, agora eu preciso fazer uma busca no BD ordenado por data, e com a String é inpossível!

Paulo_Silveira

oi daniel
datas eh o grande mal dos bancos de dados
eu gravo um long, q indica o timestamp da data, isso acaba com a dor de cabeca de migrar banco de dados ou, em especial, de lingua que o bancod e dados esta rodando.

N

O problema que vocês tem está em diferenciar java.util.Date de java.sql.Date ???

Se for assim, utilize o método getTime(), que é o timestamp da data, para conversão entre os dois tipos.

Jair_Rillo_Junior

Perguntinha…

no Banco de Dados FireBird/Interbase vc criou o campo como String???
se colocou como String realmente fica dificil de ordenar…

não sei se vc chegou entender, mas eu criei no FireBird campo como Date mesmo, e na hora de gravar eu jogava ele como String mas com o formato mm-dd-aaaa e funcionava normal, se eu precisasse fazer um Select ordenado pela Data funciona…

qualquer coisa estamos ae

wbsouza

Outra opção é gravar a data no formato YYYYMMDD sendo a data gravada como um inteiro, Já fiz isto no Iterbase (aliás funciona em qualquer banco de dados). O unico inconveniente é que vc tem que fazer tratamento para exibir na máscara correta e para gravá-la. Esta é uma técnica muito antiga que desde os tempos do COBOL funcionava.

[]s, Welington B. Souza

D

Estou tentando jogar a data como uma String para o BD, mas ele não aceita, devo estar fazendo algo errado, estou fazendo assim

private SimpleDateFormat formatador= new SimpleDateFormat(MM/dd/yyyy);

private GregorianCalendar calendar = new GregorianCalendar();

query= INSERT INTO tabela (data) +formatador.format(calendar.getTime");

int result= statement.executeUpdate(query);

Eu prefiro essa solução a ter que usar um Int YYYYMMDD por facilidade de tratar a data como data.

Obrigado pela atenção!

cv1

Daniel, use o PreparedStatement pra fazer isso. É muito mais simples e te livra de ter que fazer qualquer tipo de conversão.

[]'s
-cv

D

Eu li a API do PreparedStatement e pelo que percebi ele mantem um comando SQL padrao e eu posso mudar só o valor de um campo e executar o SQL sem precisar ficar escrevendo todo comando de novo.

Mas ainda precisaria usar o setDate e passar um Date para ele, mas esse Date do Java não é o mesmo que um Date do Firebird!

Jair_Rillo_Junior

Faz o seguinte pra testar… cria no banco de dados um campo do Tipo Date normal e pra testar tenta jogar a data em formato MM-DD-YYYY joga o valor na mao, assim por exemplo

PreparedStatement query = objetoConnection.prepareStatement("Insert into Tabela (Seu Campo Data) values (?)";
query.setString("01-01-2003");
query.executeUpdate();

ve se vai funcionar
se funcionou OK, ae depois só vc montar um método que arrumar esse valor de Data para formato mm-dd-yyyy

eu nao tenho mais aqui, mas ja usei isso e funcionou… se precisar de ajuda em como montar o método só dar um grito ae…

espero ter ajudado

D

hehehehe

Funcionou, o BD finalmente esta guardando um Date como deveria, mas não retorna.
Fiz o sequinte:

//Para Colocar a Data, isso Funcionou!
PreparedStatement pstmt= connection.prepareStatement(“UPDATE usuarios SET data=? WHERE login=?”);

pstmt.setString( 1,new java.sql.Date( new GregorianCalendar().getTime().getTime() ) );

pstmt.setString(2,“loginDoUsuario”);

int i= pstmt.executeUpdate();

JOptionPane.showMessageDialog(null,"Resultado do UPDATE: "+i);
//Até aki beleza!

//Agora eu quero recuperar a Data
PreparedStatement pstmt= connection.prepareStatement(“SELECT data FROM usuarios WHERE login= ?”);

pstmt.setString(1,“loginDoUsuario”);

ResultSet rs= pstmt.executeQuery();

JOptionPane.showMessageDialog(null,"Data: "+rs.getDate(1));
//SQLException

java.sql.SQLException: [Microsoft][ODBC Driver Manager] Estado de cursor inválido

at sun.jdbc.odbc.JdbcOdbc.createSQLException(JdbcOdbc.java:6106)

at sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:6263)

at sun.jdbc.odbc.JdbcOdbc.SQLGetDataStringDate(JdbcOdbc.java:3434)

at sun.jdbc.odbc.JdbcOdbcResultSet.getDataStringDate(JdbcOdbcResultSet.java:5538)

at sun.jdbc.odbc.JdbcOdbcResultSet.getDate(JdbcOdbcResultSet.java:934)

at Usuarios.(Usuarios.java:31)

at Usuarios.main(Usuarios.java:38)
D

É lógico, esqueci algo essencial: rs.next();

Agora funcionou q é uma beleza!!!

//Para Colocar a Data
PreparedStatement pstmt= connection.prepareStatement(“UPDATE usuarios SET data=? WHERE login=?”);

pstmt.setString( 1,new java.sql.Date( new GregorianCalendar().getTime().getTime() ) );

pstmt.setString(2,“loginDoUsuario”);

int i= pstmt.executeUpdate();

JOptionPane.showMessageDialog(null,"Resultado do UPDATE: "+i);

//Agora para recuperar a Data
PreparedStatement pstmt= connection.prepareStatement(“SELECT data FROM usuarios WHERE login= ?”);

pstmt.setString(1,“loginDoUsuario”);

ResultSet rs= pstmt.executeQuery();

Boolean comResultado= rs.next(); // era isso q faltava!

if (comResultado){

JOptionPane.showMessageDialog(null,"Data: "+rs.getDate(1));}

else{

JOptionPane.showMessageDialog(null,“Resultado não encontrado”);}
Criado 28 de abril de 2003
Ultima resposta 1 de mai. de 2003
Respostas 14
Participantes 7