6 Şubat 2018 Salı

CallableStatement Sınıfı

Giriş
Stored Procedure çağırmak için kullanılır.

constructor
Örnek
Parametresiz Stored Procedure için şöyle yaparız.
CallableStatement cs = con.prepareCall("{call your_procedure()}");
Örnek
İki parametre alan Stored Procedure için şöyle yaparız.
CallableStatement cs = con.prepareCall("{call your_procedure(?,?)}");
Örnek
İki parametre alan Stored Procedure için şöyle yaparız.
String storedProc = "{call show_data(?,?)}";
Connection conn = ...;
CallableStatement cst = con.prepareCall(storedProc);
Elimizde iki tane parametre alan stored procedure olduğunu varsaydım. Bu yüzden iki tane soru işareti karakteri var.
CREATE PROCEDURE show_data(IN FULLNAME VARCHAR(50), IN ADDRESS VARCHAR(50))
PARAMETER STYLE JAVA
LANGUAGE JAVA
READS SQL DATA
EXTERNAL NAME 'Frame.searchButton'
BEGIN

INSERT INTO SAMPLEONLY("FULLNAME", "ADDRESS") 
  VALUES (FULLNAME , ADDRESS);  

  COMMIT;

END;
execute metodu
Select yapan stored procedure çağrısını işletir. Şöyle yaparız.
cst.execute();
executeUpdate metodu
Veritabanına güncelleme yapan (insert,update) stored procedure metodunu işletir.
// execute store procedure
cst .executeUpdate(); 
getArray metodu
Şöyle yaparız.
cs.registerOutParameter (4, OracleTypes.ARRAY,"NUMBER_TAB_TYPE");
...
cs.execute();
java.sql.Array arr = cs.getArray (4);
İçindeki nesneleri Java nesnelerine çevirmek için şöyle yaparız.
BigDecimal[] projDetailsId = (BigDecimal[])arr.getArray();
registerOutParameter metodu
Şöyle yaparız.
cts.registerOutParameter(2, Types.INTEGER);
Sonucu şöyle alırız.
int result = cts.getInt(2);
Şöyle yaparız.
cst.registerOutParameter(2, Types.VARCHAR);
Şöyle yaparız.
cst.registerOutParameter(2, java.sql.Types.ARRAY);
Sonucu getArray () ile alırız.
Örnek
Veritabanından en fazla 1000 tane uzunluğunda dbms_output dizisi çekmek için şöyle yaparız. Burada dbms_output ile debug satırları alınıyor.
try (Connection c = DriverManager.getConnection(url, properties);
  Statement s = c.createStatement()) {

  try {
    s.executeUpdate("begin dbms_output.enable(); end;"); //Enable output
    s.executeUpdate("begin dbms_output.put_line('abc'); end;"); //Add msg to debug
    s.executeUpdate("begin dbms_output.put_line('hello'); end;"); //or call stored proc
    s.executeUpdate("begin dbms_output.put_line('so cool'); end;");

    try (CallableStatement call = c.prepareCall(
      "declare "
      + "  num integer := 1000;"
      + "begin "
      + "  dbms_output.get_lines(?, num);"//Get output      + "end;"
    )) {
      call.registerOutParameter(1, Types.ARRAY, "DBMSOUTPUT_LINESARRAY");
      call.execute();

      Array array = null;
      try {
        array = call.getArray(1);
        System.out.println(Arrays.asList((Object[]) array.getArray()));
      }
      finally {
        if (array != null)
          array.free();
      }
    }
  }
  finally {
      s.executeUpdate("begin dbms_output.disable(); end;"); //Disable output
  }
}
setArray metodu
java.sql.Array tipinden parametre alır. Parametreyi yaratmak için şöyle yaparız.
Integer[] id = {2, 14, 4};
Array array = connection.createArrayOf("INTEGER", id);
Örnek
Şöyle yaparız.
cst.setArray(1,...);
setInt metodu
Şöyle yaparız.
int Id = ...;
cst.setInt(1, Id);
setString metodu
Şöyle yaparız.
String username = ...;
cst.setString(3, username);



Hiç yorum yok:

Yorum Gönder