# Zugriff auf ein bestimmte Row



## Flexer (31. Jul 2015)

Hallo liebe Leute ich bräuchte mal eure kurze Hife. Ich möchte auf einen bestimmten Datensatz in einer Tabell zugreifen, der sich in einer bestimmten Zeile befindet. BSp
 Column:     A               B             C
                  Alpha         Beta       Omega
                  Haus          Bad        Küche

Ich möchte nur bspw. nur auf "Haus" zugreifen, er gibt mir aber immer alle Zeilen aus. Und den Wert irgendwo vergleichen und zuordnen .....
Variante 1
	
	
	
	





```
ResultSet resultsP = statementP.executeQuery("select * from " + provider);
ResultSetMetaData rsmdP = resultsP.getMetaData();
int numberCols = rsmdP.getColumnCount();

while (resultsP.next()) {   
         int i = 1;
         while(i <= numberCols) {
           arrayList.add(resultsP.getString(i++));
         }
         System.out.println("erster eintrag "+resultsP.getString(3));
         System.out.println("zweiter eintrag "+resultsP.getString(2));
         System.out.println(resultsP.getString(3));   
        System.out.println(resultsP.getString(4));
       }
     }
```

Variante 2 
	
	
	
	





```
for (int i = 1; i <= subscribers; i++) {
         list.add(i+"");
         System.out.println(list.toString()+"hier drin stehen die subscriber");     
         if(i==2 && resultsP.next()){
           boolean str = resultsP.getString(1).equals("Haus");
           String restname = String.valueOf(str);
           list.add(new AccessoryParameter("Provider", restname, "String"));
           System.out.println(i+" Alfred  "+ restname+ list.toString());
         }
       }
```

Danke für eure Hilfe


----------



## BRoll (31. Jul 2015)

Wie wärs dann du machst das einfach?

select * from provider where A like "Haus"


----------



## Flexer (31. Jul 2015)

danke für Deine Hilfe,
wollte ich erstmal nicht machen, weil es mehrere Datentypen in rows gibt und ich müsste demnach immer ein neues ResultSet aufmachen.
gibt es da nicht eine Lösung zb mit Iterator oder so ähnlich ?
Grüssle


----------



## BRoll (31. Jul 2015)

Was wieso das denn.
Dem ResultSet ist egal was drin ist.
Wenn deine Spalten so aussehen:  Id: int, Name: text, Irgenwas: float
kannst du auf des ResultSet dann einfach:
int id=resultSet.getInt(1);
String name=resultSet.getString(2);
float irgendwas=resultSet.getFloat(3);

Wo ist da ein Problem und was willst du mit einem Iterator hier ?


----------



## Flexer (31. Jul 2015)

, Stimmt, ja klar hast vollkommen recht.

Intressant wäre für mich dennoch zu erfahren ob es gelingen kann anhand bsp. geschachteleter for schleife durch eine db tabelle zu navigieren, ist das möglich oder geht das garnicht, ist die obige lösung die einzige lösung?

lg


----------



## Thallius (31. Jul 2015)

Du hast das Prinzip einer Datenbank nicht verstanden. Im optimalfall sollte man niemals durch die Ergebnisse einer DB Frage iterieren müssen. Egal ob Spalten oder Zeilenweise. Im Gegenteil, man sollte den Query so optimal lösen, dass man ausschließlich die benötigten Informationen zurück bekommt.

Gruß

Claus


----------



## Flexer (31. Jul 2015)

Hallo doch doch, habe ich verstanden .  Problem ist bloß ich muss mich nach einer Vorgabe richten, die nicht auf meinen mist gewachsen ist. daher ist es gut plausible gründe zu haben diese zu wiederlegen. es kann nämlich sein das ein design fehler in der datenbank ist und dieser gelöst werden muss. auf jedenfall habe ich wenn es der fall sein sollte ein gutes argument. 

Ich rück mal raus mit der sprache, ich stehe vor einem problem in der mehrere einträge vorhanden sind die die gleiche id besitzen: anhand der query ist das where schon vergeben und da komm ich nicht weiter :-(.

table: provider
column: tescaseID  Provider
              407              alice
              407              botox
              407              testesteron


```
try {
            int i, subscribers = 0;
            ResultSet resultSetS = null;
            ResultSet resultSetP = null;
            mutex.acquire();
            statementS = DbUtilities.getConnection().createStatement();
            statementP = DbUtilities.getConnection().createStatement();
            String queryS = "SELECT subscribers FROM ST_TestcaseSubscribers"
                    + " WHERE tcId = " + testcaseId;
            String queryP = "SELECT provider FROM ST_xTestcaseProviders"
                    + " WHERE tcId = " + testcaseId;
           
            resultSetS = statementS.executeQuery(queryS);
            resultSetP = statementS.executeQuery(queryP);

            // Hole Anzahl der Teilnehmer und schreibe in Variable
            if (resultSetS.next()) {
                subscribers = Integer.parseInt(resultSetS.getString("subscribers"));
            }
            for (i = 1; i <= subscribers; i++) {
                if(i==1 && resultSetP.next())
                    // steht erster eintrag von provider drin
                    String restname = resultSetP.getString(1);
                   list.add("" + i + restname);
                if(i==2 && resultSetP.next()){
                    Wie komme ich jetzt an den 2 eintrag in der id 407 ran (botox) und weise es einem subscriber zu?
                    String restname = resultSetP.getString(1);
                       list.add("" + i + restname);
                }
            }
[CODE]

danke für eure hilfe lg
```


----------



## Thallius (31. Jul 2015)

Sorry verstehe nicht was du machen willst. Du erzählst was von table Provider machst aber nur queries auf ganz andere Tabllen. Und dann iterierst du durch das Ergebnis des Query aus der einen Tabelle und willst da was aus der Tabelle Provider heraus holen?

Das ganze ist extrem konfus

Gruß

Claus


----------



## Flexer (1. Aug 2015)

Servus Claus, ich versuche Dir zu erklären was ich machen möchte.

wie Du sehen kannst greife ich auf 2 tabellen in einer db zu. 1 tabelle == Subscriber (liefert einen int wert zurück, bsp insgesamt 3 teilnehmer) ,2 tabelle == Provider beinhaltet die id 3x 407, mit den werten alice botox, testosteron siehe oben habe ich sie abgebildet.

ich möchte für jeweils für einen teilnehmer einen string in der tabelle provider zuordnen.

deswegen gehe ich mit der for schleife die telnehmer durch und möchte bsp teilnehmer 1 == alice , teilnehmer 2 ===botox , 3 == teststeron usw..

das problem liegt in der query weil ich das where schon vergebe an die "testcase id" und ich weiß resultset.next(). liefert mir immer denn ersten wert in der column, ich brauche aber alle, und da hakst bei mir.

ich hoffe ich konnte es einigermassen verständlich formulieren. vielleicht hast du eine idee was man da machen kann lg


----------



## Thallius (1. Aug 2015)

Nein ich verstehe es überhaupt nicht 

Zunächst mal es gibt nicht das EINE where was vergeben sein kann. Wenn ich mehrere Kriterien habe nach denen ich selectiern will, dann benutze ich AND und/oder OR.

Eine Tabelle liefert sicher niemals  einen INT Wert zurück, wenn das drei Teilnehmer sein sollen. Allerhöchstens ein Array von drei Ints mit den ID's der Teilnemher?

Wenn nun dein Query 

"SELECT subscribers FROM ST_TestcaseSubscribers"  + " WHERE tcId = " + testcaseId;

drei Teilnemher zurück liefert woher weißt du dann welcher der drei Teilnehmer zu welchem provider gehört? Du kennst ja die Reihenfolge gar nicht in der die subscribers im Resultset stehen, da du kein ORDER BY angegeben hast. Woher weißt Du, dass das genau drei sind und woher weißt du das es zu den drei Subscribern auch genau 3 Provider in der anderen Tabelle gibt?

Fragen üder Fragen

Gruß

Claus


----------



## Flexer (1. Aug 2015)

die teilnehmer sind doch erstmal wurscht, die liege ich fest. ich beginne bei 0 an zu zählen und höre bei 3 . so das ich insgesamt 3 teilnehmer habe. und letzendlich wird doch ein int wert zurückgelifert, auch wenn die datenstruktur ein array(reihung) ist .

ich gebe jetzt mal die beiden tabellen mit colums vielleicht wird es dann klarer.
tabelle subscriber:

testcaseID  subscriber
 407 (int)  3 (int)

tabelle : provider

testcaseID   provider
   407             alice
   407             botox
   407             testosteron

jetzt müsste eigentlich klar sein was ich machen möchte oder
lg bis denne


----------



## Thallius (1. Aug 2015)

Das ist doch redundant. Die Anzahl der provider ergibt sich doch aus der Anzahl der Rows in der zweiten Tabelle mit der ID 407. Also speichert man die nicht noch einmal in einer anderen Tabelle.


----------



## Flexer (1. Aug 2015)

Claus ich weiß selber das das nicht die beste art ist um datenzuspeichern, aber wie gesagt das ist vorgabe ich muss mich danach richten. für mich ist erstmal wichtig eine lösung bzw herauszufinden ob es eine lösung gibt. wenn es in diesem fall keine lösung dafür gibt brauch ich gute argumente das zu belegen. die db die dahinter steckt ist murcks, ist halt so ich kann da erstmal nix ändern.
lg und schönes wochenende


----------



## Flexer (4. Aug 2015)

habe die lösung für mein problem gefunden.

```
while (resultSet2.next()) {
         if(resultSet2.getString("Provider").equals("botox")){
         list.add(new AccessoryParameter("Provider", resultSet2.getString("Provider"), "String"));
         System.out.println(list.toString());
         }
       }
```

Danke für eure Hilfe.
pls close.
Grüssle


----------

