Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (Deutsch) » SQL Anywhere Server - Programmierung » SQL Anywhere Datenzugriff-APIs » SQL Anywhere JDBC-Treiber » JDBC für den Zugriff auf Daten verwenden

 

Vorbereitete Anweisungen für effizienteren Zugriff verwenden

Wenn Sie eine Statement-Schnittstelle verwenden, muss jede Anweisung, die Sie an die Datenbank senden, syntaktisch analysiert werden. Außerdem ist ein Zugriffsplan zu generieren und die Anweisung auszuführen. Die Schritte vor der eigentlichen Ausführung werden als Vorbereitung der Anweisung bezeichnet.

Sie können Performance-Vorteile erzielen, wenn Sie die PreparedStatement-Schnittstelle verwenden. Damit haben Sie die Möglichkeit, eine Anweisung mit Platzhaltern vorzubereiten, und dann beim Ausführen der Anweisung diesen Platzhaltern Werte zuzuordnen.

Der Einsatz von vorbereiteten Anweisungen ist besonders dann nützlich, wenn viele ähnliche Aktionen ausgeführt werden, wie etwa das Einfügen von vielen Zeilen.

Weitere Hinweise über vorbereitete Anweisungen finden Sie unter Anweisungen vorbereiten.

Beispiel

Das folgende Beispiel zeigt, wie die Schnittstelle PreparedStatement benutzt werden kann, obwohl das Einfügen einer einzelnen Zeile in der Praxis nicht mit vorbereiteten Anweisungen erfolgen sollte.

Die folgende InsertDynamic-Methode der Klasse JDBCExample führt eine vorbereitete Anweisung aus:

public static void InsertDynamic( Connection con,
              String ID, String name )
{
  try {
    // Build the INSERT statement
    // ? is a placeholder character
    String sqlStr = "INSERT INTO Departments " +
            "( DepartmentID, DepartmentName ) " +
            "VALUES ( ? , ? )";

    // Prepare the statement
    PreparedStatement stmt =
      con.prepareStatement( sqlStr );

    // Set some values
    int idValue = Integer.valueOf( ID );
    stmt.setInt( 1, idValue );
    stmt.setString( 2, name );

    // Execute the statement
    int iRows = stmt.executeUpdate();

    // Print the number of rows inserted
    System.out.println(iRows + " rows inserted");
  }
  catch (SQLException sqe)
  {
    System.out.println("Unexpected exception : " +
              sqe.toString() + ", sqlstate = " +
              sqe.getSQLState());
  }
  catch (Exception e)
  {
    e.printStackTrace();
  }
}
Quellcode verfügbar

Dieses Codefragment ist Teil der JDBCExample-Klasse, die im Verzeichnis Beispielverzeichnis\SQLAnywhere\JDBC enthalten ist.

Hinweise
  • Die Methode executeUpdate gibt eine Ganzzahl zurück, die die Anzahl der Zeilen ausdrückt, die von dem Vorgang betroffen waren. In diesem Fall würde ein erfolgreicher INSERT-Vorgang den Wert Eins (1) zurückgeben.

  • Bei der Ausführung als serverseitige Klasse erfolgt die Ausgabe von System.out.println im Fenster "Datenbankservermeldungen".

♦  So führen Sie das Beispiel JDBC Insert aus
  1. Über Interactive SQL stellen Sie als Benutzer DBA eine Verbindung mit der Beispieldatenbank her.

  2. Die Klasse JDBCExample muss installiert sein.

    Weitere Hinweise, wie Sie die Java-Beispiele installieren können, finden Sie unter Vorbereitung der Beispiele.

  3. Definieren Sie eine gespeicherte Prozedur namens JDBCInsert, die als Wrapper für die Methode JDBCExample.Insert in der Klasse agiert:

    CREATE PROCEDURE JDBCInsert( IN arg1 INTEGER, IN arg2 CHAR(50) )
      EXTERNAL NAME 'JDBCExample.Insert(ILjava/lang/String;)V'
      LANGUAGE JAVA;
  4. Rufen Sie die Methode JDBCExample.Insert wie folgt auf:

    CALL JDBCInsert( 202, 'Southeastern Sales' );

    Die Insert-Methode veranlasst, dass die Methode InsertDynamic aufgerufen wird.

  5. Vergewissern Sie sich, dass in die Tabelle Departments eine zusätzliche Zeile eingefügt wurde.

    SELECT * FROM Departments;

    Das Beispielprogramm zeigt den aktualisierten Inhalt der Tabelle Departments im Fenster "Datenbankservermeldungen" an.

  6. In der Beispielklasse DeleteDynamic gibt es eine ähnliche Methode, die zeigt, wie die soeben hinzugefügte Zeile gelöscht wird.

    Definieren Sie eine gespeicherte Prozedur namens JDBCDelete, die als Wrapper für die Methode JDBCExample.Delete in der Klasse agiert:

    CREATE PROCEDURE JDBCDelete( in arg1 integer )
      EXTERNAL NAME 'JDBCExample.Delete(I)V'
      LANGUAGE JAVA;
  7. Rufen Sie die Methode JDBCExample.Delete wie folgt auf:

    CALL JDBCDelete( 202 );

    Die Delete-Methode veranlasst, dass die Methode DeleteDynamic aufgerufen wird.

  8. Überprüfen Sie, ob die Zeile aus der Tabelle Departments gelöscht wurde.

    SELECT * FROM Departments;

    Das Beispielprogramm zeigt den aktualisierten Inhalt der Tabelle Departments im Fenster "Datenbankservermeldungen" an.