Prepared Staements: "Wildcard" für integer?

Layna

Erfahrenes Mitglied
Hi.
Ich ahbe ein Problem.... ok, das sollte man schon sehen weil ich shcliesslich heir bin.
Jedenfalls: ich habe eine Eingabemaske, wo der User halt Suchkriterien für seine Datenbankabfrage eingeben kann.
Das ergebnis dessen war folgendes Prepared Statement:
Code:
Select * from personen where name LIKE ? AND vorname LIKE ? AND verein = ?
An sich geht das ja...
Leider ist "Verein" ein Integer-Feld. Was soll ich denn jetzt machen wenn dem User der Verein nun einmal egal ist?
Programmieren wäre ohne User einfacher.... ;)
Jedenfalls hoffe ich jemand hat eine idee dazu
Larayna
 
Hallo!

Schau mal hier:
Code:
/**
 * 
 */
package de.tutorials;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;

import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;

/**
 * @author Tom
 * 
 */
public class MySQLPreparedStatementExample {

	/**
	 * @param args
	 */
	public static void main(String[] args) throws Exception {

		MysqlDataSource mds = new MysqlDataSource();
		mds.setServerName("localhost");
		mds.setPort(3306);
		mds.setUser("root");
		mds.setPassword("");
		mds.setDatabaseName("test");

		Connection con = mds.getConnection();

		PreparedStatement pstmt = con
				.prepareStatement("SELECT * FROM personen WHERE vorname LIKE ? AND name LIKE ? AND verein = ?");

		pstmt.setString(1, "Thomas");
		pstmt.setString(2, "Darimont");
		pstmt.setInt(3, 1);

		ResultSet rs = pstmt.executeQuery();
		ResultSetMetaData rsmd = rs.getMetaData();

		int clmCnt = rsmd.getColumnCount();
		while (rs.next()) {
			for (int i = 1; i <= clmCnt; i++) {
				System.out.print(rs.getString(i));
				System.out.print(" ");
			}
			System.out.println();
		}

		pstmt.close();
		con.close();
	}

}

Btw. die MySQLDataSource scheint den MysSQL JDBC Treiber automatisch zu laden wenn dieser im Classpath liegt ... nice ;-)

Gruß Tom
 
SOWEIT habe ich das ja auch.. aber was mache ich wenn der Verein EGAL ist?
Ich kann da ja kein "%" als Wildcard einbauen.... habe ich aus Verzweiflung versucht, führte zum crash.
 
Wenn der Verein nicht gebraucht wird, nimm ihn doch einfach aus dem Statement:

Code:
Select * from personen where name LIKE ? AND vorname LIKE ?
 
Würde ich gerne.. leider ist er nur MANCHMAL nicht notwendig.. vuielelicht will mein User ja auch nach Verein suchen.
 
Dann frag doch ab, ob der Benutzer nach Verein oder nicht suchen will. Will er nicht, benutzt du den einen Query, falls doch den anderen. Oder erzeug den Query direkt dynamisch.
 
Zurück