# Methode getColumnIndex(String columnName) ?



## TheSunToucher (23. Mai 2005)

Hi,

ich bin verzweifelt auf der Suche nach ein paar Methoden in ResultSetMetaData. Es gibt z.B. die Methode "getColumnName(int columnIndex)" nicht aber die Methode "getColumnIndex(String columnName)". Außerdem gibt's die Methode "getTableName(int columnIndex)" aber die Methode "getTableName(String columnName)" fehlt.

Ich kenne an einer bestimmten Stelle in meinem Programm nur den Name der Column und muss den TableName rausfinden. Da die oben aufgeführten Methoden fehlen müßte ich über die Columns iterieren und mir die Namen und Indexe merken, das ist allerdings äußerst schlecht für die Performance. 

API: java.sun.com/j2se/1.3/docs/api/java/sql/ResultSetMetaData.html

Hab ich was übersehen? Danke, gruß
TheSunToucher


----------



## Bleiglanz (24. Mai 2005)

ist doch unsinnig sowas zu erwarten

ein Resultset muss sich ja nicht unbedingt auf eine Tabelle beziehen (Joins oder SELECT 2+2...)

sowas machst du über DataBaseMetaData, da gibts getTables, getColumns schau mal in die API

heisst das eigentlich, dass alle Spaltennamen (!) über alle Tabellen bei dir eindeutig sind?


----------



## TheSunToucher (24. Mai 2005)

Bleiglanz hat gesagt.:
			
		

> ist doch unsinnig sowas zu erwarten
> ein Resultset muss sich ja nicht unbedingt auf eine Tabelle beziehen (Joins oder SELECT 2+2...)



keineswegs, vieleicht hab ich mich auch unverständlich ausgedrückt. Wieso ist denn deiner Meinung nach die Methode "getColumnName(int columnIndex)" sinnvoll, die es ja gibt, die Methode "getColumnIndex(String columnName)" die ich vermisse und die eigentlich das gleiche genau anderesrum machen soll unsinnig?



			
				Bleiglanz hat gesagt.:
			
		

> sowas machst du über DataBaseMetaData, da gibts getTables, getColumns schau mal in die API
> 
> heisst das eigentlich, dass alle Spaltennamen (!) über alle Tabellen bei dir eindeutig sind?



Gerade wenn meine Spaltennamen nicht eindeutig sind (und das sind sie natürlich nicht) muss ich über die ResultSetMetaData gehen. Wie soll ich denn nur anhand des Spaltennamen die richtige Spalte über die DatabaseMetaData finden? Das ResultSet bzw. dessen Metadaten müssen mir doch auch bei Joins sagen können aus welcher Tabelle eine bestimme Spalte kommt. Wie im ersten Posting gesagt, die Methode "getTableName(int columnIndex)" gibt es ja in der JDBC Spezifikation, ist die deiner Meinung nach sinnlos?

Wenn es sich nciht um eine Tabelle sondern einen View handelt, dann möchte ich gern den Namen des Views zurückbekommen.

Zum Hintergrund:
Nur damit ihr/du verstehst wo mein Problem liegt. Ich habe einen Layer zwischen der Applikation und dem JDBC erstellt, dies hat andere Gründe die den Rahmen sprengen würden. Ich habe eine Klasse, nennen wir sie einfach mal "MyResultSet". Diese erfüllt das "java.sql.ResultSet"-Interface und kapselt das eigentliche ResultSet des JDBC-Treibers. Ich habe wie gesagt alle Methoden des Interfaces implementiert, wobei die meisten die Anfrage einfach an das orginal ResultSet durchreichen.

Ich möchten in den beiden Methoden "getString(String)" und "getString(int)" nun eine gewisse Methode aufrufen vorrausgesetzt das des Spalte X aus Tabelle Y ist. Deshalb brauche ich die Methoden die ich im ersten Posting beschrieben habe.

Schmatisch sieht das so aus:

```
public class MyResultSet implements ResultSet {

  private ResultSet rs;
  
  public MyResultSet(Resultset rs) {
    this.rs = rs;
  }

  public String getString(String column){
    return rs.getString(column);
  }

  // weitere Methoden des Interfaces

}
```

Ich hoffe das hat dich/euch das Problem ein wenig klarer gemacht, es wundert mich wirklich das die Methoden nicht drin sind und ich glaube du wirst mir zustimmen das die doch sinnvoll sind.

Danke das du diesen vielzulangen Post gelesen hast ;-]
Danke für jede Hilfe, gruß
Tim


----------



## Bleiglanz (25. Mai 2005)

sorry, hab das wohl nicht ganz verstanden

zum ersten Problem: warum die Methode fehlt sei dahin gestellt

du kannst ja mit

```
//getColumnCount()
//getColumnName(int column)
for(int i=1;i<=rs.getColumnCount();i++){
    mymap.put(rs.getColumnName(i),Integer.valueOf(i));
}

// dann getTable(mymap.get(colname).intValue) versuchen
```

ganz einfach eine Map erzeugen, die dir auch die "umgekehrte Zuordnung ermöglicht", allerdings gibt es datenbanken, die


```
SELECT 1 AS 'foo', 2 AS 'foo' -- ggf. noch ein FROM DUAL
```

verstehen....also Vorsicht


----------



## TheSunToucher (25. Mai 2005)

Jo, die Möglichkeit hatte ich natürlich in betracht gezogen, deshalb hab ich im ersten Posting auch folgendes geschrieben:


> Da die oben aufgeführten Methoden fehlen müßte ich über die Columns iterieren und mir die Namen und Indexe merken



Trotzdem verstehe ich nciht warum die Methoden fehlen, denn ich würde tippen, das die meisten Implementationen von JDBC sowieso eine map mit diesen Informationen halten...

Wo wäre eine gute 'offizelle' Stelle einen Feature-Requst zu stellen? Auf java.net in einem bestimmten Forum?!?


----------



## Bleiglanz (26. Mai 2005)

versuchs mal bei 

http://forum.java.sun.com/forum.jspa?forumID=48


----------



## TheSunToucher (30. Mai 2005)

Bleiglanz hat gesagt.:
			
		

> versuchs mal bei
> 
> http://forum.java.sun.com/forum.jspa?forumID=48



Danke, hab mal einen Thread eröffnet: forum.java.sun.com/thread.jspa?threadID=630514


----------

