[java/sql] Niet alle records worden opgehaald

Pagina: 1
Acties:

  • eppie
  • Registratie: Maart 2000
  • Niet online
(overleden)
Ik zit met een probleem waar ik niet uit kom :(

Doormiddel van een zelf gemaakt tooltje probeer ik een tabel uit de ene database naar een andere database te kopieeren.

De source db benader ik via ODBC en de 2e is mysql.
De source db bevat 450.000+ records en als ik mijn tooltje draai stopt ie bij
de ~228600 records en zegt dat alles goed is gegaan en hij klaar is, maar dat is hij dus niet :(.

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
    public void transfer() {
            
        int error = 0;
        int t = 0;
        int batch = 0;
        String sql = null;
    
        try{
            
            PreparedStatement sc = cameleon.prepareStatement("select * from msttr");
            ResultSet rsc = sc.executeQuery();
            Statement sm = mysql.createStatement();
            rsc.next();

            
            while (rsc.next()){
                
                println("record: "+t);
                sql = "INSERT INTO msttr VALUES(\'"+rsc.getString("art_no")+"',"
+rsc.getInt("trans_type")+",\'" + rsc.getInt("trans_date")+"',\'"+rsc.getInt("st_vou_no")+"',"
+rsc.getInt("qty_trans")+","+rsc.getInt("st_bal")
+","+ rsc.getInt("check_bal")
+","+rsc.getInt("std_price")+","+ rsc.getInt("sp_pr_cd")+")";
                
                if (batch < 13000){
                
                    sm.addBatch(sql);
                    rsc.next();
                    batch++;
                } else {
                    sm.executeBatch();
                    sm.clearBatch();
                    batch = 0;
                    System.out.println("clear batch");
                }
                
                t++;
            }   
        
            sm.executeBatch();
        
        }catch(Exception e){
            println(e.toString());
            println(sql);
            System.exit(0);
            error++;
        }
        
        println(sql);
        println("Errors: "+error);
        println("total records: "+t);
                        
    }


Ik heb het volgende al gedaan:
PreparedStatement en Statement maakt niets uit.
setMaxRows(500000), maar maakte ook niets uit.
ipv met batches per regel uitvoeren maar dat hielp ook niet.

Ik weet het echt niet meer, geef foutmelding niets hij zegt gewoon dat ie klaar is :(

Iemand een idee?

ALvast bedankt voor de moeite :)

[ Voor 22% gewijzigd door eppie op 23-11-2004 09:43 ]


  • BHR
  • Registratie: Februari 2002
  • Laatst online: 19-05 11:06

BHR

De fout zit volgens mij in rsc.next().
Deze verplaatst de 'resultpointer' bij elke aanroep naar het volgende record in de resultset. Hierdoor sla je steeds het oneven record in de resultset over (het oneven record, omdat in het begin je ook al een keer rsc.next() doet)

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
    public void transfer() {
            
        int error = 0;
        int t = 0;
        int batch = 0;
        String sql = null;
    
        try{
            
            PreparedStatement sc = cameleon.prepareStatement("select * from msttr");
            ResultSet rsc = sc.executeQuery();
            Statement sm = mysql.createStatement();

// waarom eerste record overslaan??
//            rsc.next();

            
            while (rsc.next()){
                
                println("record: "+t);
                sql = "INSERT INTO msttr VALUES(\'"+rsc.getString("art_no")+"',"
+rsc.getInt("trans_type")+",\'" + rsc.getInt("trans_date")+"',\'"+rsc.getInt("st_vou_no")+"',"
+rsc.getInt("qty_trans")+","+rsc.getInt("st_bal")
+","+ rsc.getInt("check_bal")
+","+rsc.getInt("std_price")+","+ rsc.getInt("sp_pr_cd")+")";
                                
                    sm.addBatch(sql);
// gebeurt in while()
//                    rsc.next();
                    batch++;

                if (batch >= 13000)
                {
                    sm.executeBatch();
                    sm.clearBatch();
                    batch = 0;
                    System.out.println("clear batch");
                }
                
                t++;
            }    
        
            sm.executeBatch();
        
        }catch(Exception e){
            println(e.toString());
            println(sql);
            System.exit(0);
            error++;
        }
        
        println(sql);
        println("Errors: "+error);
        println("total records: "+t);
                        
    }

[ Voor 27% gewijzigd door BHR op 23-11-2004 10:03 ]

No amount of key presses will shut off the Random Bug Generator


  • eppie
  • Registratie: Maart 2000
  • Niet online
(overleden)
Bedankt _/-\o_ _/-\o_ _/-\o_

Stom foutje maar zit er de hele morgen al naar te kijken zonder dat ik het zag :P

  • Stephan Oudmaijer
  • Registratie: Oktober 2000
  • Laatst online: 16-08-2023
eppie schreef op dinsdag 23 november 2004 @ 10:08:
Bedankt _/-\o_ _/-\o_ _/-\o_

Stom foutje maar zit er de hele morgen al naar te kijken zonder dat ik het zag :P
je doet je naam eer aan :)