بسم الله والحمد لله والصلاة والسلام على رسول الله
اليوم إن شاء الله بنات هنحاول نُجمّل الموضوع ال
database من ناحية عملية بإذن الله تبارك وتعالى ومن
ثم هنعرج على ربط الـ graphical user interface مع
يعني كيف الـ application يجمع الثاني الثاني يجمع ال
database أو يكون مصدرها database والـ application
تبع graphical user interface وإن كنت هركز على شغلة
اللي هي الـ Jtable في محاضرة اليوم إن شاء الله
تبارك وتعالى طبعًا من البداية أحدد معك من الصفر في
الـ application احنا كنا
سابقا اتكلمنا أنه لازم أنت تعملي download لل
driver الخاص
Java Database Connectivity Project 2 بتعملها
download من الموقع الخاص بالشركة وعلى سبيل المثال
أنا بدي أفتح الـ driver أو الـ browser عندي هان لو
أنا بدي أنزله لـ MySQL لـ MySQL أنا already نزلته
سابقا وموجود عندي هان على الـ folder هي الملف jar
file بس هورجيك هنا كيف أنت لو بدك تعملي له download
عشان تقدر تربط الأمور صح الآن أنت بمجرد أنك تبدأ
application احنا بدأنا project جديد قلنا الخطوة
رقم واحد أني بدي أعمل download من الـ browser
anyway بدي أروح أربط أو أضيف للـ driver هذا اللي هو
الـ jar file على الـ library اللي عندي مفتاح ال
mouse اليمين على الـ project build path add external
archives مفتاح الموسيقى اليمين أو من خصائص ال
project build path add external archive وبتحدد
المسار وين الملف هذا موجود بالـ folder أنا هنضيفه
هنا هي الملف حسب المسار اللي أنا خزّنته فيه open مش
هتحسي ولا شغلة جديدة اللي غير صار فيه عندك a new
library عنوانها referenced library واضف عليها ال
jar file اللي موجود عندك هذه الخطوة الأساسية في ال
application اللي عندك الخطوة .. الآن بعد هيك بيصير
كله في داخل أو شغل .. شغل أو داخل الـ code اللي أنت
بدك تعتمدي عليه هذه الـ class الـ .. دي بي connect بدي
أسميه
وأنا بدي أوريك الـ database تبعتي المفروض الـ browser
يكون اشتغل وخلاص هاي مثلًا بدي لـ mysql mysql java
database connectivity مباشرة قال ليش driver وهي
mysql download connector وديني على الـ connector
مباشرة
وبقدر هان لو طلعتي هيسألك ايش الـ platform تبعتك
هيو Connector DevReference Connector J8 إلى آخره
في الآخر تحدد الـ platform اللي أنت بتشتغلي عليها ال
platform انتبهت وبتقولي له ايش download هنزلك
ياملة في مضغوط بتفكيه وبتردّ فيه على الرابط اللي
عندك الـ MySQL اللي عندي أنا localhost الـ database
تبعتي شغالة وبدي اسمها testdb هيها وفيها الـ tables
الـ table اللي اسمه students فيه مجموعة من الطلبة
أو فيه مجموعة من الـ attributes أربعة attributes أو
خمسة student id name gender و gba أو department و
gba تمام يعني أنا الآن جاهز أن أبدأ أكتب الـ java
أو أوصل العناصر مع بعضها احنا قلنا بدي أبدأ في
عملية الـ registration class
.for name وقلنا
مع كل class في driver خاص اللي هو تبع الـ mysql.com
.mysql وإحنا قلنا ايش بدنا ايش نحفظه dot java
database connectivity dot driver يارب ما أكون غلط
فيه أنا الآن بنتأكد من هل آن كمان مرة بقولك أنت
ما تحفظيهوش مش لازم أن احنا ايش نحفظه لو بدنا نرجع
بشكل سريع للـ slides من بداية خالص عن الـ connection
بس
فرجت معايا الـ capital letter اللي في كلمة driver
فأنا ممكن أريح نفسي وأعملها copy و paste عشان
تكون الأمور في الـ safe side إن شاء الله تمام هذه
لازم تكون ضمن الـ try لأنها بتعمل erase ل
exception ما فيش عندي مشكلة الخطوة الثانية بدي أبدأ
في عملية الـ connection الـ connection بدي آخد
object من نوع connection بدي أسميه C على سبيل
المثال قلنا من الـ driver manager dot
GET CONNECTION وقلنا مع الـ GET CONNECTION بيطلب
مني تلت شغلات الـ URL ممتاز
الـ URL هو كلهم طبعًا بياخدهم as a string تمام؟
قلنا الـ URL لكل language أو لكل database
management system اللي لها URL خاص فيها هذه الـ
MySQL
بس الآن هذه بدها مني ايش؟ بدي أغيّر الـ values اللي
موجودة عندي هنا ببدأ من عند الـ hosting اسم الجهاز
أو الـ server اللي عليه الـ database اللي عندي أنا
الـ database موجودة على الـ local server على ال
local device اللي أنا بشتر عليه الـ local machine
1270001
الـ board بقدر أنا أجيب الـ board وأتأكد منه هيّه
بروح على الـ MySQL شغالة على الـ port 3306 اسم
الـ database قبل قليل testdb وهذا بيكون as a string
طبعًا هذا الـ parameter الأول الـ parameter الثاني الـ user
name root ما غيرتش في الـ password عندك ولا حاجة
الثالث بدون password وخلصت هيك أن أكون حصلت على ال
connection والـ connection تبعتي صحيحة ما فيش فيها
أي مشاكل خطوة رقم تلاتة ادني أو احصل من ال
connection object على object statement أو
statement object statement S
تساوي connection اللي هي C dot create statement
وقلنا مع الـ create statement ممكن أنا في حالة ال
result set أو أحدد الـ result set الـ style تكون
scrollable أو تكون updatable حسب الحاجة اللي أنا
بدي أشتغل عليها by default هي not scrollable تمام
لو أنا حصلت على result set و not updatable فأنا
مرة واحدة اللي أنا شغال هروح أقوله result set dot
أنا قلنا في الأول بتكلم على scrollable type scroll
insensitive أو sensitive قلنا sensitive يعني لو
صار في أي تغيير على الـ database وأنا بشتغل على
result set أشوف التغيير هذا طالما الـ result set is
open والـ parameter الثاني الـ parameter الثاني ايش قلنا؟
أكون concurrent result set dot concurrent وقلنا
خليها ايش updatable
وبهيك صارت أن أنا الآن عند الـ statement جاهزة
وما فيش فيها أي مشكلة الخطوة بعد هي كانت كل شغل
بيتركز على صياغة الـ select statement أو الـ SQL
اللي أنا بدي أشتغل عليها شو تكون وطبعًا هذه بتكون
من خلال أو بتعرف as a string SQL بدي أسميها
وهنا بدك تكتبي الـ select statement أو الـ insert و
الـ update والـ delete حسب حاجتك حسب حاجتك Ctrl
Z
عشان تشتغلي على نفس الـ exception عشان تشتغلي على
exception يعني الآن بدي أبدأ مع الـ select هأقوله
select star
from الـ students ولاحظي وين تم تحديد اسم الجدول
في داخل الـ statement الـ SQL لسه في داخل الـ SQL
بعيدًا عن الـ connection الـ connection مطلب منك بس
اسم الـ database اسم الـ database تمام وقلنا احنا
مع الـ statement في عندي تلت جمل الأولى execute
وقلنا
هذه بترجع الـ boolean value وفي عندي execute update
execute
update execute
update وهذه ستعود لي integer
تمام؟ وعندي الأخيرة اللي هي execute query و
بترجع لي بـ data من نوع result set الآن مين بتحدد مع
مين اشتغل معاهم هدول طبيعة الـ SQL اللي موجودة
طبيعة الـ SQL اللي موجودة الآن إذا كانت هي select
statement معناته بترجعي بـ data ترجع بـ data وال
data هذه بتكون as a virtual table نتخيلها هيك
بمعناته بتلزم نـ execute query اللي هي هترجع ليه
بالـ data أو من result set object result set R
بدها تساوي طيب والتنتين اللي فوق لو كانت اللي فوق
DDL data definition language بعتمد مع الـ execute
أسهل ليش؟ لأنه لا يهمني عدد ولا يهمني أشوف data
يهمني يقول اتنفذت أو ما اتنفذت لو كانت الـ select
أو الـ SQL اللي عندي هي عبارة عن DML يهمني أعرف عدد
الـ roles اللي تأثرت بالجملة هذه فبلجأ للخيار
الثاني بلجأ للخيار الثاني وطبعا قولنا هذه بترجع
integer نسميها الـ count فيه
C عند الـ connection الـ count الـ R count اختصار
اللي هو count وهنا قولنا Boolean done
وبالتالي
هدول بتنتهي بالنسبة لي أنا بدي أقفله لأنه مش هشتغل
عليهم الآن مطلقا طيب لو أنا جبت الـ DML وكتبتها في
داخل الـ query handle إيش بتتوقع يصير عندي؟ لو أنا
أجيتها وقلت له مثلا delete
from
students و
رحت نفذ ماذا ستحصل عندك؟ إرور؟ هل تعرفين السبب
للإرور؟ هتلاقي الكتاب اللي فيها وجهها.. دبلكيتها
في عالم آخر مش مشكلة الفكرة كانت فعليا هذا الـ
result أو هذا الـ statement.. دلوقت عندما شغلت
application تبعنا شغلت application مختلف run as
Java application Cannot issue data manipulation
statement with executed query بقدرش يتعامل مع الـ
data manipulation الـ DML مع الـ executed query ليش؟
لأنها المفروض أن يرجع بـ result set لكن هذه الـ data
مافيش فيها result set وعشان هيك في الـ runtime
بديكي إرور تمام معناته احنا هنا SQL نفذنا أو حصلنا
على الـ ResultSet الآن بدي أعمل Fetch للـ data هروح
أقول له while ResultSet.next يعني ولا ما فيها وهذا
الـ Iterator اللي موجود مع ResultSet ممكن أنا
هقول له مباشرة أطبع الـ values اللي بدنا إياها إيش الـ
value اللي بدنا إياها؟ اللي هي الـ values اللي
موجودة في كل row يعني الآن هتصير طباعة للـ row رو
على فرض بدي أطبع اسم الطالب بدي أطبع اسم الطالب
والمعدل تبعه بدي أطبع اسم الطالب والمعدل حسب الـ
structure تبع الـ database اللي عندي الـ attribute
الثاني هو الـ name والمعدل الـ attribute الخامس
هقول له
result set dot get get إيش؟ احنا R مش RS dot get
string ماهي في داخل الـ Y أنا شغالة RS
العمودي الثاني حصلت عليه لأنه بمثل إيش الـ name
زائد بدي أعمل concatenate المعدل concatenate
r dot جبت float لأن الـ data type اللي أنا عاملها
هناك float وقولنا الـ index رقم خمسة الآن بدي أعمل
run yes
هيروح جاب لي الـ data اللي موجودين قال لي رامي 80
ثاني 70 هاني 70 سعيد 70 فرحان 80 عباس 65 مونة إلى
آخره كل الـ data وجاب لي المعلومات هذا هي الموجودة
عندي تحت من وين جابها عمل connection مع الـ
database وجاب الـ result set وقال لي هي الـ output
تبعتها وقولنا احنا هنا ممكن أنا أعتمد على اسم الـ
column لو أنا حافظه أو متأكد منه Name مش هيتغير
عندي ولا حاجة بس
هنا المقطة اللي بحب أؤكد عليها أن الـ index بيبدأ
من واحد مع الـ result set الـ indices بتبدأ من واحد
سواء كانت على مستوى الـ raw أو على مستوى الـ column
تمام قلنا في الحالة هذه لما كانت اللي هي الـ
sequential forward axis لـ result set يعني أنا قاعد
بقرأ الـ result set فقط باتجاه واحد من البداية
للنهاية لو أنا بدي أتنقل ما بين عناصر الـ results
أو ما بين الـ records اللي موجودة عندي قولنا
بيخدمني فيها في الحالة هذه مين اللي هي الخصائص الـ
results اللي أنا حددتها مع الـ statement اللي هي الـ
scroll اللي هي الـ type scroll وقولنا مع الـ type
scroll عشان
أوديك شغل ثاني برضه أنا هنا
مع الـ type scroll أو مع الـ default statement
اللي عندي أنا لو أجيت للـ result set بدي أوبي في الـ
while بديش أستخدمها الآن ورحت قلت له R dot هي الـ
next موجودة first موجودة
على أول record و last موجودة طيب absolute موجودة
لكن هل هي active؟ هتتفعل وتنتقل عناصر الـ records
اللي موجودة عندي؟ لا طيب بالـ absolute لو أنا قلت له
خمسة مين الخامس عنده هنا؟ فرحان absolute خمسة
ينتقل مؤشر الكتابة لحد خمسة للـ record الخامس run
save all دي عاملة إيه؟ scrollable؟ scroll
sensitive؟ عاوز
تمام فبالتالي هي scroll هي absolute طيب relative؟
قولها relative إيش بتساوي؟ من الـ current position
وبتبدأ تتنقل إما للأمام أو للخلف بحسب العناصر
لاحظي أنا موجود وين عند خمسة قلت له ناقص اثنين
معناته هيروح على الـ record الثاني
الثاني ولا الثالث؟ بده يرجع للخلف خطوتين فهيأشر
على الثالث آه على الثالث run هاني وهي الـ record
الثالث
اللي هو هذا تمام الآن فيه ما يتعلق هيقول لنا
absolute relative لو بدي أنتقل للجزئية اللي بعد
هيك اللي هي جزئية الـ updateable أنا من خلال الـ
result set بدي أصير أشتغل وأعدل على الـ result set
وخليني أشوف بس نختصر في عملية إدخال record جديد من
خلال الـ result set اللي موجود عندي هنا احنا قلنا
سابقا اتخيل أن الـ result set دي بتمثل query والآن
أنا بدي أدخل لها data جديدة بدي أدخل لها data
جديدة قلنا في الخطوة رقم واحد هقول
له الـ result set dot move
to insert row move to insert row لأن هذا الـ space
هي عبارة عن creation لـ new record في نهاية الـ
result set الخطوة رقم اثنين ببدأ بادخل الـ data
لكل record عفوا لكل attribute في الـ record الجديد
الـ result dot set
set
أيوه أنا قاعد بسألهم اسمها set الـ statement لا
update update update إيش الـ data type اللي موجودة
عندها إيش أول attribute داخل أول attribute integer
update integer إيش الـ index واحد اللي هو ممثل مين
الـ ID إيش الـ value وليكن نحطها مثلا سبعة سبعة سبعة
سبعة ثلاثة سبعة تمام result set dot update string
عشان بتدخل الـ name إذا أنا مش بتأكد من ترتيبهم
ممكن ألجأ لمين للـ attribute names مريم
as a string result
set dot update بدي إضافة الـ GBA نوعها float update
float اللي هي الـ index أو كان الـ attribute الخامس
الـ value وليكن مثلا ثمانية وثمانين فاصلة تسعة
okay
هذه بدي أعملها cast okay لا لا بس بدها cast لأن
بيعتمد by default dot double الآن بقى عندك توقع
ترميز أنا ما دخلتهاش إيش هياخد لهم values؟ null
هياخد لهم null اللي هم الـ department و الـ gender الـ
department و الـ gender طب في حالة الـ gender هي
عبارة عن one character ومعرفة character مش الـ
string إيش بدي أسوي لها هنا أنا؟ كيف بدي أتعامل
معاها؟ ما فيش update بالمناسبة الترتيب لا يعني شيء
لأن أنت بتتعامل مع كل index بشكل مستقل. الـ name
الـ gender رقم ثلاثة update لو دورناها مش هنلاقي
character هنلاقي string فقط تمشي الحال؟ آه بيمشي
الحال ما فيش مشكلة update string اللي هي الـ
attribute قولنا الثالث وبدي أدخل حرف الـ F as a
female كذلك الخطوة رقم ثلاثة أو الخطوة الأخيرة
الآن هقول له result set dot insert row هذا الكلام هو
نفسه كنت بعمله سابقا عند الـ update إيش كنت بساوي
أنا واقف على الـ record بدون الجملة الأولى اللي فوق
هذه بروح بقول له update integer update string update
float وبديه قيم جديدة وبروح بقول له result set
dot update row
HUD لأنه احنا عاملينها updatable run تعال نشوف في
الـ database الآن مش موجودة ثلاثة سبعة ف5 مريم email
null 80.9 لأن فعليا أنا دخلت الآن من الـ result set
والـ result set مررتها لمين؟ خدوني بس كشف الحضور
والغياب ومررتها لـ Database Management System و
أصبحت أن أنا الآن بقدر أتعامل معاها طيب، لو هذا
الآن ماكنتش.. ماكنتش أعملها updatable، الأصل
ما أقدرش أنفذ أو أدخل على الجدول اللي موجود عندي هنا
تلك
ساعات
أيوه not updatable result set وبالتالي لو ماكنتش
updatable أصل مش هقدر أتنقل في داخل الـ result set
أو أضيف عناصر على الـ result set طب لو أنا بدي أعمل
delete لأ record r.delete
row وهذا طبعا بنتكلم جديد على الـ current row اللي
عليه الـ pointer تمام
لأ، تقدرش تـ .. شوفي، الآن المفروض الـ result set
هي للقراءة فقط أنت الآن بدك تعدي عليها والتعديل
هدف بده ينعكس على الـ database لازم تحوليها لـ
updatable لازم تحدديها as updatable، كمان أمورنا في
التعامل مع الـ database وإدخاله واستخراج البيانات
مافيش فيها مشكلة الآن في الوقت المتبقي نصيا إن شاء
الله بدنا نحاول نعرج على الـ graphical user
interface وكيف أنا بدي أتعامل مع الـ database اللي
موجودة عندي هنا طيب الآن ايش بتتوقعي لو كنت أنا
بتكلم على form على نموذج طبعا لما أتكلم على form
خليني آخد class جديد
db2gui طبعا احنا متفقين في الـ GUI دائما بيلزمني
frame بيلزمني frame أو خليني أروح أجيب الـ frame
هذا على السريع
frame وفي الآخر الـ frame هذا عشان يظهر بدي أعمله
set visible مصبوط f.set visible true تمام الآن الـ
data تبعتي كيف
بدي أتعامل معاها؟ إذا كنت أنت بتتكلمي على نموذج
للإدخال معرفة أنك تقعد تبني عندك للـ ID تبني عندك لـ
لكل العناصر وحتى تستخدم الـ different items ما بين
text field, combo box, list, button مظهر ولا لأ
لحد ما تشكل النموذج أو الـ form بالكامل وأهم في
الموضوع أن المفاتيح اللي تحت اللي هي مثابة الـ
insert والـ update والـ delete اللي ممكن تكون
موجودة عندك وهنا ممكن أنا بس نعمل sketch بسيط للـ
form هنا
لو أنا افترضت النموذج بالشكل هذا هاي الـ student أو
الـ ID وهي field name department
combo
box وفي عندي الـ GPA text field وعندي مفاتيح insert
update
delete مش مشكلة بقى خلينا على جدار هيك delete
وممكن أنا أعمل browse مفاتيح عشان أقرأ الـ data
واتنقل ما بينهم حسب لأ مش بالضرورة كل الـ
attributes يكونوا موجودة عندي خصوصا أنه بيقبل null
الفكرة وين اللي هتصير هنا أن كل attribute أو عفوا
كل graphical component هنقلها اسم مظبوط ولا لأ وفي
عندي method اسمها get value مظبوط get value عشان
أسترجع بالقيمة اللي موجودة بس القيمة اللي موجودة
ده ايش نوع يا بنات؟ hand، string، كل مبهر في الـ
GPA برضه string لما بكتبله 88.9، الـ string ايش
بلزمني؟ لأن هذا text field، بيلزمني أعملها
parsing، parsing من خلال ايش؟ من خلال الـ Wrap
Class أو الـ Rubber Class تبع الـ Primitive Data
بروح بقول له Integer dot parse int وبديله الـ
string اللي عندي بيحوله لـ Integer parse double
بيحوله لـ double وهكذا ممتاز طبعا أنا صرت بدي
آخد الـ data من وين؟ من الـ text field وأوديها على
الـ database على الـ database تمام والعكس صحيح بدي
يصير يعني لما أنا بدي أكتب الـ SQL statement تبعتي
تخيلي هي هي الـ String لأن بدي أجي لاحقا هقول له الـ
statement dot execute والـ SQL الـ SQL هذه يساوي
بدي أكتب له جملة insert بسيطة insert into students
تمام؟ كل الـ attributes كل الـ attributes
values وأفتح جوز الـ attribute الأول مافيش عندي فيه
مشكلة لأن الرقم ثمانية سبعة ثمانية سبعة كمان
الاسم الاسم لازم يكون ضمن علامات تنصيص ولا لأ
علامات تنصيص هذه علامات تنصيص وبدنا نحط مثلا مون
اتنين الآن في عندي مشكلة quotations معناته أنا سكة
معناته بدي اعتمدي على الـ backslash أو الـ single
quotation أو الـ single quotation تمام اللي بعده الـ
gender بدي أقول له null اللي بعده الـ department هو
الـ department ولا الـ gender الجابل department اه
okay department number رقمه ثلاثين أو خمسين مش فارق
كثير وفي الآخر المعدل هي ثمانية وتسعة وتسعين خلاص
الآن خلصت الـ statement تبعتي مئة في المئة الآن هذه
بروح ببررها لميلة لـ select a statement وتعمل
دخالة السؤال اللي بيطرح نفسه
8787-2-50-99 من أين يجيبوا المهمة دول؟ مش المفروض
من النموذج من الجدول وبالتالي هدول بيكون عبارة عن
variables موجودة في الـ frame يعني أنا فعليا لو
كنت بدي أشغل على واحد فقط منهم أو على اثنين بدي
أفترض في عندي J Text Field الـ
ID SID
New J Text Field يساوي New J Text Field وبدي آخد
الاستنتاج كذلك الاستنتاج
الاستنتاج معناته مكان الـ value هذه بتكون اللي فوق
وبما إنه انتجر لازم تكون انتجر ايش هروح أساوي أنا
هنا هل مش هتفرق معايا integer ولا لأ لأن الـ system
هيعمل parsing فممكن أتعامل معاها as a string و
خلاص أروح أعرف الـ string الـ ID equal SID.getText
رجع لي بالـ text وكذلك الـ name SID
.getText text لو كنت أنا معنى لو كنت أنا معنى أن
هذه تكون integer عفوا أنت بروح هنا مباشرة بقول له
integer dot
parse int وبقول له هاي الـ string اللي عندي تمام
وبهيك أنا بكون حولت الـ string لـ integer طبعا طب
وين الـ statement بتتعدل هتتعدل هنا هتتعدل بالشكل
التالي أنا بدي القيمة تبعتي الـ variable هقمع الـ
statement هنا وهعمل concatenate وحط الـ ID أعمل
concatenate كمان مرة طبعا إنها خلصت من .. خلصت من
.. طبعا ما تنسوش الـ spaces وكل العناصر الاسم بتكون
موجودة الآن كلمة concatenate
هذه الكلمة مكان الاسم هذا بدي آخد الـ ID اللي هو
اسمه الـ name مظبوط بدي أعمل concatenate الـ name
وهي كمان مرة concatenate مع الـ text اللي موجود
عندها لو أنت فكرنا نقبع الـ value تبعت هذه بتقبع
insert into students values مفتوح الجوز الـ number
الاسم اللي موجود عندي فوق والـ null 59 الـ null 59
تسعة وتسعين لما بتحط ايش؟
أيوه مئة مئة مئة مئة اسم اللي بتسأل سؤال مهم
الآن يا أستاذ الـ text اللي أنت كتبته في كلمة name
مش هعتبر ليها as text ايش الحل؟ لازم الـ quotation
تكون موجودة معناته أنا بدي quotation هنا بحط الـ
word slash وحتى والـ double quotation مافيش مشكلة
في الموضوع ونفس الكلام مع بداية مع نهاية هذه هحط
back word slash والـ quotation بتصير الـ quotation
جزء من مين؟ من الـ String اللي موجود عندي هنا طيب
عشان تتأكدي بس من الجملة هحاول أقبع لك إياها Sysout
اللي هي الـ SQL تبعتناها دي تمام؟ لما أجي أطلعها
هنا وأقول في عندك String قيمته موجودة إن الله
احنا بس خلينا عشان هانجيت String جيت Integer بدي
أروح أحطها واحد اثنين ثلاثة أربعة خمسة وأعالج هذه
هيك وأنا بدي أحط for s بالشكل هذا وهاي بدي أروح
أعمل run لحظي هي طبع الـ quotation تحت في المكان
المطلوب مائة في المئة وهيك مائة في المئة وهيك
أنا بكون متأكد أن الـ statement تبعت الـ syntax
تبعها إن كتب بشكل صحيح كمان هذه خطوة مهمة جدا في
لما أنا بدي أتعامل مع النماذج لو كان العكس معادي
هعمل fetch زي ما كنت أنا بشتغل hand مع الـ database
هعمل fetch وبدل ما كنت أطبعها مباشرة وين بده
أحطها؟ بده أحطها في الـ field اللي موجود على الـ
form في الـ field اللي موجود على الـ form طيب وهيك
بيصير خلصنا مع العند الـ insert بستدعي الـ action
listener بعمل form لـ statement وبقول له execute لـ
statement اللي عندي العنصر الجيد اللي هنضيف اليوم
للـ graphical user interface اللي هو الـ table في
عندي شغلة اسمها Jtable العناصر
هذه بدها تنضيف للـ form okay احنا فهمنا الكلام
مافيش مشكلة ممكن نعمله comment Jtable
.tnewjtable والـ table بياخد واحد من ثلاثة .. من
three constructors أو أربعة .. الـ default
constructor بالإضافة واحد من ثلاثة عفوا إن ممكن
أنا أديله الـ data بشكل مباشر عشان يعرض لي إياها ولما
أنا بدي أعرضه الـ data لازم الـ data تكون عبارة عن
الـ race و بياخد مني الـ data بالشكل هذا و الـ column
بالشكل هذا إيش بتفهم الكلام اللي أنا كتبته أن الـ
data لازم تكون عبارة عن two dimensional array و الـ
columns لازم تكون one dimensional إيش المقصود بالـ
columns إلى الأسماء الـ attributes أسماء الـ
attributes عشان هيك الـ result set ممكن تخدمني
أنا الـ result set في آخر slide
إحنا في عندنا شغلة اسمها metadata اللي هي بيانات
وصفية عن الـ result set مش عن الجدول عن جزء من
الجدول اللي هو جاي في الـ result set لأن الـ select
statement ممكن تكون one attribute ممكن two
attributes، مظبوط؟ لكن إذا أنا قلت له select star
from students و بدون where معناته أنا بتكلم عن
الجدول بالكامل وأهم في وصف الجدول وصف الأعمدة،
عددهم؟ وترتيبهم وأسماءهم والـ data type تبعتهم طيب و
هذا الكلام كله موجود من خلال الـ result set في عندي
object أو class اسمه database metadata أتكلم على
الـ database بشكل عام أنا ما بديش أتكلم على الـ
database metadata بدي أتكلم على الـ result set
metadata في المرحلة هذه بتلزمني لو كنت بدي أعرّش
فيها جداول من الـ users اللي لهم صلاحيات وإش
الصلاحيات شغل ثاني ما بيعنيني كثير لكن أنا اللي
بيعنيني الآن أو في مستوى المرحلة هذه result set
metadata كيف أحصل عليها؟ أنا حصلت على result set من
execute query بروح بعرف result set metadata و بحصل
عليها من result set.get metadata يعني الـ method
get metadata بترجع بـ object من نوع result set
metadata من أهم الـ methods اللي موجودة فيها get
column count عدد الـ attributes GetColumnName بناءً
على الـ Index Got Get عفوا ColumnClassName المقصود
بالـ class name اللي هي الـ data type تبعته بناءً
على الـ index اللي موجود و بالتالي بحصل على بيانات
متكاملة عن الجدول اللي موجود عندها تمام خلينا نروح
نكمل الشغل العملي مع الجدول الآن عرفت الجدول كيف
الـ data ممكن تدخل بشكل بسيط و بسيط جدا أنا بضرح
أعرف الـ string أو array of string titles الـ column
titles اللي مقصود فيها و بدأت أثبتهم أثبتهم الـ ID
على سبيل المثال name في أسهل من هيك؟ البنات خليكم
معايا هان الـ .. قولنا الـ gender okay خلينا بس على
أربع ما تبديش يوم كلهم الـ department
و في الآخر الـ GBA الآن هذه مين؟ هذه أسماء الـ
columns الـ data ممكن أنا أعرفها من نوع object إذا
أنا بدأ أحط different data في داخل الـ data و الأصل
فيكي الآن الـ array لما تنشئيها بتكون عبارة عن كل
element في الـ array هذه عبارة عن array و بحسب
العناصر الموجودة عندها مثلا، واحد أو مية طالب أحمد
department
software development و الـ GPA مثلا 88.4 هذا الصف
الأول
صف الثاني كمان الـ Ray مية و واحد مرام
أو مية و اثنين عفوا مش خاضي بغض النظر اشتت في الـ
computer science as a text وهي
مثلا سبعة و ثمانين عفوا الآن الـ data موجودة و الـ
titles موجودات فبروح بقوله للجدول الـ constructor
تبع الـ data و الـ titles و ضل
أضيف الـ table على الـ frame اللي عندي dot table dot
add T
proceed إشيالنا خطأ هان okay
بس ql run
هاي الجدول الموجود لكن الـ header مش باين لأنه عشان
بس أضفته على الـ frame بشكل مباشر خليني أروح أعرف
scroll pan و أضيفه على scroll pan دي
scroll pan و بدي أضيف الـ table و بدي أضيف الـ scroll
pan على العنصر
اللي قبل هاي ظهر الجدول الآن في خاصية ظريفة مع
الجدول هانو كويسة ممكن نستفيد منها اللي هي مع الـ
table T auto create auto sort أو auto sorter T dot
setAutocreateRawSorter إيش الـ method هاي بتساوي؟
بتخليكي لما تشغلي الـ table تقدري تعملي sort للـ data
بشكل مباشر هاي true run هاي الجدول اللي صار موجود
okay ليش؟
صح
True Sorter بعمل
Sort بس على مبدوه كان الماوس متعلق أو ما مش شابه
ها الآن لاحظي بقدر أنا أرتب ترتيب تصاعدي أو تنازلي و
مجرد كليك بناء على الجملة اللي موجودة عندها طيب لو
أنا بدأ أدخل الـ database أو بدحش الـ database الآن
في الموضوع إيش اللي بيحصل غير عندي؟ إيش اللي هيتغير
عندي على السريع الـ titles ممكن أجيبها بناءً على الـ
result set تمام الثانية الـ data تبعتي الـ data ..
آه لأ مهمش على السريع و هنأخر أخونا أبو حمزة كمان
دقيقتين الآن في الـ table في عندي constructor آخر
بيعتمد على شغل اسمها table أو default table model
default
Table Model Default
Table Model M Default
Table Model ممكن تاخد مني أسماء الـ Attributes
اللي هي عندي مثل الـ titles الآن، مظبوط؟ وعدد الـ
rows أنا بدأ أقوله الآن الـ rows خليها صفر والجدول
هذا بدي أنشئه على الـ model هذا أو على النمط القديم
لأ بدي أنشئه باعتماده على الـ model object تمام هي
الأمر الآن الـ model object الـ model object بقدر
أنا أعمل update على الـ data تبعته في أي وقت من خلال
method اسمها .addraw() و الـ addraw هذي بتاخد مني
object بتاخد مني array من نوع object فإيش اللي
هيتغير عندي في الـ application تبعي في جملة الـ
where هذي while a next هاي هعمل المثال هذا بكل
بساطة في
داخل الـ why هعرف الـ statement تبعتي طبعا عملت
connection و عرفت result 6 و الـ statement إلى آخره
عرفت object و جبت عدد الـ attributes من خلال الـ
result 6 اللي عندي و روحت قلت له ابني عناصر بالشكل
هذا أو بكل بساطة أنا بقول بدي أربع attributes أربع
attributes ما في مشكلة عندنا الآن هاي الـ أربع
attributes لاحظت خدت الـ integer و حطيته في الـ
channel الأولى في الـ array الآن array إيش نوعها
object يعني الـ generic مقدر أحط فيها أي data طيب أنا
بديها و بعد ما بخلص بروح بقوله أضيف للـ raw هذا على
الـ model اللي عندي الجدول اللي حيصير عندنا الآن
إيران جاب
الـ data من الـ database اللي موجود عندي و بقدر أرتب
الـ data حسب الـ GPA حسب الـ gender الـ department
okay أنا في فرق في الترتيب مش مشكلة و بالتالي أو
قدرت أدمج ما بين الـ database و graphical user
interface سواء كان في الجدول أو لا آخر شغلة فيما
يتعلق بالجدول إذا أنت لو بدك تعملي update من خلال
الجدول graphical user interface هذا معناته عليه
listener في عندك على الـ model الخاص بالـ table بقدر
أقول له add table model listener إذا أنت بتتعامل بس
مع الـ data اللي في الـ module في عندك add table
model listener و من داخله بتشتغل زي الـ listener
السابقات تصير مع الـ click أو حسب الـ data تغيير الـ
data تقدر تاخذي الـ action المناسب و بهيك بنكون
انتهينا من موضوع الـ database و رابطها مع الـ
graphical user interface و إن شاء الله بنكون
قدرنا نُجمل لكوا كيف ممكن عملية الربط تم و تصير
برنامجك متكامل في أي سؤال يا بنات؟ هو آخر شيء يا
دكتور إنه لما عملت إنه الـ table model نعم إنه من
خلالها لو زي بالضبط الـ result set كنا نعمل من
خلالها لما الـ concurrency نعمل update بقدر أيوة،
بالضبط، بيصير من خلال الـ Results لكن أنا بيتعامل
مع Graphical User Interface موجود عندي هنا لما أنا
بدي أعمل Click أو بدي أغير في الـ Data اللي موجودة
هنا يعني أنا أضغط، أضغطين هنا و بدي أروح أكتب، إيش
الـ Data اللي بيصير فيها لما أضغط Enter؟ مش يصير
في Event؟ مين بدي يمسك لي الـ Event هذا؟ إذا أنا
باني على Modeldefault table model معناته بقدر
أتعامل مع الـ default أو الـ model table listener
ومن ثم بقدر أتعامل معاه مع الـ action بالوضع
التلقائي الهدف هنا أنه أنجل الـ data من الـ table
على الجدول لأن هي أصلاً طلعت من الـ result set وصارت
وين موجودة؟ على الـ form على النموذج أو على الـ
table أي
فيهم
الـ Auto، هيا، Okay، هذا Set Auto Create Row
Sorter، ما له؟ إيش يعني؟ الآن Auto يعني تلقائي، أنا
بدي أخلي عملية الترتيب للجدول عملية الترتيب
تلقائية، بمجرد أعمل Click، ينعاد ترتيب الصفوف في
الجدول من خلاله، هيا، لما احنا شغلنا الـ Table،
Okay، احنا شكلنا هان، Okay هذه هي الترتيب مرتب
ترتيب تصاعدي حسب الـ ID هاي click انعاد الترتيب هذه
الآن مش هتتفعل إلا لو قلت أنت الـ table هذا بدي
أخلي ترتيب الصفوف يصير في ترتيب تلقائي، با الشيء حال
الله يعطيكم العفو يا بنات وإن شاء الله بحملكوا الـ
code هذا برضه على الـ website الله يعطيكم العفو