package prepared; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ParameterMetaData; import java.sql.PreparedStatement; import java.sql.ResultSet; public class PreparedStatements { public static void main(String[] args) { try { Class.forName("org.postgresql.Driver"); Connection con = DriverManager.getConnection( "jdbc:postgresql:test", "postgres", "postgres"); // Initialisieren eines PreparedStatements - // man beachte das Fragezeichen hinter LIKE PreparedStatement statement = con.prepareStatement( "SELECT firstname, lastname, salary " + "FROM employees WHERE " + "firstname LIKE ?"); // Der JDBC-Treiber kümmert sich um Details wie // Hochkommata etc. statement.setString(1, "%a%"); ResultSet result = statement.executeQuery(); while (result.next()) { System.out.println(result.getString(1)); } // Nochmal ein PreparedStatement mit mehreren // Parametern statement = con.prepareStatement( "SELECT firstname, lastname " + "FROM employees WHERE " + "salary > ? AND firstname LIKE ?"); statement.setString(2, "%r%"); statement.setInt(1, 1000); result = statement.executeQuery(); while (result.next()) { System.out.println(result.getString(1)); } // Das Auswerten der Parameter eines PreparedStatement // ist eine gerne vernachlässigte Funktionalität - // bspw. bei Postgres bis dato noch nicht implementiert try { ParameterMetaData data = statement.getParameterMetaData(); for (int i = 0; i < data.getParameterCount(); i++) { System.out.println("Parameter No. " + i + ":"); System.out.println( "Class:" + data.getParameterClassName(i)); System.out.println( "Nullable (0-no,1-yes,2-maybe):" + data.isNullable(i)); System.out.println( "Type:" + data.getParameterTypeName(i)); } } catch (Throwable e) { System.out.println( "PreparedStatement.getParameterMetaData() " + "not supported by" + " this JDBC implementation"); } } catch (Exception e) { e.printStackTrace(); } } }