Avatar billede halfblind Nybegynder
23. maj 2001 - 11:32 Der er 17 kommentarer og
1 løsning

java date og access date

Hvordan kan jeg formattere f.eks.
Date idag = new Date();
så jeg kan gemme den i access, og kolonne er af typen Dato og klokkeslæt (kort dato format)?
Avatar billede delbing Nybegynder
23. maj 2001 - 11:48 #1
se java.sql.Timestamp
Avatar billede delbing Nybegynder
23. maj 2001 - 11:54 #2

PreparedStamement pstmt = ....


Timestamp idagSql = new Timestamp(idag.getTime());
pstmt.setTimestamp(i++, idagSql);

Avatar billede halfblind Nybegynder
23. maj 2001 - 17:51 #3
hmm.....
jeg kan ikke få den til at sammenligne en dato med en dato i databasen, siger bare at datatyperne ikke stemmer overens
Avatar billede delbing Nybegynder
23. maj 2001 - 18:48 #4
Det gør de heller ikke. sql tidstyperne er ikke kompatible med Date klassen. Lav et nyt Date objekt vha. Timestamp.getTime() hvis du skal arbejde med det.

Problemet er at Timestamp kører med opløsning i nanosekunder (pga. SQL standarden), mens Date køre med millisekunder. Lad være med at bruge Timestamp objekter til andet end at gemme og hente data - det er ikke lavet til at arbejde med (medmindre du kun kører med Timestamps selvfølgelig).
Avatar billede halfblind Nybegynder
23. maj 2001 - 18:51 #5
skal jeg så bruge Date klassen?
Fordi jeg skal lave en par sammenligninger, men den brokker sig altid over datatypen
Avatar billede delbing Nybegynder
23. maj 2001 - 18:54 #6
Nu kender jeg ikke dit konkrete problem, men det går ikke at blande Date og Timestamp.
Avatar billede halfblind Nybegynder
23. maj 2001 - 19:00 #7
jeg har ikke blandet dem....
det er her det går galt

    GregorianCalendar idag = new GregorianCalendar();
      idag.add(GregorianCalendar.MONTH, 1);
      dagsDato = Date.valueOf(idag.get(GregorianCalendar.YEAR)+\"-\"
        +idag.get(GregorianCalendar.MONTH)+\"-\"
            +idag.get(GregorianCalendar.DAY_OF_MONTH));

    Class.forName(\"sun.jdbc.odbc.JdbcOdbcDriver\");
              String sourceURL = \"jdbc:odbc:Projekt\";
              Connection c = DriverManager.getConnection(sourceURL);
              Statement stm = c.createStatement();
                 
   
            ResultSet set = stm.executeQuery(\"SELECT * FROM Status WHERE Dato = \'\"+dagsDato+\"\';\");
           

så siger den at datatypen på dagsDato og datoerne i databasen ikke stemmer overens....det er en Access database og typen er kort dato format
Avatar billede delbing Nybegynder
23. maj 2001 - 19:02 #8
brug PreparedStatement som jeg viste ovenfor
Statements er djævelens værk.
Avatar billede logical Nybegynder
23. maj 2001 - 20:02 #9
Din dato i din statement, hvordan ser den ud, kontra hvordan databasen forventer den. Hvis den skriver 2001-3-1, er det så korrekt?

Normalt ville jeg formattere en dato med en SimpleDateFormat klasse, for at kunne specificere masken bedre.
SimpleDateFormat formatter = new SimpleDateFormat(\"yy-MM-dd\");
String s = formatter.format(new Date());


Til de øvrige herrer..
Iøvrigt er et java.sql.Timestamp en nedarvning fra java.util.Date, så en java.sql.Timestamp er pr. definition en java.util.Date

Avatar billede halfblind Nybegynder
23. maj 2001 - 20:05 #10
i databasen ser det sådan her ud

01-03-2001

og dags dato ser sådan ud

2001-03-01

men kan ikke finde ud af at vende den om....
Avatar billede logical Nybegynder
23. maj 2001 - 20:12 #11
Prøv at formatter din dato således:

SimpleDateFormat formatter = new SimpleDateFormat(\"dd-MM-yyyy\");
String s = formatter.format(new Date());

Indsæt dit date object i nederste linie, så får du dag-måned-år, meget simpelt.

Klasse SimpleDateFormat ligger vist i java.text. I java.util.DateFormat ligger vist nok beskrivelserne af masken.

Avatar billede halfblind Nybegynder
23. maj 2001 - 22:50 #12
logical............
men, det er jo en String, det kan jeg vel ikke bruge når jeg skal sammenligne datoer nede i DB som er af typen dato.......
det er sådan at jeg har to String f.eks.
01-05-2001 og 15-05-2001 og en tabel hvor en af atributterne er af typen Dato og fra den tabel skal jeg have værdien fra en anden kolone som svarer til alle datoer imelle de to........
Det kan man vel ikke gøre med en String?
Avatar billede logical Nybegynder
23. maj 2001 - 23:58 #13
Den laver tekstuel mapning, ligesom i SQL plus interface. Husk på, dit SQL udtryk i din statement ER en streng.
Avatar billede halfblind Nybegynder
24. maj 2001 - 09:06 #14
okay........så har jeg lave det som
String s = formatter.format(new Date());
og brug s i min sql sætning i stedet for dagsDato, den siger stadivæk at datatyperne ikke stemmer overens i kriterieudtrykket
Avatar billede lbhansen Nybegynder
25. maj 2001 - 00:36 #15
Det virker som om at der har været nogle problemer med formatet af en date i en access database.

Hvis du bruger formatet mm-dd-yyyy og ikke bruger plinger, så vil den blive opfattet som en date, men den kan ikke finde ud af at validere. Hvorfor ved jeg ikke.
Avatar billede halfblind Nybegynder
25. maj 2001 - 10:07 #16
og duhar ingen forslag til hvordan man kan sammeligne en java date med en dato i db?
Avatar billede halfblind Nybegynder
25. maj 2001 - 10:30 #17
tror faktisk jeg bare tilføjer en ekstra kolonne i tabellen og så laver datoen om til en String.......
så skulle det virke
Avatar billede delbing Nybegynder
25. maj 2001 - 10:59 #18
logical, angående:
\"Til de øvrige herrer..
Iøvrigt er et java.sql.Timestamp en nedarvning fra java.util.Date, så en java.sql.Timestamp er pr. definition en java.util.Date\"

Så er det sandelig et spørgsmål om hvordan man definerer definition. Quote fra API:

\"it is recommended that code not view
Timestamp values generically as an instance of
java.util.Date. The inheritance relationship between Timestamp and java.util.Date really
denotes implementation inheritance, and not type inheritance.\"
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester