java + sqlplus

bassem

Grünschnabel
Hi

ich versuche mittels einer Java Klasse die Ausführungspläne einer Oracle Datenbanken auszugeben, leider hab ich bis jetzt keinen Erfolg, die Ausführungspläne konnte ich mit dem Befehl EXPLAIN PLAIN FOR SELECT * FROM STUDENT; innerhalb der sql commando ausgeben, aber wie kann ich das in meiner java klasse machen?
Meine Applikation ist mit der Datenbank mit dem JDBC verbunden und ich konnte die Zeilen von der Tabelle STUDENT, die ich in der DB angelegt habe, auch ausgeben.

GIbt es in Java oder in den Oracle Bibliotheken irgendwelche Klasse bzw. Methoden, wo man plan_table ausgibt?

Danke
 
Hallo!

Leider hab ich im aktuellen Oracle JDBC Treiber odjbc14.jar keine Unterstuetzung fuer Auswertungen der plan_table gefunden...

Das musst du dann schon von hand tun... schau doch mal hier:
Code:
   /**
    * 
    */
   package de.tutorials;
   
   import java.sql.Connection;
   import java.sql.PreparedStatement;
   import java.sql.ResultSet;
   import java.sql.ResultSetMetaData;
   import java.sql.SQLException;
   import java.sql.Statement;
  
  import oracle.jdbc.pool.OracleDataSource;
   
  /**
    * @author Thomas
    * 
    */
   public class OracleExplainPlanExample {
   
   	/**
   	 * @param args
   	 */
   	public static void main(String[] args) throws Exception {
   		Class.forName("oracle.jdbc.OracleDriver");
   
   		OracleDataSource oracleDataSource = new OracleDataSource();
   		oracleDataSource.setServerName("localhost");
   		oracleDataSource.setPortNumber(1521);
   		oracleDataSource.setDatabaseName("orcl");
   		oracleDataSource.setDriverType("thin");
   		oracleDataSource.setUser("scott");
   		oracleDataSource.setPassword("scott");
   
   		Connection connection = oracleDataSource.getConnection();
   
   		Statement statement = connection.createStatement();
   
   		statement
 				.execute("EXPLAIN PLAN SET statement_id='fooStatement' FOR SELECT * FROM emp");
   
   		statement.close();
   
   		executeQueryAndPrintData(connection, "SELECT * FROM emp");
   
   		executeQueryAndPrintData(connection,
 				"SELECT * FROM plan_table WHERE statement_id = 'fooStatement'");
   
   		connection.close();
   
   	}
   
   	/**
   	 * @param connection
   	 * @throws SQLException
   	 */
   	private static void executeQueryAndPrintData(Connection connection,
   			String sql) throws SQLException {
   		Statement statement = connection.createStatement();
   
   		ResultSet resultSet = statement.executeQuery(sql);
   
   		ResultSetMetaData resultSetMetadata = resultSet.getMetaData();
   
   		int columnCount = resultSetMetadata.getColumnCount();
   
   		while (resultSet.next()) {
   			for (int i = 1; i <= columnCount; i++) {
 				System.out.print(resultSet.getString(i));
   				System.out.print(" ");
   			}
   			System.out.println();
   		}
   
   		resultSet.close();
   
   		statement.close();
   	}
   
   }

Gruss Tom
 
Zurück