# sql query, um bestimten datensatz zu finden



## sinclair (28. Nov 2014)

Hallo leute

Ich muss in der firma ein tool programmieren, welches meinem ausbildner die absenzen immer  ende des monats schickt.
Ich habe mir folgendes èberlegt:
Ende des monats, öffne ich das tool, gebe den monat an, dann werden die daten aufgearbeitet und per mail verschickt.
Den mailversand habe ich programmiert, ich bleibe allerdings bei der query stecken.
Folgend die tabelle:
day_id INTEGER NOT NULL AUTO_INCREMENT,
working_day DATE NOT NULL,
person_NO INTEGER NOT NULL,
project_NO INTEGER NOT NULL,
ist_time DECIMAL NOT NULL,
activity_NO INTEGER NOT NULL,
PRIMARY KEY (day_id)

Für uns ist die person_NO, project_NO, sowie activity_No von bedeutung.
Folgend die methode, die noch nichts gescheites bezüglich der abfrage macht:

```
public class Queries
{

private ResultSet resultSet;

public boolean getAbsenzen(Integer monat)
	{
		Connection conn = MySQLConnection.getInstance();
		if (conn != null)
		{
			try
			{
				String sql = "SELECT *FROM az_item";
				PreparedStatement prStatement = conn.prepareStatement(sql);
prStatement.setInt(1, monat);
				resultSet = prStatement.executeQuery(sql);
				return true;

			}

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

		}
		return false;
	}

public ResultSet getResultSet()
	{
		return resultSet;
	}
 
}
```
Nun gut, die idee ist, ich übergebe einen paramether für jan z.b 1, dann hole ich alle datensätze vom monat januar aus, die folgende bedingungen erfüllen:
Entweder krankheit oder arztbesuch. Beide haben eine festgelegte id.
Von der tatsache abgesehen, dass ich wenig bis nie mit  sql zu tun hatte und das erst nächstes jahr  kommt, habe ich überhaupt keinen plan, wie ich die abfrage machen soll?
Danke für eure rasche antwort^^


----------



## Joose (28. Nov 2014)

Grob gesagt:
SELECT * FROM [Tablename] WHERE [Spaltename] = [WERT];

Schaue dir einfach mal die Grundlagen zu SQL an und versuche es selbst um zusetzen.
Den Teil der WHERE Clause kann man mit mehreren Bedingungen beliebig ausbauen und diese Bedingungen mit (), AND und OR verknüpfen.

Um dir das Statement zusammenzubauen solltest du PreparedStatements verwenden und nicht versuchen String zu verketten (Ursache für SQL Injection)


----------



## sinclair (28. Nov 2014)

halloo
wie meinst du, ich sollte mir keine strings zusammenbasteln?^^
und wie sollte ich das mit dem Monat machen? es gibt doch sicher eine Funktion in SQL, oder?


----------



## Joose (28. Nov 2014)

sinclair hat gesagt.:


> wie meinst du, ich sollte mir keine strings zusammenbasteln?^^



Viele schreiben dann Code wie in diesem Beispiel:

```
String sql = "SELECT *FROM Users WHERE U_ID  = " + id;
    PreparedStatement prStatement = conn.prepareStatement(sql);
    resultSet = prStatement.executeQuery(sql);
```

Dadurch sind SQL Injections (Begriff bitte selber nachschlagen) möglich, daher sollte der Code wie folgt ausschauen:


```
String sql = "SELECT *FROM Users WHERE U_ID  = ?";
    PreparedStatement prStatement = conn.prepareStatement(sql);
    prStatement.setInt(1, id); // die variable id ist ein parameter der methode die diesen code ausführt 
    resultSet = prStatement.executeQuery(sql);
```



sinclair hat gesagt.:


> und wie sollte ich das mit dem Monat machen? es gibt doch sicher eine Funktion in SQL, oder?



Das hängt teilweise von der Datenbank ab die du verwendest.
Jede Datenbank versteht zwar SQL doch gibt es teilweise Unterschiede in der Syntax bzw. bei "Build-In" Methoden.
Also je nachdem welche Datenbank du verwendest schaue einfach mal nach welche SQL Methoden angeboten werden für den Datentyp DATE.


----------



## sinclair (28. Nov 2014)

hallo
also, ich habe was zusammengestellt, schau mal..^^
String sql = "SELECT person_NO, activity_NO FROM az_item WHERE person_NO =222 AND activity_NO =14821 OR activity_NO =14823";
			meine Gedanken:
hole die Person mit der id 222, dann hole mir die datensätze der  Person, welche   die activity_No =14821  oder  14823 hat.
das mit dem Datum lass ich jetzt mal, schau ich mir später an, wenn das mal sitzt^^..
danke


----------



## Joose (28. Nov 2014)

Am besten wäre es diese Statement einfach auszuführen und zu kontrollieren ob das Ergebnis stimmt!

Kleiner Hinweis: Dein Statement sagt folgendes aus:
Selektiere die person_NO und activity_NO aus der Tabelle az_Item, wo die person_NO "222" ist und die activitiy_NO "14821" ist, oder wo die activity_NO "14823" ist.

Klammersetzung ist in SQL ebenfalls wichtig!


----------



## sinclair (28. Nov 2014)

hallo
und jetzt?
String sql = "SELECT person_NO, activity_NO FROM az_item WHERE person_NO =222  (activity_NO =14821 OR activity_NO =14823)";
das will aber leider trotzdem nicht funktionieren..
weisst du an was das liegt?


----------



## Joose (28. Nov 2014)

sinclair hat gesagt.:


> das will aber leider trotzdem nicht funktionieren..



"will nicht funktionieren" ist keine Fehlerbeschreibung.
Normalerweise fliegen Exceptions mit Fehlermeldungen diese solltest du mitposten.



sinclair hat gesagt.:


> String sql = "SELECT person_NO, activity_NO FROM az_item WHERE person_NO =222  (activity_NO =14821 OR activity_NO =14823)";



Diese Statement ist falsch was die Syntax angeht. Wo ist das "AND" hinverschwunden in der WHERE Bedingung?


----------



## sinclair (28. Nov 2014)

sorry, hat sich selbstständig gemacht, folgend mit Änderungen und Datum:
String sql = "SELECT person_NO, activity_NO FROM az_item WHERE person_NO =222 and (activity_NO =14821 OR activity_NO =14823) and  YEAR (NOW) and MONTH (?)";
exception:
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '?)' at line 1
das meine Syntax für die katz ist, ist mir schon klar, dank dieser exception, aber was stimmt nicht genau?


----------



## Joose (28. Nov 2014)

"?" ist nur ein Platzhalter im Statement, diesen musst du natürlich noch mit einen Wert ersetzen.

Hierzu nochmal das Beispiel von oben:

```
String sql = "SELECT * FROM Users WHERE U_ID = ?"; // Definieren des Statements mit Platzhalter
PreparedStatement prStatement = conn.prepareStatement(sql); // Statement preparen
prStatement.setInt(1, id); // mit dem Aufruf dieser "set"-Methode wird der 1.Parameter als INT Wert gesetzt -> sprich das Fragezeichen wird mit einem Wert ersetzt
resultSet = prStatement.executeQuery(sql); // statement ausführen
```


----------



## sinclair (28. Nov 2014)

hallo
ja, das habe ich schon so gemacht, sorry, habe nicht den ganzen code gepostet, dachte es liegt sicher an der query..

```
private boolean getAbsenzen(Integer monat)
	{
		Connection conn = MySQLConnection.getInstance();
		if (conn != null)
		{
			try
			{
				String sql = "SELECT person_NO, activity_NO FROM az_item WHERE person_NO =222 and (activity_NO =14821 OR activity_NO =14823) and  YEAR (NOW) and MONTH (?)";
				PreparedStatement prStatement = conn.prepareStatement(sql);
				prStatement.setInt(1, monat);

				resultSet = prStatement.executeQuery(sql);

				return true;

			}//catchklausel wurde weggelassen
```


----------



## Joose (28. Nov 2014)

SQL Befehle werden normalerweise mit ";" beendet möglicherweise stört in das fehlende ";".


----------



## sinclair (28. Nov 2014)

sag mal, könnte es auch an dem liegen:
die YEAR und MONTH Funktion, die habe ich nich in meiner Tabelle, habe nur den typ DATE..


----------



## Joose (1. Dez 2014)

Hole dir am besten einen SQL Browser in diesem kann man leicht Statements testen.
Was mir aufgefallen ist bei NOW fehlen die "()".


----------



## sinclair (1. Dez 2014)

hallo

ich habe das jetzt andrs gemacht, jetzt übergebe ich zwei strings, startdatum und Enddatum.

```
String sql = "SELECT person_NO, activity_NO FROM az_item WHERE person_NO =222 and (activity_NO =14821 OR activity_NO =14823) and working_day BETWEEN ? AND ?";
				PreparedStatement prStatement = conn.prepareStatement(sql);
				prStatement.setString(1, startMonth);
				prStatement.setString(2, endMonth);
```
leider bekomme ich die folgende exception:
exception:
java.sql.SQLException: Parameter index out of range (1 > number of parameters, which is 0).
nach langem googeln habe ich gesehen, das das ein Problem ist, welche viele leute hatten/haben.
das Apostroph beim Fragezeichen muss wohl sein, habe es auch ohne getestet, will nicht gehen..
hast zuvällig zu dem eine Idee?


----------



## fehlerfinder (2. Dez 2014)

Hallo Sinclair,

aaalso - da gibt's eine ganze Reihe von Baustellen in deiner Statement-Historie ;-)

Ich fange mal mit deinem letzten Posting an. Was meinst du mit "Apostroph beim Fragezeichen"? Meinst du damit die Anführungszeichen nach dem zweiten Fragezeichen? Die gehören in diesem Fall nicht zum SQL-Statement, sondern begrenzen deinen >String sql = "...";< - gehören also schlicht zur Java-Syntax und dürfen entsprechend auch nicht weggelassen werden.

Deine "working_day"-Spalte ist als "DATE" definiert. Wenn du jetzt zwei Strings (startMonth und endMonth) für die Parameter (also letztlich die Fragezeichen) einsetzt, wirst du nicht auf einen grünen Zweig kommen (String != DATE). Du hast zwei Möglichkeiten:

a) du übergibst ein ordnungsgemäß formatiertes Datum (die Syntax kenne ich nicht auswendig, aber das findest du sicherlich raus)
oder
b) du übergibst eine Zahl (prStatement.setInt()) und fragst die dann in deinem Stament mit etwas in der Art "month(working_day) between ? and ?" ab (ob es das "month()" so gibt, weiß ich nicht, da schau mal in die SQL-Doku deiner DB).

Und jetzt zu deinen früheren Versuchen:
In Posting #11 steht z.B. so etwas wie "and  YEAR (NOW) and MONTH (?)". Das kann nicht funktionieren, weil du da gar keinen Vergleich ausführst. Du meinst eventuell so etwas wie "year(now()) = year(working_day)" (falls es denn die Funktion year() gibt).

In #13 schreibst du "die YEAR und MONTH Funktion, die habe ich nich in meiner Tabelle, habe nur den typ DATE." - Da musst du zunächst einmal deutlich zwischen der Definition deiner Tabelle (mit den zugehörigen Datentypen) und den von deinem Datenbank-System zur Verfügung gestellten Funktionen unterscheiden. Funktionen können (müssen nicht) auf Spalten, und damit letztlich auf Datentypen, angewendet werden. Aber Funktion und Typ ist nicht dasselbe.


----------



## sinclair (4. Dez 2014)

hallo

sorry, hatte die letzten tage schule..
ich habe mal einige Veränderungen wider vorgenommen, dass mal werde ich euch  meherere cods posten.


```
private static Date getStartDate(String day) throws ParseException
	{
		Calendar now = Calendar.getInstance();
		String nowYear = String.valueOf(now.get(Calendar.YEAR));
		String nowMonth = String.valueOf(now.get(Calendar.MONTH));
		String fullDate = nowYear + "-" + nowMonth + "-" + day;
		SimpleDateFormat sdf1 = new SimpleDateFormat("dd-MM-yyyy");
		java.util.Date date = sdf1.parse(fullDate);
		java.sql.Date sqlFullDate = new java.sql.Date(date.getTime());
		return sqlFullDate;
	}
```
folgende Überlegung, es wird der tag als paramether übergeben, es ist ein string, fragt mich nicht, wieso ich ausgerechnet einen string genommen  habe, hatte schon den anfänglichen code so..
zurückgegeben wird das Datum, sqlDate.
folgend die main Funktion:

```
Queries queries = new Queries(getStartDate("01"), getStartDate("28"));
```

in diesem Beispiel  werden die tage 01 und 28 als string übergeben, gleich kommt die query klasse, um das Verständnis für die Überlegung zu haben.


```
public Queries(Date startDate, Date endDate)
	{
		getAbsenzen(startDate, endDate);
	}

	private boolean getAbsenzen(Date startDate, Date endDate)
	{
		Connection conn = MySQLConnection.getInstance();
		if (conn != null)
		{
			try
			{
				String sql = "SELECT person_NO, activity_NO, working_day FROM az_item WHERE person_NO =222 and (activity_NO =14821 OR activity_NO =14823) and working_day BETWEEN '?' and '?'";

				PreparedStatement prStatement = conn.prepareStatement(sql);
				prStatement.setDate(1, (java.sql.Date) startDate);
				prStatement.setDate(2, (java.sql.Date) endDate);
return true;
}
```
im konstruktor übergeben wir die zwei Daten, welche von der main Methode sind, im konstruktor selber, rufen wir die abfrage auf, welche zwei Daten erwartet.
leider bekomme ich immer noch, diese Gott verdammte Meldung:

java.sql.SQLException: Parameter index out of range (1 > number of parameters, which is 0).
leute, ich muss unbedingt diese Woche fertig werden^^..
daher bitte ich euch das mal genauer unter die lupe zu nehmen.


----------



## Joose (4. Dez 2014)

sinclair hat gesagt.:


> ```
> String sql = "SELECT person_NO, activity_NO, working_day FROM az_item WHERE person_NO =222 and (activity_NO =14821 OR activity_NO =14823) and working_day BETWEEN '?' and '?'";
> ```
> 
> java.sql.SQLException: Parameter index out of range (1 > number of parameters, which is 0).



Lass die Hochkommas bei den Fragezeichen einfach weg. Damit werden die Fragezeichen nicht als Parameter sondern normaler String des Statements gesehen.
Wenn du die Parameter setzt werden die benötigten Hochkommas automatisch hinzugefügt. Sprich du musst dich nicht darum sorgen ob du nun Hochkommas brauchst oder nicht.


----------



## sinclair (4. Dez 2014)

hallo
ja, das habe ich auch schon ausprobiert, dann kommt folgende exception:
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '? and ?' at line 1
p.s:
ist übrigens  ein gutes Forum, die antwortzeiten sind rekordreif^^.


----------



## Joose (4. Dez 2014)

Wie weiter oben schon gesagt hast du probiert diese Statement in einem SQL Browser Tool (Squirrel, ...) durchzuführen?
Funktioniert es dort?
(Dort musst du deine Parameter natürlich durch richtige Werte ersetzen)

Ansonsten könntest du dein Statement mal alternativ umschreiben auf:
"WHERE working_day >= ? AND working_day <= ?"


----------



## sinclair (4. Dez 2014)

hallo
String sql = "SELECT person_NO, activity_NO, working_day FROM az_item WHERE person_NO =222 and (activity_NO =14821 OR activity_NO =14823) AND working_day >=? AND working_day <=?";
ohne das '',
exception:
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '? AND working_day <=?' at line 1
mit ''
String sql = "SELECT person_NO, activity_NO, working_day FROM az_item WHERE person_NO =222 and (activity_NO =14821 OR activity_NO =14823) AND working_day >='?' AND working_day <='?'";
java.sql.SQLException: Parameter index out of range (1 > number of parameters, which is 0).
ich habe  folgendes getestet, mit der SQL Konsole, meinst du das mit  browser?
SQL: 
 SELECT person_NO, activity_NO, working_day FROM az_item WHERE person_NO =222 and (activity_NO =14821 OR activity_NO =14823) AND working_day BETWEEN 01-01-2014 AND working_day BETWEEN '01.01.2015';
Ergebnis der  Konsole ist positiv..
was heisst es für uns jetzt genau?
stimmt irgendwas mit dem Java code nicht?


----------



## Joose (4. Dez 2014)

sinclair hat gesagt.:


> mit ''
> String sql = "SELECT person_NO, activity_NO, working_day FROM az_item WHERE person_NO =222 and (activity_NO =14821 OR activity_NO =14823) AND working_day >='?' AND working_day <='?'";
> java.sql.SQLException: Parameter index out of range (1 > number of parameters, which is 0).



Ja das ist ja auch korrekt, die Fehlermeldung besagt das du auf Index 1 einen Parameter setzen willst, es gibt aber keine Parameter da diese durch das Hochkomma nicht erkannt werden.



sinclair hat gesagt.:


> String sql = "SELECT person_NO, activity_NO, working_day FROM az_item WHERE person_NO =222 and (activity_NO =14821 OR activity_NO =14823) AND working_day >=? AND working_day <=?";
> ohne das '',
> exception:
> com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '? AND working_day <=?' at line 1



Kommt diese Fehlermeldung beim Ausführen des Statements oder schon beim prepare des Statements?



sinclair hat gesagt.:


> ich habe  folgendes getestet, mit der SQL Konsole, meinst du das mit  browser?



Es gibt unterschiedliche Arten, einfach ein Programm um sich Strukturen und Daten der Datenbank anzuschauen und wenn notwendig zu editieren etc.
Ob das nun inkl UI geschieht oder nur auf der Konsole ist egal.



sinclair hat gesagt.:


> SQL:
> SELECT person_NO, activity_NO, working_day FROM az_item WHERE person_NO =222 and (activity_NO =14821 OR activity_NO =14823) AND working_day BETWEEN 01-01-2014 AND working_day BETWEEN '01.01.2015';
> Ergebnis der  Konsole ist positiv..



Dieses Statement schaut sehr komisch aus ... "Column BETWEEN Value AND Column BETWEEN Value" .... 
Außerdem was bedeutet das Ergebnis ist positiv? Bekommst du die Zeilen geliefert die geliefert bekommen willst? Keine mehr oder weniger?


----------



## sinclair (4. Dez 2014)

sorry, die SQL query für die SQL Konsole war so:
String sql = "SELECT person_NO, activity_NO, working_day FROM az_item WHERE person_NO =222 and (activity_NO =14821 OR activity_NO =14823) AND working_day BETWEEN '?' AND '?'";
was ich in einigen Beispielen gesehen habe, es wird der / statt -  verwendet.. habe in meiner string Funktion  das - entfernt und ein / hingezaubert..
Ergebnis für mich heisst, es werden keine datensätze angezeigt, was auch soweit stimmt..
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '? AND ?' at line 1
das kommt, nach dem das preparStatement ausgeführt wurde.
java.sql.SQLException: Parameter index out of range (1 > number of parameters, which is 0).
wenn ich   die hochkomatas setze, kommt ja diese exception, du sagtest, das wäre logisch, inwiefern logisch?


----------



## Joose (4. Dez 2014)

sinclair hat gesagt.:


> was ich in einigen Beispielen gesehen habe, es wird der / statt -  verwendet.. habe in meiner string Funktion  das - entfernt und ein / hingezaubert..



Klar die Datumsformatierung kann zu einem Problem werden aber in diesem Fall sollte dies nicht die Ursache sein.



sinclair hat gesagt.:


> java.sql.SQLException: Parameter index out of range (1 > number of parameters, which is 0).
> wenn ich   die hochkomatas setze, kommt ja diese exception, du sagtest, das wäre logisch, inwiefern logisch?



Alles unter Hochkommas ist für SQL ein String der als solches anzusehen ist. Sprich das Fragezeichen ist in diesem Fall nur ein String und nicht der Platzhalter für einen Parameter.
So wird verhindert das ein gewolltes Fragezeichen (zum Beispiel bei Beschreibungen) als Platzhalter gesehen wird.
Die Exception sagt aus das du einen Parameter setzen willst obwohl es gar keine gibt, da er keine finden kann.



sinclair hat gesagt.:


> com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '? AND ?' at line 1
> das kommt, nach dem das preparStatement ausgeführt wurde.



Hast du schon mal kontrolliert welche Version dein MySQL Server hat und ob Parameter bei dieser schon unterstützt werden?


----------



## sinclair (4. Dez 2014)

hmm, ja, die Version unterstützts eigentlich schon.. habe aber trotzde mal, die aktuellste Version gedownloadet..
sonst lassen wir das, aber vielen dank..  werde mit meinem ausbildner darüber reden, wobei es den eindruck macht, das er nicht mit SQL bewandert ist..


----------



## sinclair (4. Dez 2014)

meine Version sollte das eigentlich schon unterstützen...
habe jetzt aber mal das neuste update installiert..
naja ich glaube, wir kommen da nicht so recht weiter mit meinem Problem...
trotzdem danke..


----------



## JavaMeister (4. Dez 2014)

> naja ich glaube, wir kommen da nicht so recht weiter mit meinem Problem...



Solange du kein Buch zu Hand nimmst und die Grund Grundlagen lernst, kann man das Problem nicht lösen.


----------



## sinclair (5. Dez 2014)

JavaMeister hat gesagt.:


> Solange du kein Buch zu Hand nimmst und die Grund Grundlagen lernst, kann man das Problem nicht lösen.



was hat das mit den Grundlagen zu  tun..
auf stackoverflow.com, ist das ein Problem, was  offt diskutiert wird.


----------



## dzim (5. Dez 2014)

Worauf er anspielt, ist wahrscheinlich, dass es auf uns so wirkt, als hättest du dich generell noch nicht so viel mit SQL beschäftigt. In dem Fall wäre ein Buch, oder eine sonstige Lektüre, sinnvoll, damit du strukturiert in die Thematik rein kommst. Klar werden konkrete Fälle sowohl hier im Forum, als auch auf StackOverflow viel diskutiert, aber dabei geht es um konkrete SQL-Query-Probleme. Nicht um teilweise so offensichtliche Verständnisprobleme mit SQL als solchen. Dafür sind Bücher und Tutorials geeigneter. 
Ich kann von mir z.B. sagen, dass ich nicht sehr gut etwas Erklären kann, also hilft es nicht, wenn ich Anfängern versuche etwas zu verdeutlichen - dabei scheitere ich kläglich. Fortgeschrittene kommen dagegen meist hinterher, weil sie so ungefähr wissen, worüber ich rede.
Verstehst du, was ich meine?


----------



## sinclair (5. Dez 2014)

dzim hat gesagt.:


> Worauf er anspielt, ist wahrscheinlich, dass es auf uns so wirkt, als hättest du dich generell noch nicht so viel mit SQL beschäftigt. In dem Fall wäre ein Buch, oder eine sonstige Lektüre, sinnvoll, damit du strukturiert in die Thematik rein kommst. Klar werden konkrete Fälle sowohl hier im Forum, als auch auf StackOverflow viel diskutiert, aber dabei geht es um konkrete SQL-Query-Probleme. Nicht um teilweise so offensichtliche Verständnisprobleme mit SQL als solchen. Dafür sind Bücher und Tutorials geeigneter.
> Ich kann von mir z.B. sagen, dass ich nicht sehr gut etwas Erklären kann, also hilft es nicht, wenn ich Anfängern versuche etwas zu verdeutlichen - dabei scheitere ich kläglich. Fortgeschrittene kommen dagegen meist hinterher, weil sie so ungefähr wissen, worüber ich rede.
> Verstehst du, was ich meine?



zu meiner schande muss ich auch sagen, dass ich mich nur sporardisch mit dem beschäftigt habe..
und ja, ich habe dich verstanden..


----------



## dzim (5. Dez 2014)

Na dann: Ärmel hochkrempeln und los geht's!


----------



## fehlerfinder (6. Dez 2014)

sinclair hat gesagt.:


> ```
> private static Date getStartDate(String day) throws ParseException
> {
> Calendar now = Calendar.getInstance();
> ...



Du hast da ein Problem mit deinem Datum. Der String fullDate hat z.B. den Wert "2014-12-06", dein SimpleDateFormat sdf1 erwartet aber etwas wie "06-12-2014".


----------



## sinclair (11. Dez 2014)

hallo leute

ich habe mein Problem wegem Datum gelöst..
allerdings muss ich etwas ergänzen:
und ich weiss nicht so recht, wie ich die abfrage machen soll..
man stelle sich folgendes vor:
es gibt zwei Tabellen, in einer trägt man das projekt ein, Datum, Zeitdauer usw..
eine andere Tabelle gibt es, mit der kann man sehen, ob er an diesem tag  gearbeitet hat:
Tabelle: az
working_day    day_name    soll_time
1997-01-01    Wed    0.00
1997-01-02    Thu    0.00
1997-01-03    Fri    8.00
1997-01-04    Sat    0.00
1997-01-05    Sun    0.00
1997-01-06    Mon    8.00
bei feier tage ist es halt 0.00, nun sollte ich irgendwie  herausfinden,  wo ich in der anderen Tabelle z.b einen tag vergessen habe und ich aber eigentlich, laut dieser Tabelle arbeiten musste.. versteht ihr was ich mein?


----------



## fehlerfinder (22. Dez 2014)

sinclair hat gesagt.:


> ich habe mein Problem wegem Datum gelöst..


Verrätst du uns auch noch, wie du das gelöst hast bzw. was der Fehler war? Es gibt ja doch immer mal wieder Leute, die mit Hilfe der Suchfunktion eine Problemlösung finden möchten und wenn dann da steht "ich habe mein Problem gelöst" ist das nicht wirklich hilfreich. (Es gibt leider tonnenweise genau diese "Lösungen" in den Foren dieser Welt:-( ) Als kleine Anerkennung für Hilfe, die dir hier zuteil wird, wäre das durchaus eine sinnvolle Ergänzung zu diesem Thread ;-)



> allerdings muss ich etwas ergänzen:
> und ich weiss nicht so recht, wie ich die abfrage machen soll..
> man stelle sich folgendes vor:
> es gibt zwei Tabellen, in einer trägt man das projekt ein, Datum, Zeitdauer usw..
> ...



Ehrliche Antwort? - Nein, ich verstehe nicht, was du meinst (und da solange niemand geantwortet hat, geht das wohl mehreren so...)

Mein ehrlicher (wenn auch etwas unbequemer) Rat:
Bemühe dich, es so zu formulieren, dass du selber davon überzeugt bist, das andere es auch verstehen können!!! Das hat den Vorteil, dass dir eher geholfen werden kann (und wird) und kann den angenehmen Nebeneffekt haben, dass du - einfach weil du dich mal richtig in die Problematik hinein "kniest" - selber Schritte zur Lösung findest (wobei du diese Schritte dann wiederum auch in weitere Fragen einbauen kannst).

Mal ganz nebenbei: die Aufnahme von "day_name" in deine az-Tabelle ist überflüssig, denn der Name ergibt sich automatisch aus dem Datum. Die Info, ob du an einem bestimmten Tag hättest arbeiten sollen, ist ja offensichtlich vom Wochentagsnamen unabhängig, sondern einzig in der Spalte soll_zeit (oder target_time - aber doch nicht soll_time... ;-) ) ablesbar.


----------

