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

ebruss17

Bekanntes Mitglied
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:??

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

Kann mir jemand vielleicht ein konkretes Beispiel geben? nochmals vielen Dank 😉
 
Zuletzt bearbeitet:
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.
 
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:
Java:
String style = "";
if(datenbankspalte == 0) {
 style = "style=\"background:red;\";";
}

.....<tr style=\"" + style + "\">.....
 
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:

Java:
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:
PHP:
$res = // result-set von der datenbank;
$view = new View("irgendwas.uebersicht");
$view->set("results", $res);
PHP:
<!-- 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).
 
Zuletzt bearbeitet:
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.
 
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 🙂
 
Ich selektiere mehrere Spalten aus mehreren Tabellen und gebe diese als HTML-Tabelle aus.

Java:
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...
 
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 :/

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.
 
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.
 
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??

Java:
<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>
 
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.
 
In diesem Fall muss das tr-Tag eingefärbt werden, also d.h. hier rein??

Java:
<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>
 
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.
 
ich habe es so wie du es beschrieben hast, platziert, da werden zwar die Spaltenbeschriftungen ausgegeben, aber da stehen keine Werte mehr :bahnhof:

Java:
<%
							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) {

							}
						%>
 
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.
 
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!
 
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:

Java:
<%
							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 + "\">
 
Zuletzt bearbeitet:

Zurück
Oben