Avatar billede overgaard1605 Nybegynder
06. maj 2005 - 21:58 Der er 17 kommentarer og
1 løsning

update dato i DB

nogle der kan komme med et forslag om hvordan man opdaterer et dato felt i en database. Har prøvet med følgende, men kan ikke få det til at virke..

PreparedStatement setDato = myConn.prepareStatement("UPDATE medarbejder SET dato = ? WHERE medarbejderNr='"+tempNummer+"'");

setDato.setDate(1, new java.sql.Date(System.currentTimeMillis());
setDato.execute();
Avatar billede arne_v Ekspert
06. maj 2005 - 22:09 #1
Hvad med:

PreparedStatement setDato = myConn.prepareStatement("UPDATE medarbejder SET dato = ? WHERE medarbejderNr = ?");
setDato.setDate(1, new java.sql.Date(System.currentTimeMillis());
setDato.setInt(2, tempNummer);
setDato.executeUpdate();

?

eller

setDato.setString(2, tempNummer);

hvis det virkeligt er sådan en
Avatar billede overgaard1605 Nybegynder
06. maj 2005 - 22:20 #2
det der med medarbejderNr skal ikke opdateres. det er kun datoen jeg skal have opdateret i den kolonne som passer på medarbejderNr, dette virker også på en anden update jeg bruger, det jeg ikke kan er at få datoen opdateret med datoen nu og her, burde jeg ikke kunne det med system.currentTimeMillis()
jeg får følgende fejl:

Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: Value '0000-00-00' can not be represented as java.sql.Date
    org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:825)
    org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:758)
    org.apache.jsp.loginMedarbejder_jsp._jspService(loginMedarbejder_jsp.java:136)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:362)


root cause

java.sql.SQLException: Value '0000-00-00' can not be represented as java.sql.Date
    com.mysql.jdbc.ResultSet.getDateFromString(ResultSet.java:4738)
    com.mysql.jdbc.ResultSet.getDate(ResultSet.java:1055)
    com.mysql.jdbc.ResultSet.getDate(ResultSet.java:1012)
    com.mysql.jdbc.ResultSet.getDate(ResultSet.java:1026)
    org.apache.jsp.loginMedarbejder_jsp._jspService(loginMedarbejder_jsp.java:75)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:362)


note The full stack trace of the root cause is available in the Apache Tomcat/5.0.28 logs.
Avatar billede arne_v Ekspert
06. maj 2005 - 22:22 #3
du kan sagtens bruge ? til WHERE betingelset også
Avatar billede arne_v Ekspert
06. maj 2005 - 22:23 #4
du dør i ResultSet.getDate d.v.s. at det er ikke ovenstående kode som fejler
men i en query
Avatar billede overgaard1605 Nybegynder
06. maj 2005 - 22:38 #5
det kan jeg da se du har ret i...:)

jeg har brugt:
Date datoDB = myResultSet.getDate("dato");

skal jeg bruge noget andet der
Avatar billede arne_v Ekspert
06. maj 2005 - 22:42 #6
Det er faktisk ikke et kode problem men et data problem.

Værdien er 0000-00-00 (lyder som MySQL !!).

java.sql.Date kan kun bruges til datoer fra og med 1970
Avatar billede overgaard1605 Nybegynder
06. maj 2005 - 22:48 #7
jeps det er korrekt for jeg kan godt bruge den nu hvor der er lagt en nyere dato ind i databasen, men kan det ikke løses på en anden måde... skal det gøres ved at når man tilføjer en ny post i databasen, så skal datoen også sættes??
Avatar billede arne_v Ekspert
06. maj 2005 - 22:51 #8
Prøv at undlad en default værdi så den bliver NULL fremfor 0000-00-00
Avatar billede overgaard1605 Nybegynder
06. maj 2005 - 23:01 #9
hmm... det kan jeg ikke umiddelbart få lov til.. jeg styrer min DB i MySQL control center, og der vil den give min dato en default til 0000-00-00, men jeg må bare oprette dem med en dato så...

men tak for dit svar eller smid lige et så får du point.

P.S kender du noget til typo3
Avatar billede arne_v Ekspert
06. maj 2005 - 23:06 #10
svar
Avatar billede arne_v Ekspert
06. maj 2005 - 23:06 #11
kun af omtale

jeg har aldrig haft tid til at kigge lidt nærmere på det
Avatar billede overgaard1605 Nybegynder
07. maj 2005 - 00:04 #12
ved godt at du har svaret på mit indlæg, men vil lige høre om du ved om et Date objekt i en DB også indeholder timer:minutter, sådan at jeg kan få en tid ud på hvor lang tid en person har været logget ind ved at sammeligne datoen fra databasen med en System.currentTimeMillis()
Avatar billede arne_v Ekspert
07. maj 2005 - 00:05 #13
så skal du bruge DateTime og ikke Date som felt type i databasen
Avatar billede overgaard1605 Nybegynder
07. maj 2005 - 00:23 #14
skal der så bruges en anden en setDate() for at få tiden med også, ellers sættes den til nul
Avatar billede xyborx Nybegynder
07. maj 2005 - 00:29 #15
Hvad med at bruge NOW()?
UPDATE ... SET dato = NOW() WHERE ...

Eller har jeg misforstået spørgsmålet?
Avatar billede overgaard1605 Nybegynder
07. maj 2005 - 00:46 #16
det kan jeg slet ikke få til at virke...

setdato.setDate(1,now())

virker ikke
Avatar billede overgaard1605 Nybegynder
07. maj 2005 - 00:47 #17
undskyld men jeg er helt newbie til det her
Avatar billede overgaard1605 Nybegynder
07. maj 2005 - 00:48 #18
ahh... der kom den... sorry
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