Software Engineering Praxis im Sommersemester 2006
|
Lösung zu Blatt 6SQL-Skript zum Erstellen der TabellenCREATE TABLE ALLG_ZULAGE (GRUPPE VARCHAR(10), BETRAG DOUBLE); CREATE TABLE ORTSZUSCHLAG (ID INTEGER, STUFE INTEGER, BETRAG DOUBLE); CREATE TABLE BAT (GRUPPE VARCHAR(10), DIENSTALTER INTEGER, GEHALT DOUBLE); CREATE TABLE ZUORDNUNG_ORTSZUSCHLAG (GRUPPE VARCHAR(10), ID INTEGER); Interfacepackage blatt6;public interface Bat { /* Anm.: * Die Versorgungsgruppe kann die Werte * I,Ia,Ib,IIa,IIb,III,IVa,IVb,Va,Vb,Vc,VIa,VIb,VII,VIII,IXa,IXb,X * annehmen */ /**Diese Funktion dient zum Ermitteln des Betrages der allgemeinen Zulage. * @param versGrp die Versorgungsgruppe des Angestellten * @return die allgemeine Zulage * @throws Exception falls was schiefläuft */ public float allgZulage(String versGrp) throws Exception; /**Diese Funktion liefert den Ortszuschlag * @param versGrp die Versorgungsgruppe des Angestellten * @param stufe die Stufe des Ortszuschlags (zulässige Werte: 1-7) * @return den Ortszuschlag * @throws Exception falls was schiefläuft */ public float ortszuschlag(String versGrp, int stufe) throws Exception; /**Diese Funktion bestimmt das Grundgehalt, abhängig von Versorgungsgruppe und * Alter des Angestellten. * @param versGrp die Versorgungsgruppe des Angestellten * @param alter das Alter des Angestellten * @return das Grundgehalt * @throws Exception falls was schiefläuft */ public float grundgehalt(String versGrp, int alter) throws Exception; } Hauptprogrammpackage blatt6; import java.sql.SQLException; public class BatTool { public static void main(String[] args){ MyDb db = null; try { db = new MyDb(); } catch (Exception e1) { System.err.println("Unable to initialize DB"); System.exit(1); } try { Bat b = new BatImpl(db); float gehalt = b.grundgehalt("IIa", 27); float ozuschlag = b.ortszuschlag("IIa", 1); float zula = b.allgZulage("IIa"); System.out.println(gehalt); System.out.println(ozuschlag); System.out.println(zula); System.out.println("==============="); System.out.println(gehalt + ozuschlag + zula); } catch (Exception e) { e.printStackTrace(); } finally{ try { db.stop(); } catch (SQLException e) { System.err.println("Could not stop DB"); } } } } Datenbank-Zugriffpackage blatt6; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class BatImpl implements Bat { private MyDb db; private Statement s; public BatImpl(MyDb aDB) throws Exception{ db = aDB; s = db.getStatement(); } /* (non-Javadoc) * @see blatt6.Bat#grundgehalt(java.lang.String, int) */ public float grundgehalt(String BesGrp, int alter) throws SQLException{ ResultSet rs; rs = s.executeQuery( "SELECT gehalt FROM bat WHERE gruppe='" + BesGrp + "' AND dienstalter = (SELECT MAX(dienstalter) FROM bat WHERE dienstalter<=" + alter + ")"); rs.next(); return rs.getFloat(1); } /* (non-Javadoc) * @see blatt6.Bat#ortszuschlag(java.lang.String, int) */ public float ortszuschlag(String BesGrp, int stufe) throws Exception{ ResultSet rs; rs = s.executeQuery( "SELECT betrag FROM ortszuschlag o INNER JOIN zuordnung_ortszuschlag z " + "ON z.id=o.id WHERE z.gruppe='" + BesGrp + "' AND o.stufe=" + stufe); if(!rs.next()) throw new Exception("no result"); return rs.getFloat(1); } /* (non-Javadoc) * @see blatt6.Bat#allgZulage(java.lang.String) */ public float allgZulage(String BesGrp) throws Exception{ ResultSet rs; rs = s.executeQuery( "SELECT betrag FROM allg_zulage WHERE gruppe='" + BesGrp + "'"); if(!rs.next()) throw new Exception("no result"); return rs.getFloat(1); } } Datenbank-Verbindungpackage blatt6; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.Statement; import java.util.Properties; public class MyDb { //private static String driver = "org.apache.derby.jdbc.EmbeddedDriver"; //private static String protocol = "jdbc:derby:"; private static String driver = "org.mysql.jdbc.Driver"; private static String protocol = "jdbc:mysql:"; private Connection conn = null; private Properties props = new Properties(); private Statement s; private String dbName = "db"; private String port = "11190"; public MyDb() throws Exception{ try { Class.forName(driver).newInstance(); //props.put("user", "user1"); //props.put("password", "user1"); props.put("user", "sep"); props.put("password", "geheim"); /*conn = DriverManager.getConnection(protocol + "/home/rguderlei/uni/vorlesungen/sep/6/db", props);*/ conn = DriverManager.getConnection(protocol + "//turing:"+port + "/"+ dbName, props); conn.setAutoCommit(true); s = conn.createStatement(); } catch (Exception e) { throw new Exception(e); } } public Statement getStatement(){ return s; } public void stop() throws SQLException{ s.close(); conn.close(); } } |