6 Haziran 2008 Cuma

JSP - Oracle - Array Gonderme

Bazı durumlarda JSP sayfamızdan Oracledaki procedurumuze array gondermek isteyebiliriz. Bunun icin ilk olarak yapmamız gereken Oracle'da bir array type tanımlamak.

CREATE OR REPLACE TYPE INTEGERARRAYTYPE_TY AS TABLE OF INTEGER

Daha sonra Procedurumuzun parametre kismina bu array tipinde bir degisken yazacagiz:


CREATE OR REPLACE FUNCTION INSERT_LINE(vLineCode IN VARCHAR, arrStations IN INTEGERARRAYTYPE_TY)

Daha sonra JSP sayfamızdan Array ile ilgili işlemleri yapmamız gerekiyor.
İlk olarak jsp sayfamızda ilgili sınıfları import edelim:


<%@page language="java" import="oracle.sql.ARRAY"%>
<%@page language="java" import="oracle.sql.ArrayDescriptor">


Daha sonra arrayimizi olusturup, import ettigimiz sinifa ait nesneleri olusturalim.


Integer arrStations[] = new Integer[3];
arrStations[0]= 0;
arrStations[1]= 1;
arrStations[2]= 2;

ArrayDescriptor desc1 = ArrayDescriptor.createDescriptor("INTEGERARRAYTYPE_TY",Conn);
ARRAY input1 = new ARRAY(desc1, Conn, arrStations);


ArrayDescriptor nesnesi olustururken, createDescriptor metodunu kullaniyoruz. Bu metod 2 parametre aliyor. İlki bizim Oracle da olusturdugumuz integer array tipi, digeri ise jspden oracle'a baglanirken kullandigimiz Connection sınıfından türetilmis Conn nesnesi.

Conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:XE",
"IETT","****");

Buraya kadar olan islemlerde arrayimiz jsp sayfamizda olustu. Sirada, bunu gonderme islemi var.



CallableStatement cstmt = null;
String sql = "{call ? := INSERT_LINE(?,?)}";
try
{
cstmt = Conn.prepareCall(sql);
cstmt.setString(2,strLineCode_tr);
cstmt.setArray(3,input1);
cstmt.registerOutParameter(1,Types.INTEGER);
int b = cstmt.executeUpdate();
int sonuc = cstmt.getInt(1);

}
catch(Exception e) {}
finally {}


CallableStatement kullaniyoruz burada. Bu sinifin setArray fonksiyonunu cstmt nesnesinden cagiriyoruz. Bu metod 2 parametre aliyor. Ilki parametre sirasi, insert_line oracle fonksiyonunun 2.parametresi oluyor bu array. Return degeri ilk parametre oldugu icin dogal olarak sirasi 3 oluyor. setArray metodunun 2.parametresi ise ARRAY sınıfından türetilen nesne oluyor. Bu da yukarıda önceden ürettiğimiz ARRAY sınıfına ait input1 nesnesi.

Bu sekilde arrayimizi oracleda bir fonksiyona gondermis olduk. Biraz zahmetli bir ise benziyor. Eger daha performansli ve kolay bir yol bulursam yine paylasacagim.

Hiç yorum yok:

Yorum Gönder