@Dieter
Bei Java macht dir wohl keiner was vor.
Also ich muss dir recht geben.
Bei "CONCUR_UPDATABLE" generiert Java (bzw. der Treiber der AS/400):
UPDATE TestUpd SET "F2"=? WHERE CURRENT OF "CRSR0001"
Damit kann wenigstens Java mehr als alle anderen.

In ADODB (COM-Schnittstelle) funktioniert dies leider nicht, da tatsächlich ein SQL der Art
update MyFile set FX=NewVal where fx=fxOldval and fy=fyoldval ...

Dies liegt in der Tatsache begründet, dass ein ADODB.Recordset "offline" bearbeitet werden kann.
Und nur als "ClientCursor" besteht überhaupt nur ein Updatable Recordset.

In ADO.NET ist es noch ganz anders, da ADO.NET grundsätzlich als Offline-Version konzipiert ist:
Ein Reader kann nur lesen und diesen benötigt man zum Füllen einer DataTable bzw. eines DataSet's.
Per DataAdapter kann man sich dann die Insert/Update/Delete's genrieren lassen, die allerdings immer von den selektierten Feldern abhängen.
Einen "update ... current of ..." gibt es definitiv nicht, da nun mal ein Reader grundsätzlich nur vorwärts lesen kann, Methode Read.

Um also tatsächlich den richtigen Satz zu ändern kommt man um einen Unique-Key nicht herum.
Selbst Entity-Frameworks benötigen einen solchen Schlüssel, wobei die wenigsten mit einem "Compound-Key", also mehrere Schlüssel, zurecht kommen. Diese benötigen fast alle eine Identity-Spalte.