# Update-Frage



## TMK (8. Aug 2007)

Hallo,

ich habe eine Tabelle mit folgender Struktur, auf die ich ein Update-Statement ausführen will (nur auf die Spalte geom):
_____________
| geom | plz1 |
------------------

Das ganze steuere ich mit JDBC. Ich habe einen Vector, der die neuen geom-Elemente in der richtigen Reihenfolge enthält, aber leider habe ich keine plz1-Elemente dazu. Somit kann ich keinen Update ala
Code:

Update table set geom = newgeom where plz1 = newPLZ1

machen.
Ich müsste das ganze über die Reihenfolge definieren. Also der Index vom Vector ist gleich der Zeile der Tabelle. Kann mir jemand sagen wie das Update-Statement dann aussehen muss?

Ciao,
TMK


----------



## tuxedo (8. Aug 2007)

Wie wär's mit erweitern der Tabelle um einen Index? Ist jetzt das einzigste das mit einfällt :-(


----------



## Guest (8. Aug 2007)

Kann ich leider nicht. Gibt es in JDBC vielleicht die Möglichkeit, beim Update die Zeilennummer mitzugeben?


----------



## yajp (8. Aug 2007)

nur zum Verständnis, Du hast den kompletten Inhalt der Table 1:1 im Vector oder nur eine Teilmenge davon ?


----------



## Guest (8. Aug 2007)

Alle geom-Elemente, aber sonst nichts


----------



## yajp (8. Aug 2007)

ungetestet:


```
package spielwiese;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Iterator;
import java.util.Vector;

/**
 *
 * @author 
 */
public class UpdateFrage {
    private ResultSet resultSet; // resultSet wurde über ein Statement a la ' SELECT geom FROM blubb' erzeugt <-- muss halt updatable sein 
    private Vector data;

   
    
    /** Creates a new instance of UpdateFrage */
    public UpdateFrage(ResultSet resultSet, Vector data) {
        this.resultSet = resultSet;
        this.data = data;
    }
    
    public void updateMyData() throws SQLException{
       Iterator iterator = data.iterator();
       while (iterator.hasNext()) {
           String  geom = (String) iterator.next(); //wollte jetzt keine Geomklasse anlegen :) 
           resultSet.next();
           resultSet.updateObject("geom",geom); //DB-Datentyp ???
           resultSet.updateRow();
           
       }
       
            
     }
    }
```


----------



## Guest (8. Aug 2007)

Danke so würde es funktionieren. Ich kann es aber so nicht einsetzen, da ich sehr viele Daten updaten muss und das nur im batch-Modus einigermaßen performant geht. Deswegen hab ich jetzt noch eine zusätzliche Spalte in die Tabelle aufgenommen, die ein eindeutiger Schlüssel ist.


----------



## tuxedo (8. Aug 2007)

Und zu mir noch sagen dass er die Tabelle nicht um ne Spalte erweitern kann... Ein klassisches Beispiel für: Die Wand war stärker als der Kopf


----------



## Guest (9. Aug 2007)

Prinzipiell wollte ich die Tabelle auch nicht erweitern, aber evtl. ist sie mit einer eindeutigen ID, die ich nur für interne Zwecke nutze, für zukünftige Änderungen oder Erweiterungen an der Anwendung flexibler. Aber ich bin trotzdem dankbar, dass ich auch in Punkto JDBC was dazugelernt habe!


----------



## abollm (9. Aug 2007)

Anonymous hat gesagt.:
			
		

> Prinzipiell wollte ich die Tabelle auch nicht erweitern, aber evtl. ist sie mit einer eindeutigen ID, die ich nur für interne Zwecke nutze, für zukünftige Änderungen oder Erweiterungen an der Anwendung flexibler. Aber ich bin trotzdem dankbar, dass ich auch in Punkto JDBC was dazugelernt habe!



Eine DB-Tabelle mit einer eindeutigen ID (Ganzzahl >0!) zu versehen ist so gut wie nie verkehrt.


----------



## tuxedo (9. Aug 2007)

abollm hat gesagt.:
			
		

> Eine DB-Tabelle mit einer eindeutigen ID (Ganzzahl >0!) zu versehen ist so gut wie nie verkehrt.



Das war auch mein Hintergrundgedanke ;-)


----------



## Daywalker2004 (10. Aug 2007)

Wenn es sich um eine Oracle Datenbank gehandelt hätte, würde du es glaub ich über die Rowid hinbekommen. 

http://www.oracle.com/technology/sample_code/tech/java/sqlj_jdbc/files/basic/RowidSample/Readme.html

Da ist zwar nur ein SELECT-Beispiel, aber das lässt sich vllt ja auf den Update-Befehl übertragen.

Aber du hast ja schon deine Lösung gefunden


----------

