بسم الله الرحمن الرحيم

مقدمه لJava Derby :
أحد أهم الإضافات في جافا 6 هو استخدام قاعده البيانات Derby والتي أصبحت تأتي مع نسخ الجافا الجديده (بالرغم من أني لم أشاهدها ضمن نسخه جافا 6 التحديث 11 !) ، هذه القاعده كانت في الأساس ملك لشركه CloudScape ثم أشترتها شركه informix بالكامل ،وقامت IBM بشراء المنتج من informix وبعدها قدمت IBM هذا المنتج لApache Software Foundation بإسم Derby ، وأخيرا قامت SUN في (2006) بوضع هذا المنتج مع أي نسخه جافا في المسار التالي: C:\Program Files\Java\jdk1.6.0\db . وأصبحت تطلق عليه أحيانا Java DB .
هذه القاعده هي من النوع العلائقي Relational Data Base وهذا يسمح بأن تكون هناك علاقات بين الجداول في القاعده باستخدام Primary Key/Foreign Key وهي مكتوبة بالكامل بلغه جافا . ثانيا هذه القاعده يمكن أن تعمل في طورين مختلفين الأول هو بأن تستخدم القاعده لتخزين البيانات في التطبيق Embedded Database والطور الأخر وهو أنها يمكن أن تستخدم في طور Client/Server حيث تحمل القاعده في السيرفر الذي ينتظر الclients من اللإتصال لهذه الdata base .
من ميزات هذه القاعده وهي أنها صغيره جدا حيث تبلغ حجمها حوالى 2 ميغا فقط .اضافه الى أن هذه القاعده RDMBS تمتاز بسهوله الإستخدام والإداره Administration ، وأخيرا تسهل عملية توزيع المنتج Deployment حيث تدعم هذه القاعده حفظ البيانات في شكل ملف جار JAR File وبالتالي سهوله نشر الملف.
أعتقد أن مميزات كهذه كافيه لأن تبدأ باستخدام Derby في أي مشروع من النوع الصغير أو المتوسط ،، وقبل أن نبدأ الأن بالحديث عن كيفية استخدام هذه القاعده يجب تحميلها لمن لم يجد تلك القاعده كما في حالتي من موقع Apache على هذا الرابط من موقع sun :
http://developers.sun.com/javadb/downloads/index.jsp
أو من موقع أباتشي :
http://db.apache.org/derby/derby_downloads.html
Installing Derby :
بعد تحميلك القاعده وفك الضغط قم بوضعها في أي مسار وسنقوم بعدها بضبط متغيرات النظام حتى يراها سطر الأوامر ، عن نفسي وضعتها في المسار التالي : C:\Program Files\Java\
بعد ذلك نقوم بضبط المسار class path من متغيرات النظام Environment Variable وسوف نستخدم ملفين رئيسين (موجودين في المسار C:\Program Files\Java\db-derby-10.5.1.1-bin\lib) الأول هو derby.jar وهو يحتوي على JDBC Driver والملف الثاني derbytools.jar وهو يحتوي على عده أدوات أهمها الأداه ij (أختصار ل Interactive JDBC Scripting Tool) ويمكن من خلال هذه الأداه انشاء وأداره قاعده البيانات .
بالتالي سوف نضيف المسارين التاليين في classpath :
C:\Program Files\Java\db-derby-10.5.1.1-bin\lib\derby.jar
C:\Program Files\Java\db-derby-10.5.1.1-bin\lib\derbytools.jar
يحتوي الملف bin على ملف bat يصل لهذه الأدوات مباشره (يقوم بتنفيذ الأمر java org.apache.derby.tools.ij) ويمكن وضعه أيضا في path :
C:\Program Files\Java\db-derby-10.5.1.1-bin\bin
للتأكد من عمل كل شيء علي ما يرام ، يتم تنفيذ البرنامج sysinfo والذي يعرض معلومات عن الJDK الموجود في الجهاز :
C:\>java org.apache.derby.tools.sysinfo
اذا ظهر exception فهذا يعني أن ملفين الjar السابقيين غير موجودين في الclasspath .ويجب وضعهم كما بينا سابقا ،، ويمكن استخدامهم مباشره عند تشغيل البرنامج باستخدام المعامل -classpath ولكن يفضل التعديل في الEnvironment Variable .
Using Derby :
نبدأ الأن بأول جوله لإستكشاف القاعده Derby ، ومن سطر الأوامر cmd.exe قم بتشغيل الأداه ij ، بعد ذلك سنقوم بانشاء القاعده ArabTeam وسوف تكون في المسار : C:\MyDb\ArabTeam وسوف يحتوي هذا المسار على عده ملفات تكون لنا القاعده...
C:\>ijij version 10.5 ij> connect 'jdbc:derby:/MyDB/ArabTeam;create=true' ; ij>
سنصنع الأن عده جدوال للتجربه وسنقوم بوضع الأوامر التالية في ملف نسميه go.sql :
CREATE TABLE USERS ( FIRST_NAME VARCHAR(30) NOT NULL, LAST_NAME VARCHAR(30) NOT NULL, EMP_NO INTEGER NOT NULL CONSTRAINT EMP_NO_PK PRIMARY KEY ); CREATE TABLE PC ( TYPE_NAME VARCHAR(10) NOT NULL, SERIAL VARCHAR(50), OS VARCHAR(20), EMP_NO INTEGER, CODE_NO INTEGER NOT NULL CONSTRAINT CODE_NO_PK PRIMARY KEY );
سنقوم الأن بتشغيل الملف السابق لكي يصنع لنا هيكل القاعده باستخدام الأمر run :
run '/MyDb/go.sql' ;ij> CREATE TABLE USERS (
FIRST_NAME VARCHAR(30) NOT NULL,
LAST_NAME VARCHAR(30) NOT NULL,
EMP_NO INTEGER NOT NULL CONSTRAINT EMP_NO_PK PRI
MARY KEY
);
0 rows inserted/updated/deleted
ij> CREATE TABLE PC (
TYPE_NAME VARCHAR(10) NOT NULL,
SERIAL VARCHAR(50),
OS VARCHAR(20),
EMP_NO INTEGER,
CODE_NO INTEGER NOT NULL CONSTRAINT CODE_NO_PK PRIMARY KEY
);
0 rows inserted/updated/deleted
ij>
ولإستعراض بنية الجدول يمكن أستخدام الأمر describe tableName :
ij> describe USERS ; COLUMN_NAME |TYPE_NAME|DEC&|NUM&|COLUM&|COLUMN_DEF|CHAR_OCTE&|IS_NULL& ------------------------------------------------------------------------------ FIRST_NAME |VARCHAR |NULL|NULL|30 |NULL |60 |NO LAST_NAME |VARCHAR |NULL|NULL|30 |NULL |60 |NO EMP_NO |INTEGER |0 |10 |10 |NULL |NULL |NO 3 rows selected
سنقوم الأن باضافه بيانات للجدول عن طريق أمر الsql المختص بالإدخال INSERT وسنضعه داخل الملف in.sql :
INSERT INTO USERS VALUES('Wajdy','Essam',2);
INSERT INTO USERS VALUES('Ahmed','Ali',5);
INSERT INTO PC VALUES('Desktop','0654505','Windows',2,1);
INSERT INTO PC VALUES('Desktop','036545d','Linux',2,2);
INSERT INTO PC VALUES('Laptop','010120101','MAC OS',5,3);بنفس الأمر السابق run سنقوم بتشغيل الملف In.sql لكي يدخل بيانات للجدول ، وأخيرا سوف نرى الحقول عن طريق أمر SELECT :
ij> SELECT * FROM USERS ; FIRST_NAME |LAST_NAME |EMP_NO ------------------------------------------------------------------------- Wajdy |Essam |2 Ahmed |Ali |5
Java & Derby :
سوف نتصل الأن بهذه القاعده من خلال برنامج بسيط بجافا ،، كما يبين الكود التالي :
// Test ArabTeam DB
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class Demo {
public static void main (String args[]) {
Demo app = new Demo();
app.showUserTable();
}
public void showUserTable () {
try {
String driver = "org.apache.derby.jdbc.EmbeddedDriver";
Class.forName(driver);
String dbName = "/MyDB/ArabTeam";
String connectionURL = "jdbc:derby:" + dbName;
Connection conn = null;
conn = DriverManager.getConnection(connectionURL);
Statement statement = conn.createStatement();
ResultSet rs = statement.executeQuery("SELECT * FROM PC");
while ( rs.next() ) {
System.out.print(rs.getString(1) + " " );
System.out.print(rs.getString(2) + " " );
System.out.print(rs.getString(3) + " " );
System.out.print(rs.getString(4) + " " );
System.out.print(rs.getString(5) + "\n");
}
rs.close();
statement.close();
conn.close();
}
catch ( Exception e ) {
System.out.println(e);
e.printStackTrace();
}
}
}في المثال السابق اتصل البرنامج بالقاعده عن طريق الEmbedded Derby JDBC driver حيث يتم تحميل الderby engine الى الjvm اثناء العمل مثلها مثل التطبيق العادي ، كما يوضح ذلك الشكل التالي :

Derby Embedded Architecture
بالنسبة للطور الثاني Client/Server فيحتاج الى derbynet.jar أن يكون موجود في الclasspath ، الرابط التالي يوضح كيفية اعداده :
Using Derby in Netbeans :
أيضا نسخه Derby تأتي مع الNetbeans ويمكن استخدامها بشكل مباشر .. الروابط التالية تبين ذلك :
Get Started with Java DB in your Java Console Applications
Working with the Java DB (Derby) Database in NetBeans IDE
Using Java DB in Desktop Applications
كانت هذه تجربة بسيطة لي للتعامل مع derby أحببت أن أشارك بها أخوتي ،، ومن سبق أن عمل عليها أرجوا وضع ملاحظاته وأرائه حول Derby ، بالنسبة لي لاحظت بطئ في التعامل مع القاعده وحتى الأداه ij كونها كلها مكتوبة بالجافا ..
والسلام عليكم ورحمه الله وبركاته ،،

