Hallo,
habe eine Frage zu meiner Hausaufgabe. Es geht darum, dass bestimmte Ordnungen für eine Ausleihe eines Mediums in einer Bibliothek geprüft werden. Das Programm durchläuft dann diverse Testfälle und spielt dafür Testdaten ein. Mein Problem ist nun, dass sich mein Programm scheinbar innerhalb der Methode etwas aufhängt und mir ständig "Maximale Anzahl von 15 Ausleihen erreicht!" auf der Konsole ausgibt, jedoch ist dies nur in einem einzigen Testfall so. Allerdings gibt er mir dies auch in den anderen Testfällen aus und ich weiß nicht warum :shock:
Wenn ich die Abfrage der maximalen Leihen auskommentiere, dann erhalte ich den Fehler, dass ein Schlüsselwort fehlt. Für mich ergibt das einfach keinen Sinn. Würde mich über eine schnelle Hilfe bzw Denkanstoß freuen. Die besagte Methode ist unterhalb meines Post zu finden. Vielen Dank
habe eine Frage zu meiner Hausaufgabe. Es geht darum, dass bestimmte Ordnungen für eine Ausleihe eines Mediums in einer Bibliothek geprüft werden. Das Programm durchläuft dann diverse Testfälle und spielt dafür Testdaten ein. Mein Problem ist nun, dass sich mein Programm scheinbar innerhalb der Methode etwas aufhängt und mir ständig "Maximale Anzahl von 15 Ausleihen erreicht!" auf der Konsole ausgibt, jedoch ist dies nur in einem einzigen Testfall so. Allerdings gibt er mir dies auch in den anderen Testfällen aus und ich weiß nicht warum :shock:
Wenn ich die Abfrage der maximalen Leihen auskommentiere, dann erhalte ich den Fehler, dass ein Schlüsselwort fehlt. Für mich ergibt das einfach keinen Sinn. Würde mich über eine schnelle Hilfe bzw Denkanstoß freuen. Die besagte Methode ist unterhalb meines Post zu finden. Vielen Dank
private boolean pruefeOrdnungen(String ausweisNr, Long signatur, Connection c)
throws SQLException, ExemplarUnlendableException, ExemplarUnavailableException {
boolean ausleihbar = true;
PreparedStatement s;
//Ausleihbare Medienarten
try {
s = c.prepareStatement("SELECT Signatur From Medium m "
+ "INNER JOIN Medienart ma ON ma.martid = m.martid "
+ "WHERE m.Signatur = ? "
+ "AND ma.Martbezeichnung = 'Zeitschrift' "
+ "OR ma.Martbezeichnung = 'Lose-Blatt-Sammlung' "
+ "OR ma.Martbezeichnung = 'Technische Norm' "
+ "OR ma.Martbezeichnung = 'Firmenschrift' ");
s.setLong(1, signatur);
ResultSet r = s.executeQuery();
if (r.next()){
ausleihbar = false;
System.out.println("Diese Medienart ist nicht ausleihbar!");
throw new ExemplarUnlendableException();
}
}catch(SQLException exp){
}
//Mehrfachausleihe des selben Exemplares
try {
s = c.prepareStatement("SELECT n.ausweisnr FROM Nutzer n "
+ "INNER JOIN Ausleihe a ON a.ausweisnr = n.ausweisnr "
+ "INNER JOIN Exemplar e ON a.exemplarID = e.exemplarID "
+ "INNER JOIN Medium m ON m.signatur = e.signatur "
+ "WHERE m.signatur = ? "
+ "AND a.ausweisnr = ? "
+ "AND a.tatsaechliches_rueckgabedatum IS NULL ");
s.setLong(1, signatur);
s.setString(2, ausweisNr);
ResultSet r1 = s.executeQuery();
if (r1.first()){
ausleihbar = false;
System.out.println("Mehrfachausleihe desselben Exemplares ist nicht gestattet!");
throw new ExemplarUnlendableException();
}
}catch(SQLException exp){
}
//maximale Ausleihen von Mitarbeitern etc
try {
s = c.prepareStatement("SELECT a.ausweisnr FROM Nutzer n "
+ "INNER JOIN Nutzerart na ON na.nartid = n.nartid "
+ "INNER JOIN Ausleihe a ON n.ausweisnr = a.ausweisnr "
+ "WHERE na.nartbezeichnung = 'Student' "
+ "OR na.nartbezeichnung = 'Professor' "
+ "OR na.nartbezeichnung = 'Akadem. Mitarbeiter' "
+ "AND a.ausweisnr = ? "
+ "GROUP BY a.ausweisnr "
+ "HAVING COUNT (a.erwartetes_rueckgabedatum) >= 15 ");
s.setString(1, ausweisNr);
ResultSet r2 = s.executeQuery();
if (r2.next()){
ausleihbar = false;
System.out.println("Maximale Anzahl von 15 Ausleihen erreicht!");
throw new ExemplarUnlendableException();
}
}catch(SQLException exp){
}
//Maximale Ausleihen Fremder
try {
s = c.prepareStatement("SELECT a.ausweisnr FROM Nutzer n "
+ "INNER JOIN Nutzerart na ON na.nartid = n.nartid "
+ "INNER JOIN Ausleihe a ON n.ausweisnr = a.ausweisnr "
+ "WHERE na.nartbezeichnung != 'Student' "
+ "AND na.nartbezeichnung != 'Professor' "
+ "AND na.nartbezeichnung != 'Akadem. Mitarbeiter' "
+ "GROUP BY a.ausweisnr "
+ "HAVING COUNT (a.erwartetes_rueckgabedatum) >= 10 ");
ResultSet r3 = s.executeQuery();
if (r3.next()){
ausleihbar = false;
System.out.println("Maximale Anzahl von 10 Ausleihen erreicht!");
throw new ExemplarUnlendableException();
}
}catch(SQLException exp){
}
//Mahnstufe
try {
s = c.prepareStatement("SELECT a.ausweisnr FROM Mahnstufe ms "
+"INNER JOIN Ausleihe a ON ms.mahnid = a.mahnid "
+"INNER JOIN Nutzer n ON a.ausweisnr = n.ausweisnr "
+"WHERE a.ausweisnr = ? "
+"AND ms.mahnid = 3 "
+"AND a.tatsaechliches_rueckgabedatum IS NULL ");
s.setString(1, ausweisNr);
ResultSet r4 = s.executeQuery();
if (r4.next()){
ausleihbar = false;
System.out.println("Keine Ausleihe während Mahnverfahren möglich!");
throw new ExemplarUnlendableException();
}
}catch(SQLException exp){
}
return ausleihbar;
}
throws SQLException, ExemplarUnlendableException, ExemplarUnavailableException {
boolean ausleihbar = true;
PreparedStatement s;
//Ausleihbare Medienarten
try {
s = c.prepareStatement("SELECT Signatur From Medium m "
+ "INNER JOIN Medienart ma ON ma.martid = m.martid "
+ "WHERE m.Signatur = ? "
+ "AND ma.Martbezeichnung = 'Zeitschrift' "
+ "OR ma.Martbezeichnung = 'Lose-Blatt-Sammlung' "
+ "OR ma.Martbezeichnung = 'Technische Norm' "
+ "OR ma.Martbezeichnung = 'Firmenschrift' ");
s.setLong(1, signatur);
ResultSet r = s.executeQuery();
if (r.next()){
ausleihbar = false;
System.out.println("Diese Medienart ist nicht ausleihbar!");
throw new ExemplarUnlendableException();
}
}catch(SQLException exp){
}
//Mehrfachausleihe des selben Exemplares
try {
s = c.prepareStatement("SELECT n.ausweisnr FROM Nutzer n "
+ "INNER JOIN Ausleihe a ON a.ausweisnr = n.ausweisnr "
+ "INNER JOIN Exemplar e ON a.exemplarID = e.exemplarID "
+ "INNER JOIN Medium m ON m.signatur = e.signatur "
+ "WHERE m.signatur = ? "
+ "AND a.ausweisnr = ? "
+ "AND a.tatsaechliches_rueckgabedatum IS NULL ");
s.setLong(1, signatur);
s.setString(2, ausweisNr);
ResultSet r1 = s.executeQuery();
if (r1.first()){
ausleihbar = false;
System.out.println("Mehrfachausleihe desselben Exemplares ist nicht gestattet!");
throw new ExemplarUnlendableException();
}
}catch(SQLException exp){
}
//maximale Ausleihen von Mitarbeitern etc
try {
s = c.prepareStatement("SELECT a.ausweisnr FROM Nutzer n "
+ "INNER JOIN Nutzerart na ON na.nartid = n.nartid "
+ "INNER JOIN Ausleihe a ON n.ausweisnr = a.ausweisnr "
+ "WHERE na.nartbezeichnung = 'Student' "
+ "OR na.nartbezeichnung = 'Professor' "
+ "OR na.nartbezeichnung = 'Akadem. Mitarbeiter' "
+ "AND a.ausweisnr = ? "
+ "GROUP BY a.ausweisnr "
+ "HAVING COUNT (a.erwartetes_rueckgabedatum) >= 15 ");
s.setString(1, ausweisNr);
ResultSet r2 = s.executeQuery();
if (r2.next()){
ausleihbar = false;
System.out.println("Maximale Anzahl von 15 Ausleihen erreicht!");
throw new ExemplarUnlendableException();
}
}catch(SQLException exp){
}
//Maximale Ausleihen Fremder
try {
s = c.prepareStatement("SELECT a.ausweisnr FROM Nutzer n "
+ "INNER JOIN Nutzerart na ON na.nartid = n.nartid "
+ "INNER JOIN Ausleihe a ON n.ausweisnr = a.ausweisnr "
+ "WHERE na.nartbezeichnung != 'Student' "
+ "AND na.nartbezeichnung != 'Professor' "
+ "AND na.nartbezeichnung != 'Akadem. Mitarbeiter' "
+ "GROUP BY a.ausweisnr "
+ "HAVING COUNT (a.erwartetes_rueckgabedatum) >= 10 ");
ResultSet r3 = s.executeQuery();
if (r3.next()){
ausleihbar = false;
System.out.println("Maximale Anzahl von 10 Ausleihen erreicht!");
throw new ExemplarUnlendableException();
}
}catch(SQLException exp){
}
//Mahnstufe
try {
s = c.prepareStatement("SELECT a.ausweisnr FROM Mahnstufe ms "
+"INNER JOIN Ausleihe a ON ms.mahnid = a.mahnid "
+"INNER JOIN Nutzer n ON a.ausweisnr = n.ausweisnr "
+"WHERE a.ausweisnr = ? "
+"AND ms.mahnid = 3 "
+"AND a.tatsaechliches_rueckgabedatum IS NULL ");
s.setString(1, ausweisNr);
ResultSet r4 = s.executeQuery();
if (r4.next()){
ausleihbar = false;
System.out.println("Keine Ausleihe während Mahnverfahren möglich!");
throw new ExemplarUnlendableException();
}
}catch(SQLException exp){
}
return ausleihbar;
}