ZinsÄnderungsRisiko mit Java

thoser

Mitglied
Ich soll die Formel für ZÄR in Java programmieren.
In der Beschreibung steht:

die Summe über alle Einträge der Spalte "SHIFT_STD_GB" wo das Feld "WWKTO" nicht leer und in WP_POSITIONEN ist "WWKZH" ist 0 oder 1 minus der Summe über alle Einträge der Spalte "BARWERT_AKT" in "STAT_BARWERTSIMULATION" wo das Feld "WWKTO" nicht leer ist und in "WP_POSITION" ist "WWKZH" '0' oder '1'.

Ich habe bisher folgendes
Java:
   public MahViewReply fillS_ZAER_BB(MahViewReply reply) throws SQLException
    {
        StringBuffer queryBarwertAkt = new StringBuffer("SELECT SUM (barwert_akt) FROM rm.STAT_BARWERTSIMULATION s, rm.RISKDATEN r, rm.WP_POSITION w  WHERE s.MANDANT_ID = ");
        PreparedStatement ps = null;
        ResultSetMetaData rsmt = null;
        Statement stmt = DBUtil.createStatement(conn);
        BigDecimal wwkzh = new BigDecimal(0);
        int werte[] = new int[8];
        BigDecimal erg = new BigDecimal(0);
        BigDecimal barwert = new BigDecimal(0);
        BigDecimal tmp = new BigDecimal(0);
        String wwkto = null;
        // SZAERBB
        String queryS51 = new String("SELECT wwkto, "+ shiftStdGb +" FROM rm.STAT_BARWERTSIMULATION s, rm.RISKDATEN r WHERE s.wwkto ");
        
        try
        {
	        ps = DBUtil.prepareStatement(conn,queryS51 + " <> '' AND s.mandant_id = " +  mandant + " AND s.stichtag = '" + stichtag + "' AND r.inaktiv = 0 AND s.stichtag = r.stichtag AND s.mandant_id = r.mandant_id AND r.risiko_art = 'WP' GROUP BY s.wwkto, " + shiftStdGb);
      

	        
	        rs = DBUtil.executeQuery(ps);
	        while (rs.next())
	        {
	            wwkto = rs.getString(1);
	            // alle Ergebnisse auslesen
	            for (int vw = 2 ; vw <= rsmt.getColumnCount(); vw++)
	            {
	                tmp = tmp.add(rs.getBigDecimal(vw));
	                
	                
	            }
	        
	        }
	        erg = erg.add(tmp);
	        
		    // nun Barwert abfragen
	        queryBarwertAkt.append(mandant + " AND s.STICHTAG = '" + stichtag + "' ");
	        queryBarwertAkt.append(" AND r.INAKTIV = 0 ");
	        queryBarwertAkt.append(" AND r.MANDANT_ID = s.MANDANT_ID ");
	        queryBarwertAkt.append(" AND r.STICHTAG = s.STICHTAG ");
	        queryBarwertAkt.append(" AND r.RISIKO_ART = 'WP' ");
	        queryBarwertAkt.append(" AND w.WWKZH IN ('0', '1') ");
	        queryBarwertAkt.append(" AND s.MANDANT_ID = w.MANDANT_ID ");
	        queryBarwertAkt.append(" AND s.STICHTAG = w.STICHTAG ");
	        
	        ps = DBUtil.prepareStatement(conn, queryBarwertAkt.toString());
	        

			rs = DBUtil.executeQuery(ps);
			if (!rs.next())
			{
			    wwkzh = new BigDecimal(9);
			}
			else
			{
			    barwert = rs.getBigDecimal(1);
			
			    // jetzt geht alles in die DB
		        erg = erg.subtract(barwert);
		        ausgabeSZaerBB.append(" S_ZAER_BB= " + erg);
		        ausgabeSZaerBB.append(" WHERE mandant_id = " + mandant);
		        ausgabeSZaerBB.append(" AND stichtag = '" + stichtag + "'");
		        LOG.finer("AusgabeSZaerBB= " + ausgabeSZaerBB.toString());	 
		        flag = stmt.execute(ausgabeSZaerBB.toString());
	        
			}    
        }
        catch (SQLException e2)
	    {
	          e2.printStackTrace();
	          LOG.fine("SQLException132 aufgetreten! " + e2);
	          throw e2;
	    }
        finally
        {
            DBUtil.safeClose(rs);
            DBUtil.safeClose(ps);
            DBUtil.safeClose(stmt);
        }
        if (wwkzh.intValue() < 9)
        {
            this.fillBonRiskStd(wwkto, reply);
        }
        return reply;
     }

Das Ergebnis ist kompletter Unsinn, allerdings finde ich nicht heraus wo der Fehler ist.
Falls es wichtig ist, die Datenbank ist eine DB2.
 
Hallo,

bau doch mal ein kleines Beispiel für die Berechnung anhand von Daten aus einem double[] das kann dann jeder auch nachvollziehen und direkt ausprobieren.

Weiterhin solltest du genauer beschreiben, was schief geht.

Gruß Tom
 
Mit schief gehen, meinte ich, es kommt ein Ergebnis mit 12-Stellen vor dem Komma raus.
Mittlerweile bin ich sicher, das es ein reines SQL-Problem ist, darum schreibe ich es mal dort rein.
 
Zurück