# String mit ArrayList Inhalten vergleichen



## roontafloor (8. Dezember 2009)

Ich habe eine Filmdatenbank und speichere alle Filme in der Datenbank nach diesem Spaltenmuster:

Movie_ID | Movie_Name| Move_Description | Movie_Rating | Movie_Year

Nun habe ich die Datenbank gefüllt und die Inhalte in eine ArrayList gespeichert, wenn ich diese ausgebe kommen alle Eingaben korrekt raus bsp:

Film ID:		        2
Titel:			American Gangster             
Beschreibung:	gangster movie                
Bewertung:		5
Ausgabejahr:	2008
Schauspieler:	Washington                     Denzel  


Das ganze Programm ist Konsolenbasiert
Jetzt möchte ich eine Option das der User die Möglichkeit hat nach einem Film oder auch Schauspieler zu suchen, ob dieser in der Datenbank resp. ArrayList vorhanden ist.

Momentan mache ich das so:


```
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.next();
				 //System.out.println(test);
				 if (k.movie_name.equals(name)) {
					 System.out.println("OK");
					
				 }else {
					 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
	}
```


Ich lese also die spalte Movie_name heraus und diese Filme zeigt es mir auch an wenn ich einfach nur diese Spalte angebe:
TEST                          
American Gangster             
The departed                  
2012                          
Snakes on a plane             
nemo                          
american pie 3                
bla bla                       



Jetzt weiss ich nicht wieso der Vergleich fehlschlägt.

Ich bin in der korrekten Spalte (movie_name)
und bei der Scannereingabe(name) gebe ich auch einen Film an der vorhanden ist in der Arraylist doch die IF-Schleife gibt mir zurück das die Objekte nicht übereinstimmen.


Meine Frage, was müsste ich genau machen damit ich Strings mit Inhalten einer ArrayList vergleichen kann?


----------



## zerix (8. Dezember 2009)

Hallo,

das machst du eigentlich schon richtig. Ich weiß jetzt allerdings nicht wie du den Namen den du suchst eingegeben hast. Also ob du ihn komplett klein eingegeben hast und im richtigen Namen Groß-Buchstaben vorkommen. 

Am besten versuchst du es mal so

```
k.movie_name.toUpperCase().equals(name.toUpperCase())
```

Ist das hier Absicht, dass du die Variable bei der du vom Scanner einliest test heißt und die mit der du vergleichst name?


```
test = einlesenscanner.next();
				 //System.out.println(test);
				 if (k.movie_name.equals(name)) {
```

Ist es auch Absicht, dass du bei jedem Schleifendurchlauf vom Scanner ließt?

Gruß

Sascha


----------



## roontafloor (8. Dezember 2009)

Guten Abend

hmm ich habe es mit dieser Variante probiert aber auch noch zusätzlich
mit 


equalsIgnoreCase


doch es hat nicht geklappt.


Ich möchte eigentlich jeweils nur einen Datensatz vergleich.

Es hat momentan etwa 7 Filme in der Datenbank
und ich möchte einfach nach 1 suchen und vergleich ob dieser in der Datenbank enthalten ist.



```
if (k.movie_name.equals(name)) {
```

name ist die Scannereingabe welche aber an einem anderen Ort in der Klasse gemacht wird


----------



## zerix (8. Dezember 2009)

Hast du schon mal dir angeschaut, ob das richtige in name steht?

Gruß

Sascha


----------



## roontafloor (8. Dezember 2009)

Also ich habe auch zur Kontrolle 


```
System.out.println(name)
```
ausgegeben

Ein film in der ArrayList heisst "nemo"

und ich weiss auch nicht ob es korrekt ist wenn ich beim Scanner folgendes programmiere:


```
eingabe.einlesenscanner.nextLine();
```

der erste Film in der ArrayList heisst "Test"
aber auch wenn ich nachdiesem suche, gibt mir das if Statement


```
if(k.movie_name.equals(name)){
System.out.println("OK");
} else {
System.out.println("NEIN");
}
```

einen Fehler zurück, ich weiss wirklich nicht wieso, da die Strings identisch sein müssen.


----------



## zerix (8. Dezember 2009)

Warum und wo tust du das?

```
eingabe.einlesenscanner.nextLine();
```

Warum machst du das?

```
test = einlesenscanner.next();
```

Welcher Fehler wird denn ausgegeben?

Gruß

Sascha


----------



## roontafloor (8. Dezember 2009)

eingabe.einlesenscanner wird an "name" übergeben
und dann eben mit k.movie_name verglichen

bei test = einlesenscanner habe ich nur den scanner in die methode genommen und nicht am eigentlichen ort in der klasse platziert.

ja ein fehler gibt es nicht aus
sondern einfach das else-Statement das die beiden Strings nicht gleich wären, was ja aber eben nicht stimmt


----------



## zerix (8. Dezember 2009)

Gib mal bitte name und k.movie_name unmittelbar vor dem Vergleich aus.


```
System.out.println("name="+name+" movie="+k.movie_name);
```

Gruß

Sascha


----------



## roontafloor (8. Dezember 2009)

Interessante Ausgabe

als name gibt es mir jetzt immer nur "name" zurück

die k.movie_name Ausgabe ist korrekt. d.h der Filmname wird ausgegeben.

Hier sonst noch die ganze Klasse:
Auf Zeilennummer 112 --> //Option 3
wird die Suchfunktion aufgerufen


```
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
}
```


----------



## zerix (8. Dezember 2009)

Ich kann dein Programm leider nicht testen, aber auf den ersten Blick sieht es richtig aus. Das was ich unnötig finde, ist, dass du bei jedem Schleifendurchlauf den Namen abfragst. 

Ich würde mal behaupten, dass eventuell mit der Variable name was nicht stimmt. 

Lass dir mal hier die menueeingabe ausgeben.

```
System.out.println("Wie heist der Film?");
						menueeingabe = einlesenscanner.nextLine();
						search(movies, menueeingabe, 1);
						break;
```

Wenn die Ausgabe hier passt und du in der Schleife mit name statt mit test testest, dann sollte es eigentlich funktionieren.


Falls es nicht funktioniert, sag nochmal bescheid, dann werde ich mir das ganze morgen mal genauer anschauen. 

Gruß

Sascha


----------



## roontafloor (10. Dezember 2009)

Ok ich werde jetzt mal alle 3 Klassen sowie die Datenbankdetails posten.

MainKlasse:


```
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:


```
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:


```
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)


----------



## zerix (10. Dezember 2009)

Hallo,

also ich hab den Code getestet. Da ich keine Datenbank aufgesetzt habe, habe ich mir einfach eine Liste mit einem Film angelegt. 

MovieName = Name
Gesuchter Titel = Name

Ich hab bei der Suche in der if-Anweisung test durch name ersetzt und hab test komplett gelöscht, incl der Eingabe in der Schleife, die immer noch unnötig ist. ;-)
Es hat ohne Probleme funktioniert.

Gruß

Sascha


----------



## roontafloor (10. Dezember 2009)

Das Problem habe ich gerade vor etwa 5 minuten gelöst. ;-)

Wenn ich eine Liste mit Filmen angelegt hätte wie du, dann wäre es auch gegangen.
nur habe ich den Debug-modus von Eclipse kennengelernt und sah das die Movie_names so abgespeichert waren:

Bsp.

"Test___________________________"

Sie hatten also alle noch Whitespaces vorhanden, deswegen war die String-Kontrolle auch nie erfolgreich.

Das ganze habe ich dann mit:



```
k.movie_name.trim();
```

gelöst.


Danke trotzdem für die Hilfe.


----------



## zerix (10. Dezember 2009)

Ok, dann ist es klar, dass der Test nicht erfolgreich war. 

Gruß

Sascha


----------



## roontafloor (10. Dezember 2009)

Es hat sich noch eine andere Frage ergeben:

Ich muss noch Junit Tests erstellen und einer davon soll die Datenbankverbindung testen. Ich probierte es mal mit einem SELECT Statement.

Die Klassen die ich dazu erstellt habe und in die "Mainclass" hinzugefügt habe sind:



```
public static int selectsql(String sqlstatement){
	    	try {
	            Class.forName("org.hsqldb.jdbcDriver");
	        } catch ( ClassNotFoundException e ) {
	            System.err.println( "There's no JDBC Driver. Please install it!" + e);
	            quit();
	        }
	        finally{
		        try {
		    	Connection sqlcon = DriverManager.getConnection("jdbc:hsqldb:file:C:\\Users\\kiran\\programme\\programmieren\\" +
						  "hsqldb\\data\\rainydays\\rainydays2;shutdown=true", "sa", "");
		        Statement st = sqlcon.createStatement();
		        int select = st.executeUpdate(sqlstatement);
		        st.close();
		        sqlcon.close();
		        return select;
		        
		        } catch (SQLException e){
		            System.out.println("There's an error in your SQL-Statement" + e);
		            quit();
		        }
	        }
			return -1;
	    }
		
		public static void select(String moviename) {
	        
			selectsql("Select" + moviename+" from Movie");
	    }

		public static void quit(){
	    	System.out.println("Good bye! Have a nice day!");
	    	System.exit(0);
	    }
```


und die Junit TestKlasse:



```
import junit.framework.TestCase;


public class Database extends TestCase {

		public void databaseConnect() { 
		
				String moviename = "movie_name";
				assertEquals("select all movies.", Mainclass.selectsql("Select"+moviename+" from Movie"));				
			}

		}
```


Bei der Ausführung zeigt es mir nun einen Fehler an:


"junit.framework.AssertionFailedError: No Tests found in Database
at junit.framework.TestSuit$1.runTest(TestSuite.java:90)"


Ich habe wirklich keine Ahnung von Junit und habe das erstellte bis jetzt über einige Beispiele im Internet erstellt und weiss nicht wo der Fehler sein könnte.


----------



## roontafloor (10. Dezember 2009)

Ok habe es mittlerweile ausführen können aber jetzt bekomme ich den Fehler bei folgendem Testfall



```
import org.junit.Test;

import junit.framework.TestCase;


public class Database extends TestCase {
		@Test
		public void testDatabaseConnect() { 
		
				
				assertEquals("select all movies.", Mainclass.selectsql("Select * from Movie;"));				
			}

		}
```

Folgender Fehler tritt nun auf:

There's an error in your SQL-Statementjava.sql.SQLException: statement does not generate a row count
Good bye! Have a nice day!



Im Internet habe ich nicht viel gefunden darüber, ich weiss auch nicht wieso eine Erstellung einer Reihenanzahl oder was auch immer erstellt werden muss


----------



## Sentoo (10. Dezember 2009)

Dein Problem liegt in der Methode Mainclass#selectsql. Du machst da 

```
int select = st.executeUpdate(sqlstatement);
```
Da Du aber kein Insert, Update oder Delete, sondern ein Select-Statement hast, müsstest Du

```
int select = st.executeQuery(sqlstatement);
```
machen ...


----------

