[java] Databaseinhoud in Vector

Pagina: 1
Acties:

  • Skate2000
  • Registratie: November 1999
  • Laatst online: 29-12-2024
Goedemorgen allemaal. Ik heb een klein probleem dat voor sommigen onder jullie wellicht simpel op te lossen is.

Ik heb hier een database, en daar haal ik een x aantal vragen uit, nou wil ik deze vragen een voor een op het scherm tonen.

Maar hoe bewaar ik hemelsnaam alles wat uit die DB komt (dus alle kolommen (vraag, soort vraag, etc)) in een vector?

Ik weet het ff niet meer :'(

  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 02-09 19:44

Gerco

Professional Newbie

Als je de vragen uit een database haalt en je kan er iets mee doen (op het scherm tonen, System.out.println()'en), waarom zou je ze dan NIET in een Vector kunnen zetten?

Ik begrijp het probleem niet, kun je de gegevens niet uit de db halen? Of weet je niet hoe een Vector werkt?

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Je maakt eerst een object waar een record inpast, dus een Persoon class ofzo. Daarna plaatst je ze in een array,list,map of iets van dien aard.

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Hier een klein stukje voorbeeld code:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
protected abstract S read(ResultSet resultSet)
    throws SQLException;

protected List<S> readList(ResultSet resultSet) throws SQLException {

  List<S> result = new ArrayList<S>();

  try {
    while(resultSet.next()) {
    result.add(read(resultSet));
    }
  }
  finally {
    if(resultSet != null) {
    resultSet.close();
    }
  }

  return result;
}

Als je de abstracte methode implementeert en de geparameterizeerdee typen eruit haalt ben je klaar.

Elke 'read' aanroep leest het huidige record uit de ResultSet en maakt daar een object van (bijvoorbeeld "Person", "Reservation", "Topic").

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • wasigh
  • Registratie: Januari 2001
  • Niet online

wasigh

wasigh.blogspot.com

Waarom maak je geen object die de waarde van een Rij opslaat en sla je deze in een Vector op?

Vector.add( [Object] );

Overigens kun je beter de ApiDoc bekijken als je wilt weten hoe iets werkt :)

Edit: oftwel wat Martin ook doet ;) :)
Edit2: en alarmnummer ook :)

Wie durft er nu nog te klagen dat ie met een java vraag niet geholpen wordt ;)

  • Skate2000
  • Registratie: November 1999
  • Laatst online: 29-12-2024
Maar hier is meer sprake van een array, en niet van een vector.

Ik wil het in een vector zetten, maar ik ben er helemaal NIET in thuis, en begrijp dus (nog steeds) niet, hoe ik de inhoud van mijn resultSet in een vector krijg..

En dan natuurlijk ook nog, hoe ik het regel-voor-regel kan uitlezen.

Bij een array vraag je om een regelnummer, die je dan krijgt. Bij een vector doe je dat met met een "volgende", "vorige", "eerste" of "laatste", is wat ik begrijp.

Hoe krijg ik dus de z001 van de db in een vector, en hoe krijg ik het regel voor regel weer uit die vector? :)

  • wasigh
  • Registratie: Januari 2001
  • Niet online

wasigh

wasigh.blogspot.com

Begin eens hier:
http://java.sun.com/j2se/1.4/docs/api/index.html

dan kom je vanzelf hier:
(java.util.Vector)
http://java.sun.com/j2se/1.4/docs/api/java/util/Vector.html

en dan mag je nog een keer vragen wat je niet begrijpt :)

Overigens heeft Martin de code al gepost hoe je iets uit een Database krijgt. Als je daar geen ervaring mee hebt dan zou ik hier beginnen:
http://java.sun.com/j2se/1.4/docs/guide/jdbc/index.html

allemaal dingen die je zelf ook had kunnen vinden :)

  • wasigh
  • Registratie: Januari 2001
  • Niet online

wasigh

wasigh.blogspot.com

Op woensdag 12 juni 2002 10:01 schreef mbravenboer het volgende:
Hier een klein stukje voorbeeld code:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
protected abstract S read(ResultSet resultSet)
    throws SQLException;

protected List<S> readList(ResultSet resultSet) throws SQLException {

  List<S> result = new ArrayList<S>();

  try {
    while(resultSet.next()) {
    result.add(read(resultSet));
    }
  }
  finally {
    if(resultSet != null) {
    resultSet.close();
    }
  }

  return result;
}
Een try zonder een catch? mmm dat heb ik nog nooit gezien :+

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Op woensdag 12 juni 2002 10:12 schreef wasigh het volgende:

[..]

Een try zonder een catch? mmm dat heb ik nog nooit gezien :+
Hij geeft daarmee aan dat hij hoe dan ook die result set sluit. Als er wel een exception komt (of geen) dan gaat hij altijd langs dat finally block.

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
wasigh: Een try zonder een catch? mmm dat heb ik nog nooit gezien :+
Mooi he? :) .

try-finally kan je behoorlijk vaak best aardig gebruiken, maar helaas is finally een beetje het vergeten onderdeel van een try block...

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


Verwijderd

OK, ik ben hier weer een stukje verder, let op:
code:
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
public void getQuestionList()
    {
        System.out.println("Let op");
        String sQuery = "SELECT * FROM vraag";
        ResultSet rs;
        
        int i=1;
        try
        {
            rs = stmt.executeQuery(sQuery);
            String [] vragenLijst = new String[4];
            
            while(rs.next())
            {
                     int vraagid = rs.getInt("id");
                    String vraag = rs.getString("vraag");
                    int antwoordsoort = rs.getInt("antwoordsoort");
                    
                    
                    vragenLijst[i]= vraag;
                    System.out.println("Hij doet het");
                    System.out.println(vragenLijst[i]);
                    i++;
                    
            }
           }
           
           catch (Exception e)
           {
               System.out.println("hij doet het niet");
           }

Er komt steeds uit:
Let op
Hij doet het niet
:'( :( Hoe kan dit, zo fout is het toch niet?



EDIT: Ik ben nog steeds Skate2k, maar een bepaald iemand was niet uitgelogd.. :P

  • wasigh
  • Registratie: Januari 2001
  • Niet online

wasigh

wasigh.blogspot.com

Debug Regel 1:
Catch je een Exception print hem dan naar het scherm

e.printStackTrace();

dan weet je in ieder geval wat er fout gaat :)

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Op zich is die array heel grappig, maar een List is toch echt een betere oplossing als je niet zeker weet of de qeury die je uitvoert ook wel echt 4 elementen oplevert...

Je moet daarom of een check inbouwen (nu itereer je door heel het resultaat), of een verzameling met dynamische grootte gebruiken (ArrayList of Vector dus).

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • Burat
  • Registratie: Oktober 1999
  • Niet online

Burat

bos wortels

Op woensdag 12 juni 2002 10:00 schreef Alarmnummer het volgende:
Je maakt eerst een object waar een record inpast, dus een Persoon class ofzo. Daarna plaatst je ze in een array,list,map of iets van dien aard.
Ik denk dat dit in dit geval de duidelijkste oplossing is. Een object maken die precies row representeert en die vervolgens in een Vector zetten.

Om het op iets meer n00b niveau uit te leggen:

0) Stel je DB bevat personen [id, naam, adres, leeftijd].
1) Maak een Personen class
code:
1
2
3
4
5
6
7
8
9
10
11
public class Persoon
{   String naam, String adres;
    int leeftijd, int id;

    public Persoon(int id, String naam, String adres, int leeftijd)
    {   this.id = id;
        this.naam = naam;
        this.adres = adres;
        this.leeftijd = leeftijd;
    }
}

2) Stop in je hoofdclass alle personen in een Vector
code:
1
2
3
4
5
6
7
Vector personen = new Vector();
Persoon menneke;

while( ... doorlopen rijen ...)
{   menneke = new Persoon(id, naam, adres, leeftijd);
    personen.add(menneke);
}

Homepage | Me @ T.net | Having fun @ Procurios | Collega's gezocht: Webontwikkelaar PHP


  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Op woensdag 12 juni 2002 10:50 schreef wasigh het volgende:
Debug Regel 1:
Catch je een Exception print hem dan naar het scherm

e.printStackTrace();

dan weet je in ieder geval wat er fout gaat :)
:P

Als je een finally block hebt dan gooi je die exception niet weg hoor. Dat ding wandelt gewoon naar boven, en daar kan je hem altijd afdrukken.

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Op woensdag 12 juni 2002 11:04 schreef Burat het volgende:

[..]

Ik denk dat dit in dit geval de duidelijkste oplossing is. Een object maken die precies row representeert en die vervolgens in een Vector zetten.

Om het op iets meer n00b niveau uit te leggen:

0) Stel je DB bevat personen [id, naam, adres, leeftijd].
1) Maak een Personen class
code:
1
2
3
4
5
6
7
8
9
10
11
public class Persoon
{   String naam, String adres;
    int leeftijd, int id;

    public Persoon(int id, String naam, String adres, int leeftijd)
    {   this.id = id;
        this.naam = naam;
        this.adres = adres;
        this.leeftijd = leeftijd;
    }
}

2) Stop in je hoofdclass alle personen in een Vector
code:
1
2
3
4
5
6
7
Vector personen = new Vector();
Persoon menneke;

while( ... doorlopen rijen ...)
{   menneke = new Persoon(id, naam, adres, leeftijd);
    personen.add(menneke);
}
Je gaat inderdaad de goeie richting op. Maar we gaan het meteen een stukje makkelijker maken. Het relationele database model is leuk voor databases, die vinden key`s ed altijd leuk. Stel dat ik een persoon hebt, en deze persoon die kan een of meer fietsen bezitten. Dan zou iedere fiets een referende sleutel naar de sofinr van een persoon moeten hebben. Maar als je met java werkt heb je veel liever zoiets:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Persoon{
   private int _sofinr;
   private List _fietsList = new LinkedList();
   
   public Persoon(int sofinr, ....){
    _sofinr = sofinr;
   }
   
   public void add(Fiets fiets){
    _fietsList.add(fiets);
   }

   public List getFietsen(){
     return Collections.unmodifiableCollection(_fietsList);
   }
}

Dit is veel handiger. Want als je alle fiets van Jan wilt hebben, zeg je gewoon Jan.getFietsen(). Je moet er dus voor zorgen dat als je je objecten weer terug in java geheugen gaat laden dat je van dat Relation Database model afstapt en weer terug gaat naar Object Model.

[edit] is nu ff aan het twijfelen over de naam: Relationeel database model. Ik bedoel dus het model waarin de keys zijn geplaatst bij de entiteiten.

*maakt niet zoveel databases*

  • wasigh
  • Registratie: Januari 2001
  • Niet online

wasigh

wasigh.blogspot.com

Op woensdag 12 juni 2002 11:29 schreef Alarmnummer het volgende:

[..]

:P

Als je een finally block hebt dan gooi je die exception niet weg hoor. Dat ding wandelt gewoon naar boven, en daar kan je hem altijd afdrukken.
ik had het niet tegen jullie ;) ik had het tegen de topicstarter die wel een message print dat er iets foutgaat maar niet print wat er fout gaat ;) (happy debugging :P)

  • Skate2000
  • Registratie: November 1999
  • Laatst online: 29-12-2024
Thanks you guys, dankzij die duidelijke uitlegjes, en rondneuzen in de api is het dan toch gelukt.

We kunnen de DB nu uitlezen, en alles in de vector plaatsen. Hier kunnen we vervolgens weer iets uithalen, om op het scherm te tonen. 8-)

Luv U all. :)
Pagina: 1