Brauche ansatz: suchmaske für Datenbank -> Statement erstellen

Layna

Erfahrenes Mitglied
Hallo, Leute :).
Ok, irgendwie habe ich eine grosse Leere in meinem Kopf...
Also, ich habe eine Datenbank, auf die ich per Java zugreife, und eine Eingabemaske, in der der User zum Beipiel einen Vornamen eingibt, und nach diesem vornamen soll dann in der dtaenbank gesuchtwerden. soweit, so gut.
Aktuell kann man nach Vorname, Nachname, und der Zugehörigkeit zu einem Verein suchen.
Also drei Eingabefelder, in die der user etwas eintragen KANN, aber nciht muss.
Mein Problem bei der Sache: WIE stelle ich jetzt am besten das SQL-satement für die Suchabfrage zusammen?
An sich kein Problem, wenn der User nicht auch Felder freilassen könnte...

Danke schonmal :)

Larayna
 
Du kannst im SQL Statement Wildcards benutze, sollte also ein Feld leer sein dann setz eine Wildcard ein (%).

z.B.

Code:
SELECT * FROM adressen WHERE name LIKE '%TEST%' AND nachname LIKE '%'

Erstellen der Variable:

Code:
nachname = (nachname.length() > 0) ? "%" + nachname + "%" : "%";
 
Zuletzt bearbeitet:
Hallo
.....also ich würde mal auf jeden Fall ein PreparedStatement benutzten....
Ich hatte das damals so gelöst : (Methodenausschnitt)

Code:
public static Vector search (String Artist, String Movie){
 		//fix_me
 		Vector result = new Vector();
 		PreparedStatement pstmt;
 		ResultSet rs;
 		
 		try {
 			/*
 			SELECT artists.a_name, movies.f_name, movies.f_duration
 			FROM artists LEFT JOIN movies ON artists.a_id=movies.f_artist;
 			*/
 		
 		if ((!Artist.equals("")) && (!Movie.equals(""))){
 			pstmt = MainWindow.MyCon.prepareStatement("SELECT artists.a_name, movies.f_title, movies.f_duration FROM artists LEFT JOIN movies ON artists.a_id=movies.f_artist WHERE a_name LIKE ? AND f_title LIKE ? ORDER BY a_name");
 			pstmt.setString(1, "%" + Artist + "%");
 			pstmt.setString(2, "%" + Movie + "%");
 		}else{
 			if (Artist.equals("") && !Movie.equals("")){
 		    	pstmt = MainWindow.MyCon.prepareStatement("SELECT artists.a_name, movies.f_title, movies.f_duration FROM artists LEFT JOIN movies ON artists.a_id=movies.f_artist WHERE f_title LIKE ? ORDER BY a_name");
 				pstmt.setString(1, "%" + Movie + "%");
 			}else{
 				if (!Artist.equals("") && Movie.equals("")){
 		    		pstmt = MainWindow.MyCon.prepareStatement("SELECT artists.a_name, movies.f_title, movies.f_duration FROM artists LEFT JOIN movies ON artists.a_id=movies.f_artist WHERE a_name LIKE ? ORDER BY a_name");
 		    		pstmt.setString(1, "%" + Artist + "%");
 				}else{
 		    		pstmt = MainWindow.MyCon.prepareStatement("SELECT artists.a_name, movies.f_title, movies.f_duration FROM artists LEFT JOIN movies ON artists.a_id=movies.f_artist ORDER BY a_name");
 				}
 			}
 		}
 		
 		rs = pstmt.executeQuery();
 		
 		while (rs.next())
 		    {		    	
 				String myArtistName = rs.getString("a_name");
 				String myMovieName = rs.getString("f_title");
 				String myDuration = rs.getString("f_duration");
 
 				result.add(myArtistName);
 				result.add(myMovieName);
 				result.add(myDuration);
 			}
 			
 			pstmt.close();
 		} catch (SQLException sqlex){
 			System.out.println("Error connecting to Database: SQLex");
 		}
 		
 		return result;
 	}

.....also ich bin leider nicht besonders begabt was Java betrifft und die Methode ist sicher nicht die beste aber für meine, privaten Zwecke reicht es ;)
....aber Tom hat sicher auch noch einige bessere Tipps :-)
greetz
 
Also, wenn ich die Perpared statements mit der Abfrage nutze sollte das funktionieren, denke ich... bin aber für alle weiteren Ansätze dankbar, und wenn es nur aus Neugierde ist :)
Danke schonmal an die bisherigen tippgeber!
 
Zurück