Announcement

Collapse
No announcement yet.

DB Update via batch

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • 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:
    Code:
    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...

  • #2
    Ich hab nicht genug Ahnung von Java, aber kann nichts schlimmes sehen. Die Arg List Auswertung und das verbundene, bedingte addbatch plus Parameterübergabe kommen mir zwar undurchsichtig vor, aber ich hab ja auch keine Ahnung. Der Oracle Teil sieht jedenfalls nicht falsch aus.
    40-50 Updates finde ich nebenbei gesagt nicht groß.

    Spannende Frage, was sagt denn die Console? Ein Fehler scheint ja nicht aufzutreten. Besteht der Batch vielleicht nur aus einem Eintrag?
    Gruß, defo

    Comment


    • #3
      ArrayList<ArrayList<String>> liste = new ArrayList<ArrayList<String>>();
      liste = get_psid_from_pinid(db, pgid, pinid);

      wird zu

      ArrayList<ArrayList<String>> liste = get_psid_from_pinid(db, pgid, pinid);

      Hauptproblem dürfte wohl sein, dass in der Schleife bei jedem Durchlauf eine neues
      pstmt = con.prepareStatement("UPDATE processstep SET status = 9 where psid = ?");
      angelegt wird. Mit dem passiert nix, bis die Schleife verlassen wird. Erst dann wird es ausgeführt. Das Letzte....
      Christian

      Comment

      Working...
      X