Hallo ich arbeite momentan an einer Aufgabe in JDBC und habe Probleme mit einem ungültigen Spaltenindex. Komme auch echt nicht mehr weiter und bitte um Hilfe!
Die Methode soll folgende Funktion haben :
Java:
public void transferSample(Integer sampleId, Integer diameterInCM) {
L.info("Start");
PreparedStatement ps = null;
ResultSet rs = null;
String sql = "SELECT diameterInCM FROM Tray WHERE diameterInCM = ?";
L.info(sql + "" + diameterInCM);
try {
ps = getConnection().prepareStatement(sql);
ps.setInt(1, diameterInCM);
rs = ps.executeQuery();
if(!rs.next()){
throw new CoolingSystemException("Durchmesser " + diameterInCM + " nicht vorhanden.");
}
ps.close();
rs.close();
sql = "SELECT TrayID FROM Tray WHERE diameterInCM = ? ";
L.info(sql + "-> TrayID = " + trayId);
ps = getConnection().prepareStatement(sql);
ps.setInt(1, trayId);
rs = ps.executeQuery();
ArrayList<Integer> list = new ArrayList<Integer>();
while(rs.next()) {
list.add(rs.getInt("trayId"));
}
ps.close();
rs.close();
sql = "SELECT TrayID FROM Place";
L.info(sql + "-> TrayID = " + trayId);
ps = getConnection().prepareStatement(sql);
ps.setInt(1, trayId);
rs = ps.executeQuery();
// ArrayList<Integer> list2 = new ArrayList<Integer>();
// while(rs.next()) {
// list.add(rs.getInt("trayId"));
// }
ps.close();
rs.close();
sql = "INSERT INTO Place VALUES (?,?,?) WHERE diameterInCM=?";
L.info(sql + "-> SampleId " + sampleId);
ps = getConnection().prepareStatement(sql);
ps.setInt(1, trayId);
ps.setInt(1, placeNo);
ps.setInt(1, sampleId);
ps.executeUpdate();
rs = ps.executeQuery();
ps.close();
rs.close();
sql = "INSERT INTO Tray VALUES (?,?,?,?) WHERE diameterInCM=?";
L.info(sql + "-> SampleId " + sampleId);
ps = getConnection().prepareStatement(sql);
ps.setInt(1, trayId);
ps.setInt(1, diameterInCM);
ps.setInt(1, capacity);
ps.setDate(1, expirationDate);
ps.executeUpdate();
rs = ps.executeQuery();
int lgN = 0;
while(lgN < list.size()) {
list.get(lgN);
sql = "INSERT INTO Tray VALUES (?,?,?,?) WHERE MIN(ExpirationDate)";
L.info(sql + "-> TrayId= " + trayId);
ps = getConnection().prepareStatement(sql);
ps.setInt(1, trayId);
ps.setInt(1, diameterInCM);
ps.setInt(1, capacity);
ps.setDate(1, expirationDate);
ps.executeUpdate();
rs = ps.executeQuery();
lgN++;
}
ps.close();
rs.close();
} catch (SQLException e) {
throw new CoolingSystemException(e);
}
Die Methode soll folgende Funktion haben :
Java:
/**
* Sucht ein Tablett, das die Probe aufnehmen kann und erzeugt einen
* entsprechenden Datensatz in der Tabelle Place. Folgende Bedingungen muessen
* erfuellt sein:
* <ul>
* <li>Der Durchmesser muss passen.</li>
* <li>Die Probe soll auf das Tablett mit dem kleinsten Ablaufdatum kommen,
* das groesser als das Ablaufdatum der Probe ist.</li>
* <li>Auf dem ausgewaehlten Tablett soll die Probe auf den kleinsten freien
* Platz kommen. Da stellt sicher, dass Luecken gefuellt werden.</li>
* <li>Gibt es kein passendes Tablett, so wird ein leeres Tablett mit
* passendem Durchmesser genommen und dessen Ablaufdatum auf das Ablaufdatum
* der Probe plus 30 Tage gesetzt.</li>
* <li>Gibt es kein leeres Tablett mit passendem Durchmesser mehr, so wird
* eine Ausnahme ausgeloest.</li>
* </ul>
*
* @param sampleId
* Primaerschluessel der Probe.
* @param diameterInCM
* Durchmesser des Probenroehrchens. Wird durch einen Sensor
* gemessen.
* @throws CoolingSystemException
* falls kein passendes Tablett gefunden werden kann.
* @throws DataException
* bei allen Datenbankfehlern.
*/