خلاصه:
JudoScript یک زبان نوشتاری جاوا است که ساده و قدرتمند بوده و پشتیبان تابعی مختص دامنه 4GL-Link (domain-specific) را دارد و به کاربران اجازه میدهد، مشخص کنند چه کاری میخواهند انجام دهند و چه زمانی برنامههای الگوریتمی لازم میباشند.
این پشتیبان تابعی، جودواسکریپت را در یک دسته جدید از زبانهای نوشتاری تابعی قرار میدهد، مانند هر زبان نسل چهارم. جودواسکریپت روی مشخص کردن اهداف و آمادهسازی راهحلهای خودکار (الگوریتمها)، برای عملی کردن اهداف، تاکید دارد. جودواسکریپت از نحوی شبیه نحو جاوااسکریپت و مدل برنامه نویسی در آن استفاده میکند، ولی قدرت محاسبه بیشتری در ساختار دادههای کامل دارد. این زبان همچنین در الگوهای جاوا بسیار قوی است، بنابراین به همه منابع قابل خواندن جاوا، دسترسی دارد. هماهنگی تمام این خصیصهها باعث ایجاد قدرت، بهرهوری و ظرافت زیادی در برآوردن نیازها شده است.
پردازش داده یکی از مهمترین کاربردهای جودواسکریپت است. امروز برنامههای کاربردی با فرمتهای دادهای خاص و کامل، مثل پایگاه دادههای رابطهای XML، (Standard Generalized Markup Language) SGML، انواع دادههای انتزاعی مثل EJBها (Enterprise JavaBeans)، سرویسهای وب و فایلهای مسطح کار میکنند.
جودو اسکریپت برای پردازش دادهای چند فرمتی و چند منبعی کاملا ایدهآل است. این دو بخش روی (Java Database Connectivity) JDBC جودواسکریپت تمرکز میکنند، زبان جودواسکریپت را معرفی مینمایند و پردازش داده با J2EE را شرح میدهد. بخش اول پشتیبانی نوشتاری JDBC جودواسکریپت را شرح میدهد.
JDBC Scripting به چه معناست؟
JDBC یک استاندارد APIجاوا برای دستیابی به پایگاههای داده SQL است. از JDBC برای دستیابی به پایگاه داده در جهت برطرف کردن نیازهای مشتریان پایگاه، استفاده میشود. نکته قابل توجه اینجاست که شرکتهای اصلی (Relational Database Management System) RDBMS دستورالعملهای JDBC خالص را برای تولیدات خودشان تهیه میکنند، بنابراین یک ابزار مفید اسکریپتنویسی JDBC میتواند به سادگی امتیازی از این قابلیت را بگیرد. تمام چیزی که نیاز دارید، JDBC URL و فایل JDBC درایور میباشد که در classpath وجود دارد. شما میتوانید همزمان به چند پایگاه داده برای پردازش داده ناهمگن وصل شوید.
از نظر فلسفی، اسکریپتنویسی JDBC بخشی از یک ایده بزرگ است: استفاده از پایه جاوا به عنوان یک زبان شیگرا و برای اجرای منظم محاسبه کارها. زبان جودواسکریپت به این منظور طراحی گردید.
امروزه شرکتهای بزرگ نرمافزاری فقط از پایگاه دادههای رابطهای استفاده نمیکنند و قالب دادههای قویتر مثل XML وSGML و انواع دادههای انتزاعی مثل Enterprise EJB و سرویسهای وب به خوبی همان فرمتهای قدیمی مثل فایلهای هموار و صفحات گسترده عمل میکنند.
اکنون ابزارهای مختلفی را برای پردازش، گزارش گیری و پرسوجوی دادهها به کار میبرند که نمونههایی از مزیتهای بدیهی آنها به صورت ذیل میباشد:
1. شما میتوانید هر پردازشی را با هر منبع دادهای با هر فرمتی به صورت همزمان انجام دهید.
2. دسترسی به راهحلها و نتایج درست، سریعتر است
3. ابزارهای کمی برای یادگیری، نصب، پیکربندی و راهاندازی مورد نیاز است
4. دارا بودن یک ابزار رایگان و منفرد ارزانتر تمام میشود
5. فرآیند حل مشکل آسانتر میباشد، زیرا میتوانید بدون نگرانی در مورد مسائل محیطی، تعویض زمینه (context switching) و یکپارچگی کامپوننتهای نامتجانس مشکل را بررسی کنید.
جاوا در حد یک ابزار عملی تنزل کرده و این بدان علت است که به عنوان یک زبان سیستمی، برای ایجاد سیستمهای نرمافزاری شیگرا طراحی شده است.
یک وسیله نوشتاری خوب باید خصیصههای تابعی انتزاعی برای کاربران و برای بهتر انجام شدن کارها داشته باشد و همچنین قدرت برنامهنویسی آن کم نشود.
از طرفی SQL (محض) خیلی محدود شده، چرا که ابزارهای پرسوجو ساده خیلی ضعیف عمل میکنند. جودواسکریپت ساختارهای دادهای زیادی دارد و برای کامپوننتهای جاوا خیلی قوی است. شما میتوانید از جودواسکریپت برای دریافت داده از پایگاه داده A، محاسبه برخی نتایج میانی در حافظه و پایان کار با پایگاه داده B، استفاده کنید. اگر از اوراکل استفاده میکنید، حتما نیاز بر استفاده از PL/SQL، پیوندهای پایگاه داده و جداول موقت خواهید داشت. جودواسکریپت به راحتی میتواند با فایلهای ساده، صفحات گسترده، XML، SGML، EJBS و غیره کار کند.
پشتیبانی JDBC در جودواسکریپت:
جودواسکریپت مجموعهای از پشتیبانهای نحوی را برای اجرای SQL دارد. دستورات زبان تعریف داده (DDL) و زبان دستکاری داده (DML) میتوانند به صورت منفرد یا به صورت گروهی یا دستهای اجرا شوند. شما میتوانید پروسیجرها را (روال) با پارامترهای -in، -out و in-out فراخوانی کنید. مثال ساده زیر را ببینید:
connect to 'jdbc:oracle:thin:@dbsvr:1521:dbname', 'user', 'pass';
// Create table and insert a few rows.
executeSQL {
CREATE TABLE emp(emp_no INTEGER PRIMARY KEY,
first_name VARCHAR(100),
last_name VARCHAR(100),
birth_date DATE,
salary NUMBER);
CREATE INDEX emp_fname ON emp(first_name);
CREATE INDEX emp_lname ON emp(last_name);
INSERT INTO emp(emp_no,first_name,last_name,birth_date,salary)
VALUES(100, 'Jim', 'Billups', to_date('1954-1-3','yyyy-mm-dd'), 86500.0);
INSERT INTO emp(emp_no,first_name,last_name,birth_date,salary)
VALUES(101, 'Linda', 'Jordan', to_date('1980-7-24','yyyy-mm-dd'),45250.0);
}
// Query and print out rows.
executeQuery qry:
SELECT emp_no, first_name, last_name, salary
FROM emp
WHERE salary < 50000
ORDER BY salary ASC
;
while qry.next() {
println '#', qry[1], ' ', qry.last_name, ', ', qry.first_name, ': ',
qry.salary;
}
disconnect(); // From database
این برنامه به پایگاه داده وصل شده، تعدادی از دستورات تعریف و دستکاری داده SQL را اجرا کرده و نهایتا یک پرسوجو را برای چاپ نتایج در جدول اجرا میکند. در بخش executeQuery، متغیر qry بخشی ازJava.Sql.ResultSet است، پس شما میتوانید متد next() را فراخوانی کنید، ستونها در یک سطر میتوانند با اسامی یا شاخصهایشان مورد دستیابی قرار گیرند. مثال بعدی نشان میدهد که چطور متغیرها میتوانند محدود و مقید (bound) شوند: در این مثال بخشهای مربوط به اتصال به پایگاه داده حذف شده است:
// Prepare a SQL
prepare qry:
SELECT emp_no, first_name, last_name, salary
FROM emp
WHERE salary < ?
ORDER BY salary ASC
;
// Run the query
executeQuery qry with @1:number = 5000.0;
while qry.next() {
println '#', qry[1], ' ', qry.last_name, ', ', qry.first_name, ': ',
qry.salary;
}
در کد بالا، ما از متد toCsv()آرایهها استفاده کرده و یک تابع بینام را برای متغیرها به کار میبریم. نتیجه عبارت SQL به این صورت است:
IN (‘Olajuwan’, ‘Yao’).
مثالهایی را دیدیم که عبارتهای SQL را به طور خودکار ساخته و SQL را مستقیما اجرا میکند. حالت دیگر از اجرای SQL به صورت دستهای است.
اتصالات پایگاههای داده
شما به صورت زیر به یک پایگاه داده وصل میشوید:
cannect mycon to ‘jdbc:oracle:thin:@dbsvr:1521:dbname’, ‘user’, ‘pass’;
اتصال ایجاد شده در متغیر mycon ذخیره شده است. اگر نام متغیر اتصال حذف شود، جودواسکریپت از متغیر سراسری از پیش تعریف شده $$con استفاده میکند. میتوانید صفات اتصال را مثل زیر مشخص کنید:
connect mycon ( autoCommit=false ) to
'jdbc:oracle:thin:@dbsvr:1521:dbname', 'user', 'pass';
چطور جودواسکریپت، درایور JDBC را بارگذاری میکند؟ جودواسکریپت لیستی از اسامی کلاسهای درایور JDBC و پیشوندهای URL آنها را دارد. مثلا وقتی جودواسکریپت، اوراکل را در Jdbc:oracle:… ببیند، کلاس درایور JDBC آن یعنی oracle.jdbc.driver.JdbcDriver را بارگذاری میکند. اگر یکی از درایورها در لیست نباشد، به عنوان یک صفت درایور مشخص میشود یا به شیوه قدیمی جاوا بارگذاری میگردد:
// JudoScript style
connect (driver=‘my.db.jdbc.driver’) to 'jdbc:….’, “/”;
// Java style
(java::class). forName (‘my.db.jdbc.driver’);
یک شیء اتصال یک شیء java.Sql.Connection است. شرط use در تمام دستورات اجرایی Sql مشخص میکند که کدام اتصال باید استفاده شود:
executeSQLuse mydb {…}