[JSP]Datums met java.util of java.sql | Parameters

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • HyperBart
  • Registratie: Maart 2006
  • Laatst online: 00:55
Ik ben nog steeds bezig met een projectje voor school, en daar wil maar iets niet lukken. (Geen huiswerkvraag !)

Goed, ik weet niet hoe er in "de echte wereld" wordt geprogrammeerd, ik leer iedere dag bij, ik probeer zoveel mogelijk dingen te snappen die jullie aanbrengen, maar ik doe nog maar voor het tweede jaar Java, en dat is dan nog schoolse Java.

Goed, de code:

Java Server Page:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
if (bekijkAdmin.equals("verstuurAanmaakCursus")) {

     String codeOpleiding = request.getParameter("opleidingCode");

     Opleiding opleiding = daopleiding.getOpleidingMetCode(codeOpleiding);

     java.sql.Date[] datums = null;

     String boodschap = "";
     Boolean fouteInvoer = false;

     DateFormat formatter = new SimpleDateFormat("yyyy-mm-dd");
     java.util.Date datumUtil = null;
     java.sql.Date datumSql = null;

     String datumString = "";

     for (int i = 1; i < opleiding.getDuur() + 1; i++) {
          String parameterInLus = "datum" + i;

          try {
               //java.sql.Date datum = java.sql.Date.valueOf(request.getParameter(parameterInLus));
               datumString = request.getParameter(parameterInLus);
               datumUtil = formatter.parse(datumString);

               datumSql.setTime(datumUtil.getTime());

               datums[i] = datumSql;
          } catch (NumberFormatException nfe) {
               boodschap = "Controleer uw invoer van de datum(s). De datum moet van het formaat \"YYYY-MM-DD\" zijn";
               fouteInvoer = true;
          } catch (Exception e) {
               e.printStackTrace();
               boodschap = "Er is een algemene fout opgetreden";
               fouteInvoer = true;
          }

     //hier nu nog cursussen toevoegen, denk aan autoincrement en de cursus zelf toevoegen
     }

     if (fouteInvoer == false) {

          dacursus.insertCursus(codeOpleiding);

          for (int x = 1; x < datums.length + 1; x++) {

               //methode in daklasse ergens schrijven waarbij het laatste cursusnr van een opleiding wordt opgehaald, dus iets
               // in trand van "select max(cursusnr) from cursus where opleidingscode = ?"

               //laatste cursusnr opvragen met bovenstaande da-methode
               Cursus laatsteCursus = dacursus.getLaatsteCursus();

               Integer laatsteCursusnr = laatsteCursus.getCursusnr();

               Boolean geslaagd = daplanning.insertPlanning(laatsteCursusnr, datums[x]);

               if (geslaagd == true) {
                    boodschap = "De cursus en de datums zijn succesvol toegevoegd aan de opleiding";
               } else {
                    boodschap = "De cursus en de datums zijn niet weggeschreven naar de databank. Probeer het later opnieuw";
               }

          }
     }

     request.setAttribute("boodschap", boodschap);

     RequestDispatcher rd = request.getRequestDispatcher("voegCursusToeMelding.jsp");
     rd.forward(request, response);
}


Op regel 26 vliegt hij er dus iedere keer uit. Ik heb al een breakpoint gezet net wanneer de for lus begint, en dan krijg ik dus heel de tijd dat het dateSql object niet opgevuld wordt.

Ik heb met die numberformat al zitten aanpassen, maar daar komt niets van. In mijn MySQL tabel zit de datum als volgt bv: "1-sep-1999".

Waar ga ik de mist in, waarom wilt hij niet parsen of overhevelen ?

Als je echt het hele project werkend wilt zien: http://lithion.sin.khk.be/Java-projecten/gonevoor GoT.rar

Acties:
  • 0 Henk 'm!

  • Snake
  • Registratie: Juli 2005
  • Laatst online: 07-03-2024

Snake

Los Angeles, CA, USA

1) op regel 26 is datumSql nog steeds null. (nullpointer exception, je moet eerst die variable declareren).
2) op regel 28 sla je gewoon een verwijzing op in die array (java.sql.Date is een class, geen Struct), haal dus het value eruit, als een long (primitief type), en die kan je dan in je array steken.

ook: waar initialiseer je die array van regel 7? Nergens. Gaat ook niet goed e :)

[ Voor 87% gewijzigd door Snake op 05-12-2008 18:19 ]

Going for adventure, lots of sun and a convertible! | GMT-8


Acties:
  • 0 Henk 'm!

  • HyperBart
  • Registratie: Maart 2006
  • Laatst online: 00:55
dat doe ik toch met:

Java Server Page:
1
2
java.util.Date datumUtil = null;
java.sql.Date datumSql = null; 

Acties:
  • 0 Henk 'm!

  • Snake
  • Registratie: Juli 2005
  • Laatst online: 07-03-2024

Snake

Los Angeles, CA, USA

Wat denk je hier van:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
                String codeOpleiding = request.getParameter("opleidingCode");

                Opleiding opleiding = daopleiding.getOpleidingMetCode(codeOpleiding);

                Vector<java.lang.Long> datums = new Vector<java.lang.Long>();

                String boodschap = "";
                Boolean fouteInvoer = false;

                DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");

                for (int i = 1; i < opleiding.getDuur() + 1; i++)
                {
                    String parameterInLus = "datum" + i;

                    try
                    {
                        datums.add((Long)formatter.parse(request.getParameter(parameterInLus)).getTime());
                    }
                    catch (NumberFormatException nfe)
                    {
                        boodschap = "Controleer uw invoer van de datum(s). De datum moet van het formaat \"YYYY-MM-DD\" zijn";
                        fouteInvoer = true;
                    }
                    catch (Exception e)
                    {
                        boodschap = "Er is een algemene fout opgetreden";
                    }

                //hier nu nog cursussen toevoegen, denk aan autoincrement en de cursus zelf toevoegen
                }

[ Voor 83% gewijzigd door Snake op 05-12-2008 18:32 ]

Going for adventure, lots of sun and a convertible! | GMT-8


Acties:
  • 0 Henk 'm!

  • HyperBart
  • Registratie: Maart 2006
  • Laatst online: 00:55
als ik dat van jou dus, heb ik wel weer meldingen met iets van "ambiguous dat date bestaat in java.util en in java.sql", dus ik heb het aangepast naar:

Java:
1
2
java.util.Date datumUtil = new java.util.Date();
java.sql.Date datumSql = new java.sql.Date(datumUtil.getTime());


Niet dat het veel uithaalt, want ik heb nog steeds dat ik in de exception e catch-tak terecht kom...

Dit is nu de herwerkte code:

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
if (bekijkAdmin.equals("verstuurAanmaakCursus")) {

                    String codeOpleiding = request.getParameter("opleidingCode");

                    Opleiding opleiding = daopleiding.getOpleidingMetCode(codeOpleiding);

                    java.sql.Date[] datums = null;

                    String boodschap = "";
                    Boolean fouteInvoer = false;

                    DateFormat formatter = new SimpleDateFormat("yyyy-mm-dd");
                    java.util.Date datumUtil = new java.util.Date();
                    java.sql.Date datumSql = new java.sql.Date(datumUtil.getTime());

                    String datumString = "";

                    for (int i = 1; i < opleiding.getDuur() + 1; i++) {
                         
                         String parameterInLus = "datum" + i;

                         try {
                              //java.sql.Date datum = java.sql.Date.valueOf(request.getParameter(parameterInLus));
                              datumString = request.getParameter(parameterInLus);
                              datumUtil = formatter.parse(datumString);

                              datumSql.setTime(datumUtil.getTime());

                              datums[i] = datumSql;
                         } catch (NumberFormatException nfe) {
                              boodschap = "Controleer uw invoer van de datum(s). De datum moet van het formaat \"YYYY-MM-DD\" zijn";
                              fouteInvoer = true;
                         } catch (Exception e) {
                              e.printStackTrace();
                              boodschap = "Er is een algemene fout opgetreden";
                              fouteInvoer = true;
                         }

                    //hier nu nog cursussen toevoegen, denk aan autoincrement en de cursus zelf toevoegen
                    }

                    if (fouteInvoer == false) {

                         dacursus.insertCursus(codeOpleiding);

                         for (int x = 1; x < datums.length + 1; x++) {

                              //methode in daklasse ergens schrijven waarbij het laatste cursusnr van een opleiding wordt opgehaald, dus iets
                              // in trand van "select max(cursusnr) from cursus where opleidingscode = ?"

                              //laatste cursusnr opvragen met bovenstaande da-methode
                              Cursus laatsteCursus = dacursus.getLaatsteCursus();

                              Integer laatsteCursusnr = laatsteCursus.getCursusnr();

                              Boolean geslaagd = daplanning.insertPlanning(laatsteCursusnr, datums[x]);

                              if (geslaagd == true) {
                                   boodschap = "De cursus en de datums zijn succesvol toegevoegd aan de opleiding";
                              } else {
                                   boodschap = "De cursus en de datums zijn niet weggeschreven naar de databank. Probeer het later opnieuw";
                              }

                         }
                    }

                    request.setAttribute("boodschap", boodschap);

                    RequestDispatcher rd = request.getRequestDispatcher("voegCursusToeMelding.jsp");
                    rd.forward(request, response);
               }

[ Voor 86% gewijzigd door HyperBart op 05-12-2008 18:30 ]


Acties:
  • 0 Henk 'm!

  • Snake
  • Registratie: Juli 2005
  • Laatst online: 07-03-2024

Snake

Los Angeles, CA, USA

(post eens wat minder code tegelijk :) )

Kijk eens naar mijn code, die vector op regel 5 bevat nu alle datums in een long format. Daarmee kan je die datum terug parsen naar een java.Lang.Date :)

Going for adventure, lots of sun and a convertible! | GMT-8


Acties:
  • 0 Henk 'm!

  • HyperBart
  • Registratie: Maart 2006
  • Laatst online: 00:55
Ah, je had nog ge-edit, stiekemerd ! ;)

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
                         for (int x = 1; x < datums.size() + 1; x++) {

                              //methode in daklasse ergens schrijven waarbij het laatste cursusnr van een opleiding wordt opgehaald, dus iets
                              // in trand van "select max(cursusnr) from cursus where opleidingscode = ?"

                              //laatste cursusnr opvragen met bovenstaande da-methode
                              Cursus laatsteCursus = dacursus.getLaatsteCursus();

                              Integer laatsteCursusnr = laatsteCursus.getCursusnr();

                              Boolean geslaagd = daplanning.insertPlanning(laatsteCursusnr, datums[x]);

                              if (geslaagd == true) {
                                   boodschap = "De cursus en de datums zijn succesvol toegevoegd aan de opleiding";
                              } else {
                                   boodschap = "De cursus en de datums zijn niet weggeschreven naar de databank. Probeer het later opnieuw";
                              }

                         }


Ter hoogte van regel elf krijg ik wel nog een foutmelding, ik heb datums[x] veranderd naar datums.elementAt[x], maar dan heb je nog steeds het probleem van het object, dat nu veranderd is naar een Long.

En ik ben even het noorden kwijt, die moet ik normaal toch omzetten naar een java.sql.Date-object he, wat ik dacht te doen met:

Java:
1
Boolean geslaagd = daplanning.insertPlanning(laatsteCursusnr, java.sql.Date(datums.elementAt[x]));


Maar dan verwacht hij een array ipv een vector (whow, vector, dat zat diep weg in mijn hoofdje...)

[ Voor 7% gewijzigd door HyperBart op 05-12-2008 18:46 ]


Acties:
  • 0 Henk 'm!

  • Snake
  • Registratie: Juli 2005
  • Laatst online: 07-03-2024

Snake

Los Angeles, CA, USA

Neen een gewoon java.lang.Date:)

maar je kan beter dit doen:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
for (java.lang.Long datumAsLong : datums)
{
    //methode in daklasse ergens schrijven waarbij het laatste cursusnr van een opleiding wordt opgehaald, dus iets
    // in trand van "select max(cursusnr) from cursus where opleidingscode = ?"

    //laatste cursusnr opvragen met bovenstaande da-methode
    Cursus laatsteCursus = dacursus.getLaatsteCursus();

    Integer laatsteCursusnr = laatsteCursus.getCursusnr();

    Boolean geslaagd = daplanning.insertPlanning(laatsteCursusnr, new java.lang.Date(datumAsLong));

    if (geslaagd == true)
    {
        boodschap = "De cursus en de datums zijn succesvol toegevoegd aan de opleiding";
    }
    else
    {
        boodschap = "De cursus en de datums zijn niet weggeschreven naar de databank. Probeer het later opnieuw";
    }
}


That oughto work!

Btw, in je AdminSerlvet.java mag je gerust na iedere if(bijvoorebeeld op regel 86, regel 96, regel 109, enz...) een else zetten, anders voert hij de rest ook nog uit ;)

En zou je niet beter de tekst op regel 15 of 19 appenden aan de boodschap ipv hettekens te overschrijven? :)

[ Voor 20% gewijzigd door Snake op 05-12-2008 18:59 ]

Going for adventure, lots of sun and a convertible! | GMT-8


Acties:
  • 0 Henk 'm!

  • HyperBart
  • Registratie: Maart 2006
  • Laatst online: 00:55
new java.lang.Date bestaat volgens mijn netbeans niet...

Acties:
  • 0 Henk 'm!

  • Snake
  • Registratie: Juli 2005
  • Laatst online: 07-03-2024

Snake

Los Angeles, CA, USA

HyperBart schreef op vrijdag 05 december 2008 @ 18:58:
new java.lang.Date bestaat volgens mijn netbeans niet...
Denk eens :P

Maak jij nooit typo's? Dat moet java.util.Date zijn natuurlijk ;)

Going for adventure, lots of sun and a convertible! | GMT-8


Acties:
  • 0 Henk 'm!

  • HyperBart
  • Registratie: Maart 2006
  • Laatst online: 00:55
Snake schreef op vrijdag 05 december 2008 @ 19:03:
[...]

Denk eens :P

Maak jij nooit typo's? Dat moet java.util.Date zijn natuurlijk ;)
Ik? Massa's :+
khad het zelf ondertussen gevonden ;), maar die gaf eers die longmethodes niet, zal renderfoutje zijn ofzo.

Het lukt nu wel, maar de DAklasse heb ik moeten aanpassen, ik heb ipv new java.lang.date zoals jij aanraadde java.util.date gebruikt

maar blijkbaar wil mijn DA-methode dan geen record meer inserten, moet daar dan nog iets veranderd worden ivm java.util.date <> java.sql.date ?

edit: Verdorie, nu is het helemaal naar de filistijnen.
Ik dacht dat ik het nu had in mijn daklasse, maar ik krijg wederom een nullpointer...

Het project staat nu in zijn huidige staat wederom op mijn SIN-hosting, met andere url:

http://lithion.sin.khk.be...3540%20voor%20GoT%202.rar

[ Voor 58% gewijzigd door HyperBart op 05-12-2008 19:30 ]


Acties:
  • 0 Henk 'm!

  • BalusC
  • Registratie: Oktober 2000
  • Niet online

BalusC

Carpe diem

Gebruik in je Java code zoveel mogelijk java.util.Date. Pas op het moment dat je PreparedStatement#setDate() wilt doen, zet je de java.util.Date om naar een java.sql.Date. De ResultSet#getDate() kun je prima toewijzen aan java.util.Date aangezien deze de superklasse is van java.sql.Date.

En die NullPointerExcepsion, sja, je weet toch wel wat dat betekent? :) Er is ergens een object reference null terwijl jouw code die probeert te benaderen/aanroepen. De stacktrace vertelt precies waar je moet kijken.

Dit gezegd hebbende, rauwe Java code in een JSP schrijven maakt het nog geen JSP code. Dat is gewoon Java code die feitelijk in Java klasses hoort. Gebruik dan [code=java] ipv [code=jsp], dat leest makkelijker.

[ Voor 3% gewijzigd door BalusC op 05-12-2008 19:32 ]


Acties:
  • 0 Henk 'm!

  • HyperBart
  • Registratie: Maart 2006
  • Laatst online: 00:55
*O* *O* *O* *O*

Het werkt, halelluljah !

[ Voor 113% gewijzigd door HyperBart op 05-12-2008 19:49 ]

Pagina: 1