JDBC/DB2 - Transaktion

AvS

Erfahrenes Mitglied
Hi,

mein Problem ist, dass ich mit folgendem Code komischerweise nicht mehr als 1338 Datensätze einfügen kann. An der DB2-Datenbank liegt es nicht, dass kann ich definitiv ausschließen. Hoffe ihr könnt mir weiterhelfen !

Java:
import java.io.*;
import java.sql.*;
import java.util.*;

public class transactions2 
{

	public static void transaction(int accid, int branchid, int tellerid, int delta, Connection conn) throws SQLException 
	{
		try
		{
		
		int acc_balance;	
		Statement accounts_balance = conn.createStatement();
		ResultSet rs = accounts_balance.executeQuery("SELECT balance FROM accounts WHERE accid = " + accid + "");
		rs.next();
		acc_balance  = rs.getInt("balance") + delta;

			
		String accounts = "UPDATE accounts SET balance = " + acc_balance + " WHERE accid = " + accid + "";
		Statement acc = conn.createStatement();
		acc.execute(accounts);
		
		String branches = "UPDATE branches SET balance = balance + " + delta + " WHERE branchid = " + branchid + "";
		Statement bra = conn.createStatement();
		bra.execute(branches);
	
		
		String tellers = "UPDATE tellers SET balance = balance + " + delta + " WHERE tellerid = " + tellerid + "";
		Statement tel = conn.createStatement();
		tel.execute(tellers);
	
		
		String history = "INSERT INTO history VALUES(" + accid + ", " + tellerid + "," + delta + ", " + branchid + ", " + acc_balance + " , 'test' )";
		Statement his = conn.createStatement();
		his.execute(history);
		
		conn.commit();
		}
		catch(SQLException e)
		{
			e.getCause();
		}

	}
	
	public static void main(String[] args) throws SQLException
	{
		try
		{
	
		String dburl = "jdbc:db2://localhost:50000/DB";
	    Connection conn = DriverManager.getConnection(dburl, args[0], args[1]);
	    conn.setAutoCommit(false);
	    
	    Random rand = new Random();
	    for(int i = 0; i<1400; i++){
	    int accid = rand.nextInt(1000000) + 1;
	    int branchid = rand.nextInt(10) + 1;
	    int tellerid = rand.nextInt(100) + 1;
	    int delta = rand.nextInt(100);
	    transactions2.transaction(accid, branchid, tellerid, delta, conn);
	    }
		}	
		catch(SQLException e)
		{
			e.getCause();
		}

	}

}
 
Hi

Ggf können wir dir helfen. Wie stellst du fest, das "nur" 1338 Datensätze eingefügt werden können. Kommt eine Exception? ...
Und wie mir scheint kannst du doch nicht ausschließen, dass es an DB2 liegt, du stellst die Frage ja im DB-Forum ;)
 
Hi,

ich stelle fest, dass nur 1338 Einträge gemacht wurden, indem ich direkt über den Befehlseditor in DB2 die "SELECT * FROM history" absetze. Dort werden mir eben nur 1338 Datensätze angezeigt.
Ich habe um DB2 als Fehlerquelle auszuschließen einfach mal alles ausser die INSERT-Anweisung auskommentiert. Dann werden auch mehr als 1338 Datensätze eingefügt. Langsam bekomme ich das Gefühl, dass es an dem ResultSet liegt.
 
Hallo,

ich konnte das Problem auf eigene Faust lösen. Ich habe anstatt mehrerer Statements wie im obigen Code einfach nur ein Statement genommen und jeweils mit verschiedenen Strings gefüllt.
Dadurch kann ich nun auch mehr als 1338 Datensätze einfügen.
 
Zurück