Toon posts:

[Java] Programma slaat niet altijd alle gegevens op

Pagina: 1
Acties:

Verwijderd

Topicstarter
hallo allemaal,

Ik heb een programma geschreven die mijn dvd's bijhoudt en informatie opslaat over de dvd de acteurs, de producers en de directors. Bij het opslaan van de gegevens stoot ik op een probleem in debug mode wordt alles perfect uitgevoerd, in realtime beginnen de problemen.

bij het opslaan van mijn dvd waar alles wordt gekoppeld zoals de producer aan de desbetreffende dvd enzovoort, worden niet alle gegevens opgeslaan, wanneer ik echter nogmaals op mijn knop druk doet hij dit echter wel.
Aan de databank kan het niet liggen denk ik want alles sql statements enzo lopen goed.
Als mijn windows taakbeheer opstaat loopt het cpu verbruik nu ook niet echt bijster hoog.
Het programma javaw.exe verhoogt wel heel vlug in geheugengebruik, maar ik dacht dat garbage collection er toch voorzorgde dat de objects vlug genoeg werden opgekuist.

dit is hier de betreffende code waar het fout loopt
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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
public class SaveDvd {
    private String title, genre, label, cost, rating, year, director, producer, borrower, myNotes;
    private String[] actors;
    
    public SaveDvd(String title, String genre, String label, String cost, String rating, String year,
            String[] actors, String director, String producer, String borower, String myNotes){
        
        this.title = title;
        this.genre = genre;
        this.label = label;
        this.cost = cost;
        this.rating = rating;
        this.year = year;
        this.director = director;
        this.producer = producer;
        this.borrower = borower;
        this.myNotes = myNotes;
        this.actors = actors;
    }

    public String save() {
        String verifiedInput = checkInput();
        if(!verifiedInput.equals("Ok")){
            return verifiedInput;
        }
        else{ 
            saveUpdate();
            return "Ok";
        }
        
    }
    
    private String checkInput() {
        if(title == null || title.trim().equals("")){
            return "Enter a name for your Dvd!";
        }
        
        if(doesGenreExists() == false){
            return "Specify your genre name in the genre screen!";
        }
        
        if(doesDirectorExistsOrIsEmpty() == false){
            return "Specify your director name in the director screen!";
        }
        
        if(doesProducerExistsOrIsEmpty() == false){
            return "Specify your producer name in the producer screen!";
        }
        
        if(doesBorrowerExistsOrIsEmpty() == false){
            return "Specify your borrower name in the borrower screen!";
        }
        return "Ok";
    }
    
    private boolean doesGenreExists() {
        boolean doesExists = false;
        Genre genreToSearch = new Genre();
        genreToSearch.setGenre(genre);
        try{ doesExists = DataReader.getGenre(genreToSearch);}catch(Exception e){}
        genreToSearch = null;
        return doesExists;
    }
    
    /**
     * Method to check the input From the Director returns true if the Director exists or is empty
     * otherwise it returns false
     * @return doesDirectorExistsOrIsEmpty
     */
    private boolean doesDirectorExistsOrIsEmpty() {
        if(director == null || director.trim().equals("")){
            return true;
        }
        else{
            String[] directorName = Utilities.parsePersonName(director);
            FilmCrew director = null;
            try{ director = DataReader.getFilmCrew(directorName[0], directorName[1], "Director");}catch(Exception e){}
            if(director == null){
                directorName = null;
                return false;
            }
            else{
                director = null;
                directorName = null;
                return true;
            }
        }
    }
    
    /**
     * Method to check the input From the Producer returns true if the Producer exists or is empty
     * otherwise it returns false
     * @return doesProducerExistsOrIsEmpty
     */
    private boolean doesProducerExistsOrIsEmpty() {
        if(producer == null || producer.trim().equals("")){
            return true;
        }
        else{
            String[] producerName = Utilities.parsePersonName(producer);
            FilmCrew producer = null;
            try{ producer = DataReader.getFilmCrew(producerName[0], producerName[1], "Producer");}catch(Exception e){}
            if(producer == null){
                producerName = null;
                return false;
            }
            else{
                producer = null;
                producerName = null;
                return true;
            }
        }
    }
    
    /**
     * Method to check the input From the Borrower returns true if the Borrower exists or is empty
     * otherwise it returns false
     * @return doesBorrowerExistsOrIsEmpty
     */
    private boolean doesBorrowerExistsOrIsEmpty() {
        if(borrower == null || borrower.trim().equals("")){
            return true;
        }
        else{
            String[] borrowerName = Utilities.parsePersonName(borrower);
            Borrower borrower = null;
            try{ borrower = DataReader.getBorrower(borrowerName[0], borrowerName[1]);}catch(Exception e){}
            if(borrower == null){
                borrowerName = null;
                return false;
            }
            else{
                borrower = null;
                borrowerName = null;
                return true;
            }
        }
    }
    
    private void saveUpdate() {
        Dvd dvd = saveOrUpdateDvd();
        saveDirectorToDvd(dvd);
        saveActorsToDvd(dvd);
        saveProducerToDvd(dvd);
        saveBorrowerToDvd(dvd);
        dvd = null;
    }
    
    private Dvd saveOrUpdateDvd() {
        Genre genreDvd = fetchGenre();
        Dvd dvd = new Dvd(title, genreDvd, myNotes, label, cost, rating, year);
        boolean dvdExists = dvdExists(dvd);
        if(dvdExists == false){
            try{DataWriter.saveDvd(dvd);}catch(Exception e){}
        }
        else{
            try{DataWriter.updateDvd(dvd);}catch(Exception e){}
        }
        Dvd upToDateDvd = null;
        try{upToDateDvd = DataReader.getDvd(dvd.getTitle());}catch(Exception e){}
        dvd = null;
        return upToDateDvd;
    }
    
    private Genre fetchGenre() {
        Genre genreToReturn = null;
        Genre genreToSearch = new Genre();
        genreToSearch.setGenre(genre);
        try{ genreToReturn = DataReader.getGenre(genreToSearch.getGenre());}catch(Exception e){}
        genreToSearch = null;
        return genreToReturn;
    }

    private boolean dvdExists(Dvd dvd) {
        boolean dvdExists = false;
        Dvd oldDvd = null;
        try{oldDvd = DataReader.getDvd(dvd.getTitle());}catch(Exception e){}
        if(oldDvd != null){
            dvdExists = true;
            oldDvd = null;
        }
        dvd = null;
        return dvdExists;
    }
    
    private void saveBorrowerToDvd(Dvd dvd) {
        if(borrower == null || borrower.trim().equals("")){
            Borrower borrower = null;
            Borrowed borrowed = null;
            try{borrower = DataReader.getBorrower(dvd.getTitle());}catch(Exception e){}
            try{borrowed = DataReader.getBorrowed(borrower, dvd);}catch(Exception e){}
            if(borrowed != null){
                try{DataWriter.deleteBorrowed(dvd);}catch(Exception e){}
            }
        }
        else{
            Borrower borrower = null;
            Borrowed borrowed = null;
            try{borrower = DataReader.getBorrower(dvd.getTitle());}catch(Exception e){}
            try{borrowed = DataReader.getBorrowed(borrower, dvd);}catch(Exception e){}
            try{DataWriter.saveBorrowed(borrowed);}catch(Exception e){}
        }
        dvd = null;
    }

    private void saveProducerToDvd(Dvd dvd) {
        if(producer == null || producer.trim().equals("")){
            FilmCrew producer = null;
            try{producer = DataReader.getContributor(dvd.getTitle(), "Producer");}catch(Exception e){}
            if(producer != null){
                try{DataWriter.deleteContributed(producer, dvd);}catch(Exception e){}
            }
        }
        else{
            FilmCrew producer = null;
            String[] producerToSearch = Utilities.parsePersonName(this.producer);
            try{producer = DataReader.getFilmCrew(producerToSearch[0], producerToSearch[1], "Producer");}catch(Exception e){}
            try{DataWriter.saveContributed(dvd, producer);}catch(Exception e){}
        }
        dvd = null;
    }

    private void saveActorsToDvd(Dvd dvd) {
        ArrayList<FilmCrew> crewActors = null;
        try{ crewActors = DataReader.getContributors(dvd.getTitle(), "Actor"); }catch(Exception e){}
        if(crewActors != null){
            for(FilmCrew savedActor : crewActors){
                boolean mustUpdate = true;
                for(int i=0; i<actors.length; i++){
                    String[] actor = Utilities.parsePersonName(actors[i]);
                    if(savedActor.getFirstName().equals(actor[0]) && savedActor.getName().equals(actor[1])){
                        mustUpdate = false;
                    }
                }
                if(mustUpdate == true){
                    try{ DataWriter.deleteContributed(savedActor, dvd);}catch(Exception e){}
                }
            }
        }
        else{
            crewActors = null;
        }
    }

    private void saveDirectorToDvd(Dvd dvd) {
        if(director == null || director.trim().equals("")){
            FilmCrew director = null;
            try{director = DataReader.getContributor(dvd.getTitle(), "Director");}catch(Exception e){}
            if(director != null){
                try{DataWriter.deleteContributed(director, dvd);}catch(Exception e){}
            }
        }
        else{
            FilmCrew director = null;
            String[] directorToSearch = Utilities.parsePersonName(this.director);
            try{director = DataReader.getFilmCrew(directorToSearch[0], directorToSearch[1], "Director");}catch(Exception e){}
            try{DataWriter.saveContributed(dvd, director);}catch(Exception e){}
        }
        dvd = null;
    }
}


in deze klasse worden nu wel veel databank toegangen gepleegd maar kan me inbeelden dat dit zeker moet kunnen. vooral voor programma's in bedrijven bvb

mijn dallayer bestaat uit 2 grote klassen de datareader en de datawriter
die halen hun info uit repository klassen (RpBorrower, RpFilmCrew, RpContributed, RpDvd, RpGenre, RpLoaned)
deze repositories sturen sql naar de databank

vb ven zo een repository
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
public class RPGenre {
    private DatabaseAcces dba;
    
    public RPGenre() throws Exception{
        dba = DatabaseAcces.getInstance();
    }
    
    public void addGenre(String genre) throws Exception{
        String sql = "INSERT INTO Genre (genre) VALUES ('" + genre + "')";
        dba.executeQuery(sql);
    }
    
    public Result getGenre(String genre) throws Exception{
        String sql = "SELECT * FROM Genre WHERE genre = '" + genre + "'";
        return dba.executeQuery(sql);
    }
    
    public Result getGenre(int genreId) throws Exception{
        String sql = "SELECT * FROM Genre WHERE genreId = " + genreId + "";
        return dba.executeQuery(sql);
    } 
    
    public Result getGenres() throws Exception{
        String sql = "SELECT * FROM Genre";
        return dba.executeQuery(sql);
    }
}


dit is wle niet de ideale manier, hibernate is hier meer voorgeschikt maar ik wou bij wijze van spreken een oefening maken op de datalayer.

Weet er iemand een tip hoe ik kan zorgen dat alles wordt opgeslaan tijdens runtime en niet enkel in debugmode, pak ik iets fundamenteels fout aan ?

alvast dank

  • Robtimus
  • Registratie: November 2002
  • Laatst online: 17:47

Robtimus

me Robtimus no like you

Begin eens met niet alle Exceptions op te eten: je catcht Exception (dus alles) en negeert het vervoglens volledig. Zet daar eens een System.out.println(e) of e.printStackTrace() neer, dan zie je iig wanneer er iets foutgaat.

More than meets the eye
There is no I in TEAM... but there is ME
system specs


Verwijderd

Topicstarter
klein voorbeeldje van mijn datawriter klasse
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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
public class DataWriter {
    public static void saveFilmCrew(FilmCrew crew) throws Exception{
        String firstName = crew.getFirstName();
        String name = crew.getName();
        int[] birthDay = crew.getBirthday();
        char sex = crew.getSex();
        String contactAdress = crew.getContactAdress();
        String function = crew.getFunction();
        String nationality = crew.getNationality();
        RPFilmCrew rpFilmCrew = new RPFilmCrew();
        rpFilmCrew.addFilmCrew(firstName, name, birthDay, sex, contactAdress, function, nationality);
    }
        
    public static void updateFilmCrew(FilmCrew crew) throws Exception{
        String firstName = crew.getFirstName();
        String name = crew.getName();
        int[] birthDay = crew.getBirthday();
        char sex = crew.getSex();
        String contactAdress = crew.getContactAdress();
        String function = crew.getFunction();
        String nationality = crew.getNationality();
        RPFilmCrew rpFilmCrew = new RPFilmCrew();
        rpFilmCrew.updateFilmCrew(birthDay[0], birthDay[1], birthDay[2], sex, contactAdress,function, nationality, firstName, name);
    }
    
    public static void saveGenre(Genre genre) throws Exception{
        RPGenre rpGenre = new RPGenre();
        rpGenre.addGenre(genre.getGenre());     
    }

    public static void saveBorrower(Borrower borrower) throws Exception {
        // TODO Auto-generated method stub
        String firstName = borrower.getFirstName();
        String name = borrower.getName();
        String eMail = borrower.getEmail();
        String cellullar = borrower.getCellullar();
        String contactAdress = borrower.getContactAdress();
        int[] birthDay = borrower.getBirthDay();
        char sex = borrower.getSex();
        RPBorrower rpBorrower = new RPBorrower();
        rpBorrower.addBorrower(firstName, name, eMail, cellullar, contactAdress, birthDay, sex);
        
        
    }

    public static void updateBorrower(Borrower borrower) throws Exception{
        // TODO Auto-generated method stub
        String firstName = borrower.getFirstName();
        String name = borrower.getName();
        String eMail = borrower.getEmail();
        String cellullar = borrower.getCellullar();
        String contactAdress = borrower.getContactAdress();
        int[] birthDay = borrower.getBirthDay();
        char sex = borrower.getSex();
        RPBorrower rpBorrower = new RPBorrower();
        rpBorrower.updateBorrower(firstName, name, eMail, cellullar, contactAdress, birthDay, sex);
        
    }

    public static void saveBorrowed(Borrowed borrowed) throws Exception{
        System.out.println("in datawriter");
        RPLoaned rpLoaned = new RPLoaned();
        ArrayList<Dvd> dvds = borrowed.getLoanedDvds();
        Dvd dvd = dvds.get(0);
        Borrower loaner = borrowed.getLoaner();
        System.out.println(loaner.getBorrowerID());
        rpLoaned.addLoaned(loaner.getBorrowerID(), dvd.getDvdID(), borrowed.getLoanDay(), borrowed.getLoanMonth(), borrowed.getLoanYear());
    }
    
    public static void deleteBorrowed(Dvd dvd) throws Exception{
        RPLoaned rpLoaned = new RPLoaned();
        rpLoaned.deleteLoaned(dvd.getTitle());
    }
    
    public static void deleteContributed(FilmCrew filmCrew, Dvd dvd) throws Exception{
        RpContributed rpContributors = new RpContributed();
        rpContributors.deleteContributed(filmCrew, dvd);
    }
    
    public static void saveDvd(Dvd dvd) throws Exception{
        RPDvd rpDvd = new RPDvd();
        rpDvd.saveDvd(dvd);
    }

    public static void updateDvd(Dvd dvd) throws Exception{
        RPDvd rpDvd = new RPDvd();
        rpDvd.updateDvd(dvd);
    }
    
    public static void saveContributed(Dvd dvd, FilmCrew filmCrew) throws Exception{
        RpContributed rpContributed = new RpContributed();
        rpContributed.saveContributed(dvd, filmCrew); 
    }

    public static void saveContributed(Dvd dvd, ArrayList<FilmCrew> actors)throws Exception {
        RpContributed rpContributed = new RpContributed();
        rpContributed.saveContributed(dvd, actors);
        
    }

    
}

  • Confusion
  • Registratie: April 2001
  • Laatst online: 01-03-2024

Confusion

Fallen from grace

Dit is te vaag. Welke gegevens worden wel opgeslagen en welke niet? Wat versta jij precies onder 'opgeslagen zijn'?

offtopic:
Overigens, al die 'doesXexists' zijn brak Engels. Het is ofwel 'doesXexist' ofwel 'Xexists'. Ik zou voor het laatste gaan en al die 'does' weglaten als ik jou was.

[ Voor 26% gewijzigd door Confusion op 01-12-2005 20:35 ]

Wie trösten wir uns, die Mörder aller Mörder?


  • whoami
  • Registratie: December 2000
  • Laatst online: 14:33
Wil je je eens beperken tot het posten van de relevante code, want zo iedere keer lappen code van 100-den regels posten, is ook niet aangenaam.

https://fgheysels.github.io/


Verwijderd

Topicstarter
bedankt allemaal voor de replys
@IceManX als ik System.out.println doe krijg ik altijd een null waarde en das inderdaad wat er gebeurt hij kan de data maar niet ophalen, terwijl die wel in de databank zitten, want anders zou de code hier nooit raken

@Confusion bedankt voor de tip, heb mijn method namen aangepast
ik zal even uitleggen wat er niet wordt opgeslaan
alvorens het genre, de director ,de producer, de actors en de borrower (laatste 2 zijn nog niet geimplementeerd) kunnen worden weergegeven in mijn hoofdscherm moet je deze eerst opslaan in een subscherm.

Dit gebeurt allemaal perfect, zo ben ik dus ook zeker dat mijn databank volstaat (dit heb ik ook allemaal gecheckt).
In mijn hoofdscherm kan ik dan ook nog bijkomende data gewoon ingeven zoals daar zijn titel, rating, jaar van de film, de kostprijs.

De bedoeling is dan dat ik alles save dat alle info over die bepaalde dvd dus tesamen wordt opgeslaan.
Daarvoor haal ik dan uit de genretabel, directortabel, producertabel, actor en borrowertabel hun id (dus moet ik de databank weer aanspreken) -> hier loopt het fout hij kan die data maar niet ophalen in runtime, wanneer ik dus save zijn de director en producer niet opgeslaan, genre echter wel (actors en borrower zijn nog niet geimplementeerd).
Wanneer ik nu nog eens save wordt wel alles gesaved, in debug klopt alles wordt alles direct gedaan, dus qua programmeercode moet het dus goedzitten denk ik.

En ik kom er niet uit wat het probleem zou zijn hopelijk kan iemand me een gouden tip geven, alvast dank

Verwijderd

Topicstarter
de code loopt volledig in debug maar in runtime blijft het nog altijd problemen geven zou het kunnen dat het misschien veel te zwaar is geprogrammerd bedoel hiermee teveel datatoegangen in 1 keer

Verwijderd

Verwijderd schreef op zondag 04 december 2005 @ 17:03:
de code loopt volledig in debug maar in runtime blijft het nog altijd problemen geven zou het kunnen dat het misschien veel te zwaar is geprogrammerd bedoel hiermee teveel datatoegangen in 1 keer
neuh;
maar als je je probleem echt wilt oplossen, zou ik beginnen met het schrijven van tests;

kwestie van een library toevoegen aan je classpath en wat testcases schrijven
JUnit

Verwijderd

Topicstarter
Verwijderd schreef op zondag 04 december 2005 @ 19:11:
[...]

neuh;
maar als je je probleem echt wilt oplossen, zou ik beginnen met het schrijven van tests;

kwestie van een library toevoegen aan je classpath en wat testcases schrijven
JUnit
hey thx voor de tip, JUnit gebruik ik al een tijdje om mijn pure business klassen te testen.
Nu zou zo direct niet weten hoe JUnit te gebruiken voor databanktoegangen enzo, als er me iemand hierover een artikel of een boek kan aanraden, zou heel tof zijn.

Wanneer ik echter zoek op google enzo naar vb van JUnit zijn dat enkel vb die betrekking houden op de business layer
Ik had eigenlijk ook al gedacht dat zoiets misschien zou te doen zijn, maar spijtig genoeg vind ik daar nog niet veel over, over JUnit met databases

Verwijderd

Topicstarter
sorry dat ik niet gedit heb maar ging momenteel niet
ik wou effe mijn vorige zin nuanceren, ik vind wel voor over database testing, maar het probleem zit hem in een goed duidelijk voorbeeld, dat ik niet kan vinden

  • Confusion
  • Registratie: April 2001
  • Laatst online: 01-03-2024

Confusion

Fallen from grace

Verwijderd schreef op vrijdag 02 december 2005 @ 21:08:
Wanneer ik nu nog eens save wordt wel alles gesaved,
Dat klinkt alsof die 'save' niet alleen een save is, maar bijeffecten heeft. Wat doet de save nog meer, behalve data naar de database schrijven?

Wie trösten wir uns, die Mörder aller Mörder?


  • Nick_S
  • Registratie: Juni 2003
  • Laatst online: 22-04 03:55

Nick_S

++?????++ Out of Cheese Error

Verwijderd schreef op zondag 04 december 2005 @ 23:21:
[...]


hey thx voor de tip, JUnit gebruik ik al een tijdje om mijn pure business klassen te testen.
Nu zou zo direct niet weten hoe JUnit te gebruiken voor databanktoegangen enzo, als er me iemand hierover een artikel of een boek kan aanraden, zou heel tof zijn.

Wanneer ik echter zoek op google enzo naar vb van JUnit zijn dat enkel vb die betrekking houden op de business layer
Ik had eigenlijk ook al gedacht dat zoiets misschien zou te doen zijn, maar spijtig genoeg vind ik daar nog niet veel over, over JUnit met databases
Voor testing met databases (databanken) kun je heel goed DBUnit gebruiken (dbunit.sourceforge.net) Volgens mij wordt op die site ook heel duidelijk uitgelegd hoe dit te gebruiken. Succes!

'Nae King! Nae quin! Nae Laird! Nae master! We willna' be fooled agin!'


Verwijderd

Topicstarter
Voor testing met databases (databanken) kun je heel goed DBUnit gebruiken (dbunit.sourceforge.net) Volgens mij wordt op die site ook heel duidelijk uitgelegd hoe dit te gebruiken. Succes!
bedankt dat was wat ik nodig had
@Confusion
het enige wat in die klasse wordt gedaan is een oproep van methode save die eerst de input gaat checken en dan alles opslaan in de database (de volledige klasse staat iets verder hierboven SaveDvd)
maar daar zie ik toch niet echt een probleem in hoor
Pagina: 1