1# men hvordan indstiller jeg datatypen i mysql db'en til at tage imod DateFormat df = new SimpleDateFormat("dd-MMM-yyyy HH:mm:ss")? Jeg vil gerne have at datatypen er det eller noget i den stil og ikke varchar.
2# Hvordan læser jeg denne datatype tilbage i en string efterfølgende?
Jeg vil anbefale at du laver datatypen til datetime. det er mysql's egen datatype og der er masser af funktioner til at handtere sådanne dates; regne på dem, og udtrække den i det format du ønsker.
Men hvordan indsætter jeg en tid fra java til den? Det er vigtigt for mig at det er præcis det samme tidspunkt der bliver skrevet for samtlige gennemløbninger af forløkke.
Du giver den tiden som en streng, mysql er rimeligt god til selv at gætte hvilket format du har valgt og så 'oversætte' korrekt. det er beskrevet i undersiderne til ovenstående link.
Jeg har aldrig arbejded med prepared statement før, så jeg har ikke den fjerneste anelse om, hvordan jeg skal flette det ind i koden. Men jeg prøver lige om det her funker: PreparedStatement pstmt; pstmt.setDate(4, new java.sql.Date((new java.util.Date()).getTime()));
Det har du ret i arne. man binder sig til mysql. Men er man ikke ret sikker på at binde sig alligevel; jeg synes der er lovlig langt imellem de virkelig ANSI compatible SQL'er.
Man preparer sin SQL sætning med ? for værdierne og så erstatter man ? med en værdi med en set metode og når alle værdier er sat kalder man executeUpdate.
Hvis den samme sqætning skal udføres mange gange performer det bedre.
Det lyder jo godt! :o) Men det er vel stadigvæk smart at forberede sin preparedStatement og så tildele den værdi i forløkken, så den ikke skal oprettes hver gang? Altså PreparterStatement pstmt;
Hov, men det holder jo stadigvæk ikke. Så bliver det jo en ny tid for hvert gennemløb. Det var jo ikke meningen. Alle elemter i budgetListe skal skrives ind med samme tid, hvordan kommer jeg udover det?
Når man nu gør det på den her måde, hvilken datatype skal man så vælge i databasen? datetime eller hvad ville du vælge? jeg får nemlig ikke nogen tid når jeg vælger den blot 2003-08-19 00:00:00 Men det er vel date.getTime() der bestemmer det?
Nu har jeg knoklet og knoklet med det, men den vil altså stadig kun datoen, dvs. tidspunket kommer på som 00:00:00 (fx 2003-08-19 00:00:00),selvom jeg har DATETIME som datatype. Jeg laver:
date = new java.util.Date(); ... psOms.setDate(5, new java.sql.Date((date).getTime()));
Er der iøvrigt en begrænsning på hvor lang en preparedstatement må være? Jeg synes det begynder at drille når jeg når op på 10 values :(
To conform with the definition of SQL DATE, the millisecond values wrapped by a java.sql.Date instance must be 'normalized' by setting the hours, minutes, seconds, and milliseconds to zero in the particular time zone with which the instance is associated.
Forrygende Arne! Så funker det jo! Endda selvom datatypen stadig er DATETIME, den kan åbenbart selv finde ud af at konverterer fra timestamp til datetime :o) Mange tak for hjælpen! Jeg har smidt lidt extra points i puljen...
Jeg bøvler dog stadig lidt med med den med de mange values i... jeg får hele tiden fejlen: java.sql.SQLException: Syntax error or access violation, message from server: "You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near ') VALUES ('tope01ab','Karens Kaffebiks','','','','http://','','"
selvom jeg har løbet koden igennem bogstav for bogstav... men jeg må jo have lavet en åndsvag fejl! Det ser jo ud somom, at der mangler en ' ifl. fejlen. Men faktisk ser det sådan her ud:
psFirma = con.prepareStatement("INSERT INTO Firma (Bruger, Navn, Adresse1, Adresse2, Adresse3, Hjemmeside, Land, Tlf, Fax, Email, Noter, Uploaded, Oprettet)) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?)");
Så jeg kan ikke få det til at hænge helt sammen.. :(
Jo! Du har atter ret :o) Mange tak for al hjælpen Arne, det var jo helt forrygende!
JakobA får også lige et par points, for haans interesse og hans links.
Mvh Torben
Synes godt om
Ny brugerNybegynder
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.