Avatar billede clemmensen Nybegynder
28. november 2002 - 11:38 Der er 7 kommentarer og
2 løsninger

Calendar dato til SQL dato

Jeg bruger denne metode til at få datoen på mandag i en given uge i et givet år. Nu er problemmet bare hvordan jeg får Calendar objektet monday lavet om til nogt, der kan spises af MySQL. Metoden der ta'r en uge og et år ser sådan ud:

public static Calendar weekDate(int week, int year) {
        Calendar ref = new GregorianCalendar();
        ref.clear();
        ref.set(GregorianCalendar.YEAR, year);
        ref.set(GregorianCalendar.WEEK_OF_YEAR, week);
        ref.set(GregorianCalendar.DAY_OF_WEEK,
        GregorianCalendar.MONDAY);
        int day = ref.get(GregorianCalendar.DAY_OF_MONTH);
        int month = ref.get(GregorianCalendar.MONTH);
        Calendar monday = new GregorianCalendar();
        monday.set(GregorianCalendar.YEAR,year);
        monday.set(GregorianCalendar.DAY_OF_MONTH,
        ref.DAY_OF_MONTH);
        monday.set(GregorianCalendar.MONTH, ref.MONTH);
        System.out.println(monday);
        return (monday);
    }


Den metode jeg bruger til at skrive ned i databasen med, ser således ud:

//Adds a new user record
    public static void resObjToDB(Reservation p){
        Statement stmt = null;
        ResultSet rs = null;
       
        try{
            // Get a scrollable ResultSet
            Connection conn = DatabaseManager.getConnection();
            stmt = conn.createStatement(
                                        ResultSet.TYPE_SCROLL_SENSITIVE,    //
                                        ResultSet.CONCUR_READ_ONLY      );  //
           
            //Get all of the fields from the personnel table
            rs = stmt.executeQuery( "SELECT * from RESERVATION" );
           
            //Move the cursor to where we need to insert a new row
            rs.moveToInsertRow();
           
            //Update is a part of JDBC 2.0. Here the last row (an empty row) is filled with the instances of the object p
            rs.updateString( "USERNAME_id", p.getReservedBy() );
            rs.updateString( "RESOURCE_id", p.getReservationOf() );
            rs.updateString( "DATE", p.getReservationDate() );
            rs.updateInt( "TIMEBLOCK", p.getReservationTimeblock() );
           
            //Cause the update changes to take effect
            rs.insertRow();
           
            //Close the connection
            rs.close();
            conn.close();   
        }
        catch( SQLException ex ){
            ex.printStackTrace();
        }


Jeg vil meget gerne have et komplet forslag, da jeg efterhånden har set mig blind på problemet :o( På forhånd tak!
Avatar billede clemmensen Nybegynder
28. november 2002 - 11:39 #1
Hov ja. Jeg vil også gerne vide hvordan man omvendt laver en SQL dato om til et Calendar objekt!
Avatar billede arne_v Ekspert
28. november 2002 - 11:48 #2
rs.updateDate kan sætte en java.util.Date
og Calendar har en getTime  som returnerer en
java.util.Date !
Avatar billede arne_v Ekspert
28. november 2002 - 11:59 #3
Ups. Forkert svar.

rs.getDate returnerer en java.sql.Date som kan assignes
til en java.util.Date.

Men rs.updateDate kan ikke kaldes med en java.util.Date
men kun med en java.sql.Date.

Problemet er dog ikke uløseligt:

java.util.Date d = whatever;

rs.updateDate(whatever, new java.sql.Date(d.getTime()))

må kunne læse det !
Avatar billede disky Nybegynder
28. november 2002 - 12:02 #4
Dit Date objekt kalder vi dato.

Så siger du

dato.getTime();
Som returnerer antal millisekunder siden 1/1/1970

Det tal bruger du i constructoren til java.sql.Date som netop bruger denne type tal, så har du konverteret.

Den anden vej kan du bare gøre det direkte, via .setTime()
Avatar billede arne_v Ekspert
28. november 2002 - 12:02 #5
Den anden vej ?

Hvis du er villig til at bruge depracated methods, så
gør du bare:

java.util.Date d = rs.getDate(whatever);
Calendar c = new GregorianCalendar(d.getYear(), d.getMonth(), d.getDate());
Avatar billede clemmensen Nybegynder
28. november 2002 - 12:12 #6
Disky

Kan du ikke gi' et eksempel udfra ovenstående kode? Jeg er ikke specielt skarp til det her:(
Avatar billede disky Nybegynder
28. november 2002 - 12:34 #7
Jeg tænke sådanne her:
        java.sql.Date d = rs.getDate("enDatoFraDatabasen");
        Calendar c = new GregorianCalendar();
        c.setTime(d);

Det var fra java.sql.Date til Calendar.

Den anden vej:
Dit date objekt hedder 'dato'

rs.updateDate("enDatoFraDatabasen",new java.sql.Date(dato.getTime()));

Noget i den retning.

Jeg kan ikke lige teste det da jeg ikke har adgang til en database her.
Avatar billede disky Nybegynder
28. november 2002 - 12:35 #8
Den metode du kalder her:
p.getReservationDate()

Skal bare gøre det jeg lige har vist, og det gælder også den anden vej.
Avatar billede clemmensen Nybegynder
28. november 2002 - 12:43 #9
Så skulle jeg kunne løse det :o)
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