# Kann man in einer if-Bedingung auch SELECT-Statements überprüfen?



## ebruss17 (5. Jan 2015)

Hallo Community,

ich versuche gerade je nach einem bestimmten Wert einer Datenbankspalte eine if-Bedingung zu basteln. Wenn der Wert der jeweiligen Datenbankspalte = 0 ist, dann soll die entsprechende Zeile der Tabelle mittels CSS eine rote Hintergrundfarbe bekommen. Kann ich das so lösen:??


```
if(Datenbankspalte == 0)
{ Wie muss ich hier den jeweiligen CSS-Style implementieren?? }
```

Kann mir jemand vielleicht ein konkretes Beispiel geben? nochmals vielen Dank


----------



## Tassimmo (5. Jan 2015)

Wie greifst du denn auf die Datenbank zu? 
Sowohl mit PHP als auch mit Javascript müsstest du auf die HTML-Komponente (also dein <tr>) zugreifen können, um dieses entsprechend zu verändern. 
Ich hab zwar lange nichts mehr mit den beiden gemacht, versuch aber mal ein Beispiel zu finden.


----------



## Joose (5. Jan 2015)

Da du nur etwas von "if" und "CSS" redest wird es schwer dir ein konkretes Beispiel zugeben.
Vor allem da wir nicht wissen um welche Technik es sich bei deiner "GUI" handelt? 

Aber mit Pseudocode wäre es etwa so:

```
String style = "";
if(datenbankspalte == 0) {
 style = "style=\"background:red;\";";
}

.....<tr style=\"" + style + "\">.....
```


----------



## ebruss17 (5. Jan 2015)

Es handelt sich hierbei um "JSP" und auf die Datenbank greife ich mit "JDBC" zu.


----------



## Tobse (5. Jan 2015)

Nein, du kannst mit einer If-Abfrage kein SELECT Statement prüfen.

Du kannst aber mithilfe von JDBC einen Wert auslesen und diesen mit einem If prüfen. Das prüfen auf den Wert hat aber mit dem Select an sich nichts zu tun:


```
PreparedStatement stmt = driver.prepareStatement("SELECT foo FROM bar WHERE a = 'b'");
ResultSet res = stmt.executeQuery(); // oder so ähnlich müsste die Methode heissen
if (res.hasNext())
{
    res.next();
    if (res.getInt(0) == 0)
    {
        // rot
    }
}
else
{
    // kein Ergebnis / leeres Ergebnis
}
```

Aber vom Standpunkt des Web-Entwicklers: Vergiss das mit Java. JSP ist dafür Verantwortlich, dass die Daten rangescahfft werden aber nicht dafür, wie die UI Funktioniert. Sieh dir bitte ein Templating-System an an welches du die Datenbankdaten dann übergeben kannst. In PHP (PHP selbst ist eine Templating-Engine) wäre das sowas hier:

```
$res = // result-set von der datenbank;
$view = new View("irgendwas.uebersicht");
$view->set("results", $res);
```


```
<!-- in der view irgendwas.uebersicht -->
<table ...>
<?php while ($res->hasNext()) {
    $row = $res->next(); ?>
    <tr>
        <td><?=$res[0];?></td>
        ...
    </tr>
</table>
<?php } ?>
```

Dass die Zelle dann rot gefärbt wird, solltest du mit JavaScript (oder besser CSS3) lösen, ganz ohne den Server damit zu beschäftigen (denn die Rechenkraft des Browsers beim User ist umsonst, die Rechenkraft deines Servers nicht).


----------



## ebruss17 (7. Jan 2015)

Wie könnte ich denn, den entsprechenden Wert der Datenbankspalte "PASS" in einer if-Anweisung auslesen? Also wenn die Datenbankspalte "Pass" denn Wert 0 hat, soll die Tabellenzeile die Hintergrundfarbe rot haben und wenn es den Wert 1 hat, die Hintergrundfarbe grün.... Ich weiss halt nicht, wie ich das in einer if-Anweisung am besten einbauen könnte.


----------



## Joose (7. Jan 2015)

Wie liest du denn bisher deine Werte aus der Datenbank aus?
Hast du dir den Beitrag von Tobse durchgelesen? Dort steht doch eine passende Möglichkeit drinnen


----------



## ebruss17 (7. Jan 2015)

Ich selektiere mehrere Spalten aus mehreren Tabellen und gebe diese als HTML-Tabelle aus.


```
public Kunde() {

			try {
				Class.forName("com.ibm.db2.jcc.DB2Driver");

				connection = DriverManager.getConnection(url, user, password);

				selectKunden = connection
						.prepareStatement("SELECT RT.Logfile.l_ID, MGMT.Testcomponent.Name, MGMT.Testcases.Name, RT.Testdata.Summary, MGMT.Iteration.Name, MGMT.System.Name, MGMT.System.Version, RT.LOGFILE.FILE FROM MGMT.TESTCOMPONENT INNER JOIN MGMT.TESTCASES ON MGMT.Testcases.COMPONENT_ID = MGMT.Testcomponent.COMPONENT_ID INNER JOIN RT.Testdata ON MGMT.Testcases.TESTCASE_ID = RT.Testdata.TESTCASE_ID INNER JOIN RT.LOGFILE ON RT.Logfile.L_ID = RT.Testdata.LOGFILE_ID INNER JOIN RT.TESTRUNS ON RT.TESTRUNS.TESTRUN_ID = RT.Testdata.TESTRUN_ID INNER JOIN MGMT.System ON MGMT.System.SYSTEM_ID = RT.TESTRUNS.SYSTEM_ID INNER JOIN MGMT.Iteration ON MGMT.Iteration.I_ID = RT.TESTRUNS.I_ID");
			} catch (SQLException e) {
				e.printStackTrace();
			} catch (ClassNotFoundException x) {
				x.printStackTrace();
			}
		}

		public ResultSet getKunden(String suchWert, String suchWert2,
				String suchWert3, String suchWert4, String suchWert5,
				String suchWert6, String suchWert7) {

			try {

				if (suchWert == null) {
					suchWert = "";
				}
				if (suchWert2 == null) {
					suchWert2 = "";
				}
				if (suchWert3 == null) {
					suchWert3 = "";
				}
				if (suchWert4 == null) {
					suchWert4 = "";
				}
				if (suchWert5 == null) {
					suchWert5 = "";
				}
				if (suchWert6 == null) {
					suchWert6 = "";
				}
				if (suchWert7 == null) {
					suchWert7 = "";
				}

				selectKunden = connection
						.prepareStatement("SELECT RT.Logfile.l_ID, MGMT.Testcomponent.Name, MGMT.Testcases.Name, RT.Testdata.Summary, MGMT.Iteration.Name, MGMT.System.Name, MGMT.System.Version, RT.LOGFILE.FILE FROM MGMT.TESTCOMPONENT INNER JOIN MGMT.TESTCASES ON MGMT.Testcases.COMPONENT_ID = MGMT.Testcomponent.COMPONENT_ID INNER JOIN RT.Testdata ON MGMT.Testcases.TESTCASE_ID = RT.Testdata.TESTCASE_ID INNER JOIN RT.LOGFILE ON RT.Logfile.L_ID = RT.Testdata.LOGFILE_ID INNER JOIN RT.TESTRUNS ON RT.TESTRUNS.TESTRUN_ID = RT.Testdata.TESTRUN_ID INNER JOIN MGMT.System ON MGMT.System.SYSTEM_ID = RT.TESTRUNS.SYSTEM_ID INNER JOIN MGMT.Iteration ON MGMT.Iteration.I_ID = RT.TESTRUNS.I_ID INNER JOIN MGMT.ExecutionController ON MGMT.ExecutionController.e_ID = RT.Testruns.e_ID WHERE MGMT.Iteration.Name LIKE '%"
								+ suchWert
								+ "%' AND  MGMT.System.Name LIKE '%"
								+ suchWert2
								+ "%' AND MGMT.System.Version LIKE '%"
								+ suchWert3
								+ "%' AND MGMT.Testcases.Name LIKE '%"
								+ suchWert4
								+ "%' AND MGMT.Testcomponent.Name LIKE '%"
								+ suchWert5
								+ "%' AND MGMT.ExecutionController.Hostname LIKE '%"
								+ suchWert6
								+ "%' AND MGMT.ExecutionController.OS LIKE '%"
								+ suchWert7 + "%'");

				resultSet = selectKunden.executeQuery();

			} catch (SQLException e) {
				e.printStackTrace();
			}

			return resultSet;
		}

	}%>
	<%
		Kunde kunde = new Kunde();
		ResultSet kunden = kunde.getKunden(
				request.getParameter("TabellenFilter"),
				request.getParameter("TabellenFilter2"),
				request.getParameter("TabellenFilter3"),
				request.getParameter("TabellenFilter4"),
				request.getParameter("TabellenFilter5"),
				request.getParameter("TabellenFilter6"),
				request.getParameter("TabellenFilter7"));
		ResultSetMetaData rsmd = null;

		rsmd = kunden.getMetaData();

		int numberOfColumns = 0;
		numberOfColumns = rsmd.getColumnCount();
	
	%>

<table border="1">

						<tr>
							<%
								try {
									for (int i = 1; i <= numberOfColumns; i++) {
							%>
							<th><%=rsmd.getColumnLabel(i)%></th>
							<%
								}
							%>
						</tr>
						<%
							while (kunden.next()) {
						%>

						<tr>
							<%
								for (int i = 1; i <= numberOfColumns; i++) {

											if (i != numberOfColumns) {
							%>
							<td><%=kunden.getString(i)%></td>

							<%
								} else {
							%>
							<td><a href="XML.jsp?xml=<%=kunden.getString("l_ID")%>">D</a>
							</td>
						</tr>

						<%
							}
									}
								}
							} catch (SQLException e) {

							}
						%>
					</table>
```

ich weiss jetzt halt nur nicht, wenn ich den Beispiel von Tobse einbauen würde, ob es mir noch die richtigen Spalten selektiert oder nach dem neuen PreparedStatement die Spalten ausgibt.... Könnte ich nicht nur eine if-Anweisung für die Datenbankspalte "Pass" einbauen?? Aber weiss net so genau wiee...


----------



## Joose (7. Jan 2015)

ebruss17 hat gesagt.:


> Ich selektiere mehrere Spalten aus mehreren Tabellen und gebe diese als HTML-Tabelle aus.



Ist bei diesen selektierten Daten die Spalte "Pass" schon dabei? Bei deinem Beispiel gibt es keine Spalte die so heißt :/



ebruss17 hat gesagt.:


> ich weiss jetzt halt nur nicht, wenn ich den Beispiel von Tobse einbauen würde, ...... Aber weiss net so genau wiee...



Dort wo deine Ausgabe passiert musst du um das richtige HTML Tag eine if-Abfrage einbauen. Je nachergebnis gibst dem HTML Tag den richtigen CSS Style.


----------



## ebruss17 (7. Jan 2015)

Nein, bei diesen selektierten Spalten ist die Spalte "Pass" nicht dabei! Könntest du mir bitte einen Codebeispiel dafür geben??


----------



## Joose (7. Jan 2015)

Ein Codebeispiel für was?

Also entweder du erweiterst dein SELECT und sorgst dafür das die Spalte "Pass" ebenfalls selektiert wird oder du musst bei der for-Schleife welche dir die Zeilen der Tabelle erzeugt jeweils eine extra Abfrage machen für diese Spalte.


----------



## ebruss17 (7. Jan 2015)

wenn ich das ab der Zeile "String style =....."
so einbaue, wird die Tabelle mit den entsprechenden Spaltennamen angezeigt, jedoch sind die Werte nciht mehr zu sehen, also die Werte werden nicht mitangezeigt.. Habe ich den Code vielleicht falsch platziert??


```
<table border="1">

						<tr>
							<%
								try {
									for (int i = 1; i <= numberOfColumns; i++) {
							%>
							<th><%=rsmd.getColumnLabel(i)%></th>
							<%
								}
							%>
						</tr>
						<%
							while (kunden.next()) {
						%>

						<tr>
							<%
								for (int i = 1; i <= numberOfColumns; i++) {

											if (i != numberOfColumns) {
							%>
							<td><%=kunden.getString(i)%></td>

							<%
								} else {
							%>
							<td><a href="XML.jsp?xml=<%=kunden.getString("l_ID")%>">D</a>
							</td>
						</tr>

						<%
							}
											String style = "";
											if (kunden.getInt("RT.Testdata.Pass") == 0){
												style = "style=\"background:red;\";";
											}
									}
								}
							} catch (SQLException e) {

							}
						%>
						<tr style=\"" + style + "\">
					</table>
```


----------



## Joose (7. Jan 2015)

Ja der Code ist am falschen Platz.
Bitte überlege dir genau: Was willst du einfärben? Wohin muss also dieser Code?

Was willst du einfäbren: Jede Zeile bei der "Pass" einen bestimmten Wert hat.
Wohin muss also dieser Code: Dorthin wo deine Ausgabe der Zeilen passiert.


----------



## ebruss17 (7. Jan 2015)

In diesem Fall muss das tr-Tag eingefärbt werden, also d.h. hier rein??


```
<tr>
							<%
								for (int i = 1; i <= numberOfColumns; i++) {

											if (i != numberOfColumns) {
							%>
							<td><%=kunden.getString(i)%></td>
							
							<%
								} else {
							%>
							<td><a href="XML.jsp?xml=<%=kunden.getString("l_ID")%>">D</a>
							</td>
						</tr>
```


----------



## Joose (7. Jan 2015)

Schaut schon besser aus, probiere es doch einfach aus


----------



## ebruss17 (7. Jan 2015)

ich weiss echt nicht, wie ich die tr-Zeile mit der if-Bedingung am besten verknüpfen könnte


----------



## Joose (7. Jan 2015)

Du hast den Code dazu ja schon gehabt nur eben an der falschen Stelle.
Schau dir nochmal deinen Post #12 an.
Und anstatt das <tr> Element und das if nach der while-Schleife zu platzieren einfach in der while-Schleife fertig.


----------



## ebruss17 (7. Jan 2015)

ich habe es so wie du es beschrieben hast, platziert, da werden zwar die Spaltenbeschriftungen ausgegeben, aber da stehen keine Werte mehr :bahnhof:


```
<%
							while (kunden.next()) {
								
								String style = "";
								if (kunden.getInt("RT.Testdata.Pass") == 0){
								style = "style=\"background:red;\";";
								}
						%>

						<tr style=\"" + style + "\">
							<%
								for (int i = 1; i <= numberOfColumns; i++) {

											if (i != numberOfColumns) {
							%>
							<td><%=kunden.getString(i)%></td>

							<%
								} else {
							%>
							<td><a href="XML.jsp?xml=<%=kunden.getString("l_ID")%>">D</a>
							</td>
						</tr>

						<%
							}
									
									}
								}
							} catch (SQLException e) {

							}
						%>
```


----------



## Joose (7. Jan 2015)

Dann debugge deinen Code bzw. kontrolliere ob vielleicht eine Exception fliegt.

Es kommen von dir immer nur kleine Code Ausschnitte die völlig unformatiert und schwer zu lesen sind.
Deine Fragen bzw. Antworten lassen mich hier auf fehlen von Grundlagen schließen.
Damit machst du es uns nicht wirklich leicht dir zu helfen.


----------



## ebruss17 (7. Jan 2015)

Könntest du mir vielleicht kurz zeigen, an welcher Stelle du den entsprechenden Code einfügen würdest??? Dankee


----------



## Joose (7. Jan 2015)

Dort wo du ihn eingefügt hast sollte es schon passen.
Aufgrund mangelhafter Angaben und Codeausschnitte (nicht immer alles und/aber immer unformatiert -> schwer lesbar) kann ich dir nicht sagen wo der Fehler liegt.

Den Hinweise mit Debuggen bzw. auf eine Exception achten habe ich dir schon gegeben und den sollte man immer beachten!


----------



## ebruss17 (7. Jan 2015)

stimmen vielleicht die Hochkommas in der Variable style nicht??

style = "style=\"background:red;\";";

<tr style=\"" + style + "\">


----------



## ebruss17 (7. Jan 2015)

wenn ich das ganze so einfüge, wird dieses mal nur die einzelnen Spaltenwerte des ersten datensatzes ausgegeben: Die restlichen werden dabei garnicht berücksichtigt :bahnhof:


```
<%
							while (kunden.next()) {
						%>
						<tr>
							<%
								for (int i = 1; i <= numberOfColumns; i++) {

											if (i != numberOfColumns) {
							%>
							<td><%=kunden.getString(i)%></td>

							<%
								} else {
							%>
							<td><a href="XML.jsp?xml=<%=kunden.getString("l_ID")%>">D</a>
							</td>
						</tr>
						<%
							}
									}
									String style = "";
									if (kunden.getInt("RT.Testdata.Pass") == 0) {
										style = "style=\"background:red;\";";
									}
								}
							} catch (SQLException e) {

							}
						%>
						<tr style="""" + style + "\">
```


----------



## Joose (8. Jan 2015)

ebruss17 hat gesagt.:


> stimmen vielleicht die Hochkommas in der Variable style nicht??



Das sind wieder Grundlagen von HTML.
Und sowas googlet man schneller als das man auch eine Antwort wartet.


----------

