java-forum.org - Java programmieren aus Leidenschaft
Java 6 Einstieg und professioneller Einsatz
Alter Preis: 34,90 EUR
Jetzt: 0,00 EUR

zzgl. Versandkosten

Zurück   java-forum.org - Java programmieren aus Leidenschaft > Java - Programmierung > Datenbankprogrammierung

Datenbankprogrammierung Fragen zur Anbindung und Programmierung von Datenbanken bzw. Datenbankabfragen

Antwort     Ist dieses Thema erledigt?
Themen-Optionen Thema durchsuchen Ansicht
Alt 10.09.2012, 10:35   #1 (permalink)
Stammbenutzer
Kilobyte
 
Registriert seit: 06.12.2009
Fachbeiträge: 105
Abgegebene Danke: 20
Erhielt 0 Danke für 0 Beiträge
Standard DB Update via batch

Hallo,
ich habe einen "relativ" großen update meiner Oracle-DB vor ( 40-50 Zeilen ), daher habe ich mich dazu entschieden batches zu nutzen. Nur iwie wird bei jeder Durchführung nur eine Zeile, bzw status geupdated.
Hier mein Code:
Java Code: Quelltext in neuem Fenster öffnen
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
public static void set_ps_dark_red(String db, String pgid, String pinid){
    ArrayList<ArrayList<String>> liste = new ArrayList<ArrayList<String>>();
    liste = get_psid_from_pinid(db, pgid, pinid);
    
    PreparedStatement pstmt = null;
    Connection con = datenbankZugriff.dbverbindung.getConnection(db);
    try {
        con.setAutoCommit(false);
        for(ArrayList<String> arlst: liste){
            if(arlst.get(2).equals("2") || arlst.get(2).equals("7") || arlst.get(2).equals("5") || arlst.get(2).equals("1")){
                System.out.println(arlst.get(0));
                int tmp = Integer.parseInt(arlst.get(0));
                pstmt = con.prepareStatement("UPDATE processstep SET status = 9 where psid = ?");
                pstmt.setInt(1, tmp);
                pstmt.addBatch();
                pstmt.clearParameters();
            }
        }
        pstmt.executeBatch();
        System.out.println("executed");
        pstmt.clearBatch();
        pstmt.close();
        con.setAutoCommit(true);
        con.close();
    } catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    
    
    
    
    
    
    
    }

Ich hole mir da die Stati als String aus einer Liste und parse sie dann, das ist wohl längst alles nicht ideal aber es müsste funktionieren. Die Stelle an der es hakt ist glaube ich viel mehr bei den batches. Kann mir jemand etwas dazu sagen? Ich benutze ojdbc14...
Br4ve ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 10.09.2012, 11:11   #2 (permalink)
Java-Forum Team
Moderator
 
Benutzerbild von SlaterB
 
Registriert seit: 13.11.2005
Fachbeiträge: 31.658
Abgegebene Danke: 0
Erhielt 2.568 Danke für 2.529 Beiträge
sind die Zeilen 8 und 23 nur kopiert oder bewußt gesetzt?
geht es wenn du sie wegläßt?
falls sie drin bleiben vielleicht commit() an der Connection nahe Zeile 20 aufrufen

dass ein Status klappt spricht aber nicht unbedingt dafür,
ist arlst.get(2) im if und danach arlst.get(0) als Parameter richtig?
__________________
Hansa wird Meister.
SlaterB ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 10.09.2012, 11:18   #3 (permalink)
Stammbenutzer
Kilobyte
Themenstarter
 
Registriert seit: 06.12.2009
Fachbeiträge: 105
Abgegebene Danke: 20
Erhielt 0 Danke für 0 Beiträge
Absolut ricchtig, commit() muss gerufen werden. Die Aufrufe von AutoCommit sind sehr bewusst gewählt und sind meines Wissens sogar zwingend erforderlich für diese Batch Befehle. Mir ist es allerdings gelungen das problem zu beseitigen, es lag glaube ich daran dass
Code:
pstmt = con.prepareStatement("UPDATE processstep SET status = 9 where psid = ?");
in der For-Schleife war und dadurch jedesmal neu instanziiert wurde, daher wurde die batch quasi irgendwie jedesmal überschrieben und immer nur ein Statement commited...
Br4ve ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 10.09.2012, 11:26   #4 (permalink)
Java-Forum Team
Moderator
 
Benutzerbild von SlaterB
 
Registriert seit: 13.11.2005
Fachbeiträge: 31.658
Abgegebene Danke: 0
Erhielt 2.568 Danke für 2.529 Beiträge
oh ja Mist, sowas will ich eigentlich erkennen können, hier übersehen

Rückgabe von executeBatch() würde wohl verraten, dass nur ein Batch enthalten ist,
ruhig anschauen, gerade im Problemfall
Demo Prepared Statement Add Batch MySQL : Batch UpdateDatabase SQL JDBCJava
__________________
Hansa wird Meister.
SlaterB ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Antwort     Ist dieses Thema erledigt?

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
(RCP) Neues Icon via p2 update schnurpsel Plattformprogrammierung 4 10.02.2011 19:01
junit best practices mouk IDEs und Tools 6 10.12.2009 15:39
Batch Update - auto increment Rembro Datenbankprogrammierung 1 17.11.2007 02:17
Jetspeed@Tomcat Installationsprobleme KSG9|sebastian Server einrichten und konfigurieren 5 23.12.2004 13:10


Lesezeichen

Forumregeln
Es ist Ihnen erlaubt, neue Themen zu verfassen.
Es ist Ihnen erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are aus
Pingbacks are aus
Refbacks are aus


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:19 Uhr.


Powered by vBulletin® Version 3.8.6 (Deutsch)
Copyright ©2000 - 2013, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.3.2
Thanks for Smilies by smilies.4-user.de