Sybase ASE Java sınıfı nasıl kullanılır, MD5 fonksiyonu nasıl eklenir

21 April 2008 – 3:03

Sybase ASE’nin pek kullanılmayan özelliklerinden biri de Java sınıflarını çalıştırabilme özelliğidir. Sybase veritabanı sunucusuna Java sınıflarını kullanarak veri erişimi ve MD5 hesaplayabilme yeteneği ekleyeceğiz.

Sybase’de Java’nın özellikleri sınırlı bir kullanıma sahiptir. Kullanılan sanal makina Java 1.1 ile derlenmiş kodları çalıştırabilir. Bunun anlamı yüklenecek sınıfların 1.1 olarak derlenmiş olması gerektiğidir. Bu sanal makine içerisinde java.io paketi (GÇ fonksiyonları) kullanılamaz, Thread açılamaz, grafiksel gösterimler yapılamaz. Buna karşılık JDBC kullanılarak veriler değiştirilebilir ve tabii ki hesaplamalar yapılabilir.

İlk örneğimiz JDBC’nin üzerinde çalıştığı sunucuya bağlanması ile kullanımı. Bu sayede bir sorgu içerisinde kullanmak için normalde prosedür ve cursor kullanarak yapacağımız işlemleri daha basitleştirmiş oluyoruz:

public class Test {
public static java.sql.Timestamp sistemTarihi() throws java.sql.SQLException {
java.sql.Connection con = java.sql.DriverManager.getConnection("jdbc:default:connection");
java.sql.Statement stmt = con.createStatement("select sistemTarihi from sistemTablosu");
java.sql.ResultSet rs = stmt.executeQuery();
if (rs.next()) {
return rs.getTimestamp(1);
}
return null;
}

Manyak Not: Bu sınıfta sadece URL değişimi yapıp Jconnect URL’i yazarsak başka bir sunucuya da bağlanabiliriz.

Yazdığımız kodu sunucuya önce derleyip, jar halinde yüklüyoruz. Yükleme işlemi tek tek sınıf halinde de yapılabilir. Derleme işini daha önce de belirttiğimiz gibi Java 1.1′e göre özel parametrelerle yapmamız gerekir. Jar haline getirme işi ise her zaman yaptığımız gibi:
javac.exe -source 1.3 -target 1.1 *.java
jar.exe cf0 test.jar Test.class
%SYBASE%\%SYBASE_OCS%\bin\instjava -STESTSERVER -Usa -P -Dtestdb -f test.jar -j test

Yazdığımız kodu sunucuya tanıtıyoruz:
create function sistemTarihi() returns datetime
called on null input nondeterministic exportable
language java parameter style java
external name 'Test.sistemTarihi()'

Bu tanımlama ile artık şu sorguyu yazabiliyoruz:

select * from islemler where islemTarihi = sistemTarihi()

Sybase ASE’ye statik bir fonksiyonu kullanmayı öğrendik. Şimdi ise durum bilgisi tutabilen bir sınıf yükleyeceğiz. Bu sayede istenilen sayıda veri üstüste eklenerek bir MD5 hesaplanabilecek.

İlk iş olarak Java 1.1 ile derlenebilen bir MD5 fonksiyonu bulmamız gerekiyor. Bunun için bir MD5 uygulaması indiriyoruz. Bu uygulama içerisinden MD5 ve MD5State sınıflarını kullanacağız. Bu sınıflardaki dosya okuma işlemlerini ve geri kalan sınıfları ise silebiliriz. Bu java dosyalarının aynı dizinde olduğunu düşünerek derleme, paketleme ve yüklemeyi yapıyoruz:

javac.exe -source 1.3 -target 1.1 *.java
jar.exe cf0 test.jar com/*

Bir sınıfı kullanmak için fonksiyonlarını tanımlamaya gerek yoktur. Hemen kullanabiliriz:

declare @md5 "com.twmacinta.util.MD5"
select @md5 = new "com.twmacinta.util.MD5"()
select @md5 = @md5>>"Update"('a')
select @md5>>Final()

Yukarıdaki kod a harfinin MD5 hesaplamasını yapıp select eder. Eğer MD5 hesaplamasını bir fonksiyon halinde yapmak istersek Test sınıfımıza bir metod ekleyerek bunu hesaplatabiliriz:

public static byte[] calcMD5(String s) {
MD5 md5 = new MD5();
md5.update(s)
return md5.Final();
}

Bu fonksiyonu sorgularımızda tanımlama yaparak ya da yapmayarak kullanabiliriz. Tanımlamazsak:
select convert(varchar(50), "Test".testString('aa'))

Bir SQL fonksiyonuna tanımlamak için ise:

create function MD5(s varchar(255)) returns varbinary(32)
called on null input deterministic exportable
language java parameter style java
external name 'Test.calcMD5(String)'

Son olrak referans olmak üzere Java sınıflarına karşılık gelen Sybase veri tiplerinin listesini çıkartalım:

SQL type Java type
char, varchar, text, nchar, nvarchar,
unichar, univarchar, unitext
String
numeric, decimal, money, smallmoney java.math.BigDecimal
bigint, unsigned bigint, java.math.BigInteger
bit boolean
tinyint byte
smallint short
integer, unsigned smallint int
unsigned int long
real float
float, double double
date java.sql.Date
time java.sql.Time
datetime, smalldatetime java.sql.Timestamp
binary, varbinary byte[]
image java.io.InputStream

Yüklenilen jar sql üzerinden kaldırılabilir. Tanımladığımız fonksiyonları drop function ile sildikten sonra şu komut ile kaldırılabilir:

remove java jar test

MD5 hesaplamasını gerçekleştirdik ve Sybase’de henüz bulunmayan stored function özelliğini ekledik.

Manyak mutlu kodlamalar…

Vinnie

EkleBunu Sosyal Paylaşım Butonu

Post a Comment