ResultSet especifico para Oracle

7 respostas
N

Caros amigos,

Preciso de saber quala sintaxe para criar um resultset especificamente para oracle.

sem mais um abraço

7 Respostas

italo.vendrameto

Acho que é isso que vc está procurando

import java.net.URL;
import java.sql.*;
import oracle.jdbc.driver.*;
/**
* Classe de teste de acesso a Banco de Dados atraves de JDBC utilizando
um drive nativo.
*/
class ConectaNAT {

     /**
      * Método de teste.
      */
     public static void main (String args[]) {

         String url   = "jdbc:oracle:thin:@<host name>:<porta>:<sid>";
                                      //Protocolo:Drive:LocalizacaoDoBD
       /* Na linha de comando acima, deve ser substituído as variaveis <host  name>, <porta> e <sid> pelas   configurações de seu servidor oracle */


         String query = "SELECT sysdate FROM dual"; // Query SQL

         try {
             Class.forName("oracle.jdbc.driver.OracleDriver");
                                                  //Carrega o drive Nativo

             Connection con = DriverManager.getConnection(url, "teste",  "teste1");
             /* Sintaxe :DriverManager.getConnection(<caminho do host>, <usuario>,  <password>*/
             DatabaseMetaData dma = con.getMetaData ();
             System.out.println("\nConnected to " + dma.getURL());
             System.out.println("Driver       " + dma.getDriverName());
             System.out.println("Version      " + dma.getDriverVersion());
             System.out.println("");

             Statement stmt = con.createStatement ();
                                             // Abre a coneccao com o BD

             ResultSet rs = stmt.executeQuery (query);  // Executa a query  SQL

             //Imprime o resultado da query SQL
             while(rs.next()) {
                 System.out.println(rs.getString(1));
             }

             rs.close();
             stmt.close();
             con.close();

         } catch (SQLException ex) {

             System.out.println ("\n*** SQLException caught ***\n");
             while (ex != null) {
                 System.out.println ("SQLState: " + ex.getSQLState ());
                 System.out.println ("Message:  " + ex.getMessage ());
                 System.out.println ("Vendor:   " + ex.getErrorCode ());
                 ex = ex.getNextException ();
                 System.out.println ("");
             }

         } catch (java.lang.Exception ex) {
             ex.printStackTrace ();
         }
     }
 }
N

olá obrigado pela dica, mas não dá para chamar um stored procedure?

abraço

D

Claro utilize o CallableStatement

CallableStatement st = null;			
st = cn.prepareCall("{ call lsgdb003.lsgprc.s_lsg032_extrato (?)}");

// Define parâmetros de entrada
st.setString(1, cpf);
			
rs = st.executeQuery();

while (rs.next()) {
}
von.juliano
Ao que me parece, a resposta acima não funciona no Oracle (se estiver errado me desculpe, mas nunca usei dessa forma). Suponho que vc vai obter mais de uma coluna em seu select no Oracle, logo deve estar utilizando cursor. Se for o caso, vc vai ter de fazer algo assim:
CallableStatement cst = connection.prepareCall("{ CALL SUA_PROCEDURE (?, ?)}");
cst.setString(1, cpf);

cst.registerOutParameter(2, OracleTypes.CURSOR); // 2.º parametro na procedure
cst.execute()

ResultSet rs = (ResultSet) cst.getObject(2);
Vê se funciona, qq duvida posta novamente. Flw! :mrgreen:
N

Ja agora como defino a saida do cursor no Stored Procedure do Oracle?

abraço

furutani

Olá

Veja se esse exemplo ajuda.
public class OracleFunction {

	public static void main(String s[]) {
		try {
			//Makes a connection to database
			Connection con = null;
			Class.forName("oracle.jdbc.driver.OracleDriver");
			con = (Connection)DriverManager.getConnection("jdbc:oracle:thin:@IP:PORT:SID","USER","PASSWORD");

		  	//CallableStatement has to used to get back results from Oracle function
			CallableStatement cstmt = con.prepareCall("{? = call PACKAGE_NAME.FUNCTION_NAME }");

			//Set the Out Parameter type to be of type CURSOR
			cstmt.registerOutParameter(1, oracle.jdbc.driver.OracleTypes.CURSOR );

			cstmt.execute();

			//Cast the returned parameter, OracleTypes.CURSOR to a JDBC ResultSet
			ResultSet rs = (ResultSet)cstmt.getObject(1);
			while(rs.next()) {
				System.out.println(rs.getString(1));
			}
			rs.close();
			if(cstmt != null)cstmt.close();
			if(con != null) con.close();
		} catch (Exception e) {
			System.out.println(e.toString());
		}
    }
}
von.juliano

Seguindo o que coloquei no último post, a procedure seria:

PROCEDURE SUA_PROCEDURE ( CPF IN VARCHAR2, CURSOR_RETORNO OUT SYS_REFCURSOR ) AS BEGIN OPEN CURSOR_RETORNO FOR SELECT * FROM TABELA WHERE ... END
É isso que vc quer saber? Se não for, posta aew de novo! Flw! :mrgreen:

Criado 19 de setembro de 2007
Ultima resposta 21 de set. de 2007
Respostas 7
Participantes 5