roontafloor
Mitglied
Ok ich werde jetzt mal alle 3 Klassen sowie die Datenbankdetails posten.
MainKlasse:
Jetzt die ActorKlasse:
Jetzt die MovieKlasse:
Jetzt noch die Datenbank Dateien
Create:
CREATE TABLE MOVIE (movie_ID INT PRIMARY KEY,
movie_name CHAR(30),
movie_description CHAR(30),
movie_rating INT,
movie_year INT
);
CREATE TABLE ACTOR (actor_ID INT PRIMARY KEY,
actor_name CHAR(30),
actor_prename CHAR(30)
);
CREATE TABLE MOVIE_ACTOR (movie_ID INT NOT NULL,
actor_ID INT NOT NULL,
FOREIGN KEY (movie_ID) REFERENCES MOVIE (movie_ID),
FOREIGN KEY (actor_ID) REFERENCES ACTOR (actor_ID)
)
und noch die Inserts:
INSERT INTO MOVIE VALUES (1, 'TEST', 'TEST', 2, 1988)
INSERT INTO MOVIE VALUES (2, 'American Gangster', 'gangster movie', 5, 2008)
INSERT INTO MOVIE VALUES (3, 'The departed', 'mafia movie', 1, 2011)
INSERT INTO MOVIE VALUES (4, '2012', 'catastrophe movie', 5, 2012)
INSERT INTO MOVIE VALUES (5, 'Snakes on a plane', 's.jackson will play in it', 4, 2007)
INSERT INTO MOVIE VALUES (6, 'nemo', 'fish movie', 2, 2006)
INSERT INTO MOVIE VALUES (7, 'american pie 3', 'teenie movie', 1, 2005)
INSERT INTO ACTOR VALUES (1, 'Muster', 'Max')
INSERT INTO ACTOR VALUES (2, 'Washington', 'Denzel')
INSERT INTO ACTOR VALUES (3, 'Damon', 'Matt')
INSERT INTO ACTOR VALUES (4, 'DiCaprio', 'Leonardo')
INSERT INTO ACTOR VALUES (5, 'noActor', 'noActor')
INSERT INTO ACTOR VALUES (6, 'animation', 'animation')
INSERT INTO ACTOR VALUES (7, 'Jackson', 'Samuel L.')
INSERT INTO MOVIE_ACTOR VALUES (1, 1)
INSERT INTO MOVIE_ACTOR VALUES (2, 2)
INSERT INTO MOVIE_ACTOR VALUES (3, 3)
INSERT INTO MOVIE_ACTOR VALUES (3, 4)
INSERT INTO MOVIE_ACTOR VALUES (4, 5)
INSERT INTO MOVIE_ACTOR VALUES (5, 7)
INSERT INTO MOVIE_ACTOR VALUES (6, 6)
INSERT INTO MOVIE_ACTOR VALUES (7, 5)
MainKlasse:
Code:
import java.io.*;
import java.sql.*;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Mainclass {
public static final String EINGABE_UNGUELTIG = "Ihre Eingabe war ungültig. Geben Sie bitte erneut Ihre Auswahl von folgenden ein!";
public static boolean cancel=false;
public static String zeile;
public static Scanner einlesenscanner = new Scanner(System.in);
//public static int anzahlactor = 0;
//main klasse geändert NEU
public static void main(String[] args) throws ClassNotFoundException, SQLException, IOException{
System.out.println("Willkommen. Viel Spass mit der Rainy Day Movie Database!");
startScreen();
}
//Aufteilung der Methoden NEU
public static void startScreen() throws IOException, SQLException, ClassNotFoundException{
Statement st;
ArrayList<Movie> movies;
st=connect();
movies=execute_select(st);
System.out.println("\nHauptmenue ");
System.out.println("________________________________________");
System.out.println("0: Alle Filme anzeigen ");
System.out.println("1: Einen Eintrag editieren ");
System.out.println("2: Einen Film oder Schauspieler hinzufügen");
System.out.println("3: Einen Film suchen ");
System.out.println("4: Die Filme sortieren");
System.out.println("5: Einen Film oder Schauspieler löschen");
System.out.println("9: Programm beenden\n");
menuAuswahl(movies, st);
}
//neuerstellte methode NEU
public static void menuAuswahl(ArrayList<Movie> movies, Statement st) throws IOException, SQLException, ClassNotFoundException {
ResultSet rs;
String menuRegex = "[0-9]", menueeingabe = "", fehlermeldung = "Was möchten Sie nun tun?";
int rueckgabe = -1;
boolean menuewiederholen = false;
// ÄNDERUNG Die Eingabe im Hauptmenu wird geprüft ob sie wirklich den vorhanden Optionen (0-9) entspricht NEU
while (menuewiederholen== false) { //wird keine 0-9 eingegeben, wiederholt sich diese stelle ewigs
System.out.println("Wählen Sie die entsprechende Zahl aus!");
System.out.print("--> ");
menueeingabe = einlesenscanner.nextLine();
Pattern p4 = Pattern.compile(menuRegex);
Matcher m4 = p4.matcher(menueeingabe);
menuewiederholen = m4.matches();
if ( menuewiederholen == false ){
System.out.println("Falsche Eingabe. Geben Sie bitte nur eine einstellige Zahl ein!");
}
//0 wurde eingegeben, alle filme bitte anzeigen NEU
else if (menueeingabe.equals("0")){
menuewiederholen = false;
System.out.println("Alle diese Filme befinden sich in unserer Datenbank:\n");
show(movies);
while ( menuewiederholen == false ) {
System.out.println(fehlermeldung);
System.out.println("A = Zurück zum Hauptmenu");
System.out.println("B = Programm beenden");
menueeingabe = einlesenscanner.nextLine();
menuewiederholen = ((Pattern.compile("[a-bA-B]").matcher(menueeingabe)).matches());
if (menuewiederholen == false ) fehlermeldung = EINGABE_UNGUELTIG;
}
switch(menueeingabe.toUpperCase().charAt(0)) {
case 'A':
startScreen();
break;
case 'B':
System.out.println("Auf Wiedersehen!");
System.exit(0);
}
}
// Option 1 NEU
else if(menueeingabe.equals("1")){
System.out.println("noch nicht realisiert!!");
}
// Option 2 NEU
else if(menueeingabe.equals("2")){
menuewiederholen = false;
fehlermeldung="Möchten Sie einen Schauspieler oder einen Film hinzufügen?";
while (menuewiederholen == false ) {
System.out.println(fehlermeldung);
System.out.println("1 = Film\n2 = Schauspieler");
menueeingabe = einlesenscanner.nextLine();;
menuewiederholen = ((Pattern.compile("[1-2]").matcher(menueeingabe)).matches());
if ( menuewiederholen == false ) fehlermeldung = EINGABE_UNGUELTIG;
}
switch(menueeingabe.toUpperCase().charAt(0)) {
case '1':
insertMovie(movies, st);
break;
case '2':
insertActor(movies, st, true);
break;
default:
}
}
// Option 3 NEU
else if(menueeingabe.equals("3")){
menuewiederholen = false;
fehlermeldung="Nach was wollen Sie suchen?";
rueckgabe = -1;
while (menuewiederholen == false ) {
System.out.println(fehlermeldung);
System.out.println("1 = Filmname\n2 = Schauspieler");
menueeingabe = einlesenscanner.nextLine();;
menuewiederholen = ((Pattern.compile("[1-2]").matcher(menueeingabe)).matches());
if ( menuewiederholen == false ) fehlermeldung = EINGABE_UNGUELTIG;
}
switch(menueeingabe.toUpperCase().charAt(0)) {
case '1':
System.out.println("Wie heist der Film?");
menueeingabe = einlesenscanner.nextLine();
search(movies, menueeingabe, 1);
break;
case '2':
System.out.println("Welchen Schauspieler möchten sie?");
menueeingabe = einlesenscanner.nextLine();
search(movies,menueeingabe,2);
break;
default:
}
}
// Option 4 NEU
else if(menueeingabe.equals("4")){
System.out.println("noch nicht realisiert!!");
}
// Option 5 NEU
else if(menueeingabe.equals("5")){
System.out.println("noch nicht realisiert!!");
}
// Option 9 NEU
else if(menueeingabe.equals("9")){
System.out.println("Auf Wiedersehen!");
System.exit(0);
}
}
}
public static void insertMovie(ArrayList<Movie> movies, Statement st)throws SQLException, IOException, ClassNotFoundException {
ResultSet rs;
int rueckgabe = -1, rID = 0, yID = 0;
int aID = 0;
String fname, fdescription, fehlermeldung = "",menueeingabe="";
int id=0, anzahlactor = 0;
boolean wiederholen = false, temp1 = false, temp2 = false;
System.out.print("Geben Sie den Titel des Films ein:\n-->");
fname=einlesenscanner.nextLine();
System.out.print("Geben Sie eine Beschreibung des Films ein:\n-->");
fdescription=einlesenscanner.nextLine();
System.out.println("Geben Sie eine Bewertung des Films ein( 1-5 ):");
while (wiederholen == false ) {
System.out.println(fehlermeldung);
menueeingabe = einlesenscanner.nextLine();
wiederholen = ((Pattern.compile("[1-5]{1}").matcher(menueeingabe)).matches());
/*try {
rueckgabe = Integer.parseInt(menueeingabe);
if ( rueckgabe >= 1 && rueckgabe <= 10 ) temp2 = true;
else temp2 = false;
} catch ( Exception e ){
temp2 = false;
}*/
fehlermeldung = EINGABE_UNGUELTIG+"\nGeben Sie eine Zahl zwischen 1 und 5 ein!";
//if ( temp1 == true && temp2 == true ) wiederholen = true;
//else wiederholen = false;
}
rID = Integer.parseInt(menueeingabe);
fehlermeldung = "";
wiederholen = false;
System.out.println("Geben Sie ein wann der Film erstellt wurde:\n-->");
while (wiederholen == false ) {
System.out.println(fehlermeldung);
menueeingabe = einlesenscanner.nextLine();
temp1 = ((Pattern.compile("[0-9]{4}").matcher(menueeingabe)).matches());
try {
rueckgabe = Integer.parseInt(menueeingabe);
if ( rueckgabe <= 2050 && rueckgabe >= 1900 ) temp2 = true;
else temp2 = false;
} catch ( Exception e ){
temp2 = false;
}
fehlermeldung = EINGABE_UNGUELTIG+"\nGeben Sie ein Jahr zwischen 1900 und 2050 ein!";
if ( temp1 == true && temp2 == true ) wiederholen = true;
else wiederholen = false;
}
yID = rueckgabe;
id= movies.size()+1;
//film einfügen
try{
st.executeUpdate("INSERT INTO MOVIE VALUES ("+ id +", '"+ fname +"', '"+ fdescription + "'," + rID + ", " + yID +")");
}catch(SQLException e){
e.getMessage();
}
fehlermeldung = "";
wiederholen = false;
rs = st.executeQuery("SELECT COUNT(*) FROM Actor");
//rs = st.executeQuery("SELECT actor_id from Actor");
while (rs.next()) anzahlactor = rs.getInt(1);
System.out.println("Geben Sie die ID des Schauspielers ein:\n-->");
while (wiederholen == false ) {
System.out.println(fehlermeldung);
menueeingabe = einlesenscanner.nextLine();
temp1 = ((Pattern.compile("[0-9]+").matcher(menueeingabe)).matches());
try {
rueckgabe = Integer.parseInt(menueeingabe);
System.out.println(rueckgabe);
System.out.println(anzahlactor);
if ( rueckgabe <= anzahlactor && rueckgabe >= 1 ) temp2 = true;
else temp2 = false;
} catch ( Exception e ){
temp2 = false;
}
fehlermeldung = EINGABE_UNGUELTIG+"\nGeben Sie die richtige ID vom Schauspieler ein!";
if ( temp1 == true && temp2 == true ) wiederholen = true;
else wiederholen = false;
}
aID = rueckgabe;
st.executeUpdate("INSERT INTO MOVIE_ACTOR VALUES ("+ id +","+aID+" )"); //mit tabelle schauspieler verbinden
// ÄNDERUNG Die folgende nachricht erscheint und das program kehrt zum startbildschirm zurück NEU
System.out.println("Der Film wurde ins Archiv aufgenommen" + "\n");
startScreen();
}
public static void insertActor(ArrayList<Movie> movies, Statement st, boolean withmovie)throws SQLException, IOException, ClassNotFoundException {
ResultSet rs;
int id=0, aid=0, anzahlMovies=0, anzahlActor =0;
String aname, avorname;
int rueckgabe = -1;
String menueeingabe="", fehlermeldung = "";
boolean wiederholen = false, temp1 = false, temp2 = false;
rs = st.executeQuery("SELECT COUNT(*) FROM Actor"); //zählen wie viele einträge
while (rs.next()) anzahlActor = rs.getInt(1);
aid = anzahlActor + 1;
System.out.println("Geben Sie den Vornamen ein:\n-->");
avorname= einlesenscanner.nextLine();
System.out.println("Geben Sie den Namen ein:\n-->");
aname=einlesenscanner.nextLine();
//aid=aid+1;
try{
st.executeUpdate("INSERT INTO ACTOR VALUES ('"+aid+"','"+aname+"', '"+avorname+"')");//einfügen schauspieler
}catch(Exception e){
// e.getLocalizedMessage().toString();
e.getMessage();
}
////HIER GIBT ES NOCH PROBLEM, KEINE FEHLERMELDUNG
fehlermeldung = "";
wiederholen = false;
rs = st.executeQuery("SELECT COUNT(*) FROM Movie");
while (rs.next()) anzahlMovies = rs.getInt(1);
System.out.println("Geben sie die ID eines Filmes an wo er Mitspielt::\n-->");
//System.out.println(anzahlMovies);
while (wiederholen == false ) {
System.out.println(fehlermeldung);//DIESE FEHLERMEDLUNG WIRD SCHON AUSGEGEBEN OBWOHL MAN NICHTS GETIPPT HAT
menueeingabe = einlesenscanner.nextLine();
temp1 = ((Pattern.compile("[0-9]+").matcher(menueeingabe)).matches());
try {
rueckgabe = Integer.parseInt(menueeingabe);
System.out.println(rueckgabe);
System.out.println(anzahlMovies);
if ( rueckgabe <= anzahlMovies && rueckgabe >= 1 ) temp2 = true;
else temp2 = false;
} catch ( Exception e ){
temp2 = false;
}
fehlermeldung = EINGABE_UNGUELTIG+"\nGeben Sie die richtige ID vom Film ein!";
if ( temp1 == true && temp2 == true ) wiederholen = true;
else wiederholen = false;
}
id = rueckgabe;
st.executeUpdate("INSERT INTO MOVIE_ACTOR VALUES ("+ id +","+aid+" )"); //einfügen film wo er mitgemacht hat.
System.out.println("Der Schauspieler wurde ins Archiv aufgenommen" + "\n");
startScreen();
}
public static Statement connect() throws ClassNotFoundException, SQLException{
final String HSQLDB_TREIBER_PFAD = "org.hsqldb.jdbcDriver";
final String DB_PFAD = "jdbc:hsqldb:file:C:\\Users\\kiran\\programme\\programmieren\\" +
"hsqldb\\data\\rainydays\\rainydays2";
Class.forName(HSQLDB_TREIBER_PFAD);
Connection con = DriverManager.getConnection(DB_PFAD);
Statement st = con.createStatement();
return st;
}
//Methode liest alle einträge aus db aus und speichert sie in einer array list
public static ArrayList<Movie> execute_select(Statement st) throws SQLException{
int anz=0;
int id=0;
int idlast=1;
String name="";
String description="";
int rating=0;
int year=0;
ArrayList<Movie> movies= new ArrayList<Movie>(); //arraylist movies erstellen
ArrayList<Actor> actors= new ArrayList<Actor>();
//SQL befehl ausführen
ResultSet rs = st.executeQuery
("SELECT Movie.movie_id, Movie.movie_name, Movie.movie_description," +
" Movie.movie_rating, Movie.movie_year,Actor.actor_id, Actor.actor_prename, Actor.actor_name FROM Movie, " +
"Actor, movie_actor WHERE Movie.movie_id = movie_actor.movie_id AND Actor.actor_id= movie_actor.actor_id ;");
// arraylist füllen
while (rs.next()) {
id=rs.getInt(1);
if (id==idlast) //prüfen ob immer noch der gleiche film, wenn ja nur schauspieler hinzufügen, wenn nein Film.
actors.add(new Actor (rs.getInt(6), rs.getString(7), rs.getString(8)));
else {
movies.add(new Movie(idlast,name,description ,rating , year,actors));
actors.clear();
actors.add(new Actor (rs.getInt(6),rs.getString(7), rs.getString(8)));
}
idlast=id;
name=rs.getString(2);
description=rs.getString(3);
rating=rs.getInt(4);
year=rs.getInt(5);
if(rs.isLast())movies.add(new Movie(idlast,name,description ,rating , year,actors)); //wenn letzter eintrag film hinzufügen
}
anz=anz+1;
return movies;
}
//Methode zeigt alle filme auf Bildschirm an
public static void show(ArrayList<Movie> movies) {
int anz=movies.size();
// bis ans ende der arraylist jeden film ausgeben
for (int i=0; i<anz;i++) {
Movie k = (Movie) movies.get(i);
k.print(); //print() methode aus movie.java wird aufgerufen
System.out.println("\n\n\t\t\t\t\t____________\n");
}
}
//Methode sucht nach filname oder Schauspielern die Mitgemacht haben.
public static void search(ArrayList movies, String name, int typ){
int anz=movies.size();
//boolean found =false;
//ArrayList actors=new ArrayList<Movie>();
//int actor_nr=0;
String test;
if(typ==1){
for (int i=0; i<anz;i++) {
Movie k=(Movie) movies.get(i);
//System.out.println(k.movie_name);
test = einlesenscanner.nextLine();
System.out.println("name=" +test+" movie="+k.movie_name);
if (k.movie_name.equals(test)) {
System.out.println("OK");
}else {
System.out.println(name);
System.out.println("NEIN");
}
}
}
//wenn suchen nach actor
/*if (typ==1){
for (int i=0; i<anz;i++) { //alle filme durchgehen
Movie k=(Movie) movies.get(i);
actors=k.movie_actor;
actor_nr=actors.size();
for (int j=0; j<actor_nr;j++) { //die schauspiler des films durchgehen wennn gesuchter dabei film ausgebe.
Actor l=(Actor) actors.get(j);
if (l.actor_name.equals(name)) {
System.out.println("\n************************************************");
k.print();
System.out.println("\n************************************************");
found =true;
}
}
}
} else { //sonst filme
for (int i=0; i<anz;i++) { //list durchgehen bis gefunden wenn gefunden true sonst bleibt false
Movie k=(Movie) movies.get(i);
if (k.movie_name.equals(name)) {
System.out.println("\n************************************************");
k.print();
System.out.println("\n************************************************");
found =true;
break;
}
}
}*/
//if (found==false) System.out.println("kein eintrag gefunden"); //wenn nichts gefunden diese meldung
}
//Methode fügt filme und schauspileer der DB hinzu
}
Jetzt die ActorKlasse:
Code:
import java.sql.ResultSet;
import java.sql.Statement;
public class Actor { //Klasse autor Speichert die Autoren als objekt
String actor_name, actor_vorname, ganzername;
int actor_id;
public Actor(int actor_id, String name, String prename){
actor_name=name;
actor_vorname= prename;
ganzername = actor_vorname+" "+actor_name;
}
// geändert NEU
public void print(){ //Methode druckt den Autor aus
System.out.println(ganzername);
}
public String toString() {
return ganzername;
}
}
Jetzt die MovieKlasse:
Code:
import java.util.*;
public class Movie { // Speichert die Filme als Objekt
int movie_id;
String movie_name;
String movie_description;
int movie_rating;
int movie_year;
ArrayList movie_actor;
//Actor movie_actor;
public Movie(int id, String name, String description, int rating, int year, ArrayList actor) { //Konstruktor für objekt
//public Movie(int id, String name, String description, int rating, int year, Actor actor) {
movie_id=id;
movie_name=name;
movie_description=description;
movie_rating=rating;
movie_year=year;
movie_actor=(ArrayList) actor.clone();
}
public void print(){ //Gibt wert des Objekts aus.
String actorname = "", abstand = "";
StringBuffer actor = new StringBuffer("");
//änderungen vorgenommen, Anzeige der Film auflistung NEU
System.out.println("Film ID:\t\t" + movie_id);
System.out.println("Titel:\t\t\t" + movie_name);
System.out.println("Beschreibung:\t\t" + movie_description);
System.out.println("Bewertung:\t\t" + movie_rating);
System.out.println("Ausgabejahr:\t\t" + movie_year);
int anz= movie_actor.size();
for (int i=0; anz>i;i++) {
Actor k= (Actor) movie_actor.get(i);
actorname = k.toString();
if (i == 0) abstand = "";
else abstand = "\n\t\t\t";
actor = actor.append(abstand + actorname);
}
System.out.print("Schauspieler:\t\t" + actor);
}
}
Jetzt noch die Datenbank Dateien
Create:
CREATE TABLE MOVIE (movie_ID INT PRIMARY KEY,
movie_name CHAR(30),
movie_description CHAR(30),
movie_rating INT,
movie_year INT
);
CREATE TABLE ACTOR (actor_ID INT PRIMARY KEY,
actor_name CHAR(30),
actor_prename CHAR(30)
);
CREATE TABLE MOVIE_ACTOR (movie_ID INT NOT NULL,
actor_ID INT NOT NULL,
FOREIGN KEY (movie_ID) REFERENCES MOVIE (movie_ID),
FOREIGN KEY (actor_ID) REFERENCES ACTOR (actor_ID)
)
und noch die Inserts:
INSERT INTO MOVIE VALUES (1, 'TEST', 'TEST', 2, 1988)
INSERT INTO MOVIE VALUES (2, 'American Gangster', 'gangster movie', 5, 2008)
INSERT INTO MOVIE VALUES (3, 'The departed', 'mafia movie', 1, 2011)
INSERT INTO MOVIE VALUES (4, '2012', 'catastrophe movie', 5, 2012)
INSERT INTO MOVIE VALUES (5, 'Snakes on a plane', 's.jackson will play in it', 4, 2007)
INSERT INTO MOVIE VALUES (6, 'nemo', 'fish movie', 2, 2006)
INSERT INTO MOVIE VALUES (7, 'american pie 3', 'teenie movie', 1, 2005)
INSERT INTO ACTOR VALUES (1, 'Muster', 'Max')
INSERT INTO ACTOR VALUES (2, 'Washington', 'Denzel')
INSERT INTO ACTOR VALUES (3, 'Damon', 'Matt')
INSERT INTO ACTOR VALUES (4, 'DiCaprio', 'Leonardo')
INSERT INTO ACTOR VALUES (5, 'noActor', 'noActor')
INSERT INTO ACTOR VALUES (6, 'animation', 'animation')
INSERT INTO ACTOR VALUES (7, 'Jackson', 'Samuel L.')
INSERT INTO MOVIE_ACTOR VALUES (1, 1)
INSERT INTO MOVIE_ACTOR VALUES (2, 2)
INSERT INTO MOVIE_ACTOR VALUES (3, 3)
INSERT INTO MOVIE_ACTOR VALUES (3, 4)
INSERT INTO MOVIE_ACTOR VALUES (4, 5)
INSERT INTO MOVIE_ACTOR VALUES (5, 7)
INSERT INTO MOVIE_ACTOR VALUES (6, 6)
INSERT INTO MOVIE_ACTOR VALUES (7, 5)