Lösung zu Blatt 6

SQL-Skript zum Erstellen der Tabellen

CREATE 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);

Interface

package 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;
}

Hauptprogramm

package 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-Zugriff

package 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-Verbindung

package 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();
    }
}