Mais conteúdo relacionado
Semelhante a الدرس العاشر (20)
Mais de Anas Aloklah (13)
الدرس العاشر
- 1. الرحيم الرحمن هللا بسم
سوف الدرس اليومالتعامل يكونالبيانات قواعد معبالـJDBC
هو الدرس بهذا سنأخذه ما:
البيانات قواعد هي ما
هي ماJDBC
أجل من األساسية السبع الخطواتالوصولإلىالبيانات قواعد
مع اتصال مثالقاعدةMySQL
التدريب أجل من الواجبات بعض
ه ماالبيانات قواعد ي
هيمجموعةمنعناصرالبياناتالمنطقيةالمرتبطةمعبعضهاالبعضبعالقةوتتكون ،رياضيةقاعدةالبيانات
منجدول(Table)واحدأوأكثرمنويتكون جدولالجدولمنسجل(Record)أوأكثرمنسجلويتكون
السجلمنحقل(Field)أوأكثرمنحقل.
تعريف ليس هذاالبيانات قواعد عن درس وليس بالجافا البيانات قواعد مع التعامل الدرس هذا ألن البيانات لقواعد شامل
هي ماJDBC
كلمةJDBCلـ اختصار هيJava DataBase Connectivityطريق عن البيانات بقواعد االتصال تعني وهي
الجافةمجموع مع للتعامل مكتبة لك تؤمن واجها عن عبارة هيةواسعةالبيانات قواعد منلك يؤمن كما
بلغة البيانات قواعد مع التخاطب أجل من مستوىSQL.
الدريفرات معرفة أجل من رابط هذا(برنالمعطيات لقواعد الوصول امج)في المتاحةJDBC
un.com/products/jdbc/drivershttp://industry.java.s
http://developers.sun.com/product/jdbc/drivers
البيانات لقواعد الوصول أجل من السبع الخطوات
وت والحشر وجلب البيانات قواعد إلى الوصول أجل من الضرورية الخطوات هذاعديل.
1.الـ درايفر تحميلJDBC:من البيانات قاعدة درايفر من الصف اسم تحديد عليك الدريفر لتحميل
الطريقةClass.forName،بذالكلـ الدريفر إدارة في وتسجل لدرايفر حالة ًاتلقائي تنشأJDBC.
2.االتصال رابط تحديد:الـ فيJDBCالمضيف تحديد عليك بالسيرفر االتصال لربط(host)والمنفذ
(port)البيانات قاعدة واسم.
3.االتصال تأسيس:المستخد اسم هناك االتصال رابط معمبقاعدة االتصال تأسيس أجل من المرور وكلمة
البيانات.االتصال قاعدة إغالق حتى البيانات لقاعدة استعالم تنفيذ يمكنك االتصال تأسيس وبمجرد.
4.الغرض أنشاءStatement:أنشاء إنغرضنمط منStatementوأوامر استعالم إرسال لك يتيح
إلىالبيانات قاعدة.
5.التحديث أو االستعالم تنفيذ:نمط من غرض على حصولك عندStatementإرسال يمكنك فإنه
عباراتSQLالطرق بتنفيذ ذالك البيانات قاعدة إلىexecuteQueryأوexecuteUpdateأو
executeBatch.
6.النتائج معالجة:نمط من غرض إرجاع يتم فإنه البيانات قاعدة استعالم تنفيذ عندResultSetهذا
ال من مجموعة يمثل الغرضصفوفالطريقة باستدعاء معالجتها يمكنك الذي واألعمدةnextو
لـ المختلفة الطرقgetXxxحيثXxxمن الحقل من تريده الذي نمط هيetc,.., String, flout ,
int.
7.ا إغالقالتصال:إغالق عليك ينبغي عندها النتائج ومعالجات االستعالم عمليات من تنتهي عنما
االتصال.
بالتفصيل وشرحها خطوة كل إلى نأتي سوف اآلن
- 2. الـ درايفر تحميلJDBC
البيانات قاعدة خادم مع التخاطب يمكنها التي برمجيات من جزء عن عبارة هو الدريفرالحقيقية.لتحميل
الدريفرإدارة في بتسجيلك وتقوم الدرايفر من حالة لك تنشأ ًاتلقائي وهي المناسب الصف اختيار عليك فقط
اللـ دريفرJDBC.
الطريقة استخدام عليك الدريفر تحميل اجل منClass.forNameنمط من وسيط الطريقة هذه وتأخذString
الصف اسم يمثل وهو(classname)ا يلقي سوف االستدعاء هذاالشكل من ستثناءClassNotFoundException
داخل الدريفر تحميل يكون أن يجب لذالكtry/catchيلي كما يعني:
try {
Class.forName("connect.microsoft.MicrosoftDriver");
Class.forName("oracle.jdbc.driver.OracleDriver");
Class.forName("com.sybase.jdbc.SybDriver");
} catch(ClassNotFoundException cnfe) {
System.err.println("Error loading driver: " + cnfe);
}
الطريقة في صف مسار أي استخدام يمكنك فإنه المبدأ حيث منClass.forNameفي ولكنالممارسةالعملية
الدرايفرات معظم فإنJDBCملفات داخل تكونJAR،بتض قمت أنك من تأكد لذالكما حسب الصف مسار مين
ملف في موجود هوJARالدليل في الملف بوضع وقمWEB-INF/libبك الخاص الويب تطبيق في.
ملف بوضع قم فهنا معينة البيانات لقاعدة درايفر نفس يستخدم تطبيق من أكثر هناك كان حال فيJARفيدليل
لملفات مكان له سيرفر كل في السيرفر قبل من مشتركJAR.
االتصال رابط تحديد
من االنتهاء وبمجردالـ درايفر تحميلJDBCعليك ينبغي فإنه ،موقع تحديدالبيانات قاعدة خادم.لروابط اإلشارة عليك
الـ البيانات قواعد استخدامJDBCما إلىيلي:الموقع المضيف تضمين عليك البروتوكول(host)واسم والمنفذ
إش يجب كله هذا البيانات قاعدةذالك على مثال هذا الرابط في ارته.
String host = "dbhost.yourcompany.com";
String dbName = "someName";
int port = 1234;
String oracleURL = "jdbc:oracle:thin:@" + host +
":" + port + ":" + dbName;
String sybaseURL = "jdbc:sybase:Tds:" + host +
":" + port + ":" + "?SERVICENAME=" + dbName;
االتصال تأسيس
تمرير عليك فعال االتصال لجعلوهي الوسطاءالرابطاالتصال(URL)وكلمة البيانات لقاعدة المستخدم واسم
لطريقة البيانات لقاعدة المرورgetConnectionالصف من هي التيDriverManager.
لتوضيح مثال هذا
String username = "jay_debesee";
String password = "secret";
Connection connection =
DriverManager.getConnection(oracleURL, username, password);
الطريقة أن نالحظgetConnectionنمط من غرض لنا تعيدConnection.
الصف أنConnectionإليها نتعرف دعونا مفيدة طرق على يحوي
prepareStatement:البيانات لقاعدة لتقدمها الترجمة قبل استعالم تخلق الطريقة بهذه
prepareCall:البيانات قاعدة في مخزنة إجراءات إلى يصل
rollback/commit:العمليات إدارة في يتحكم
close:البيانات بقاعدة االتصال يغلق
isClosed:صريح بشكل مغلق أو مهمل االتصال كان إذا التحقق يتم.
أيض هناكفاستخدم البيانات قاعدة عن المعلومات بعض تريد كنت إذا وهو البيانات قاعدة تأسيس في جزء ًا
الطريقةgetMetaDataنمط من غرض لك تعيد الطريقة هذاDatabaseMetaDataتكشف الطريقة هذا
هي والطرق البيانات قاعدة وإصدار اسم لكgetDatabaseProductName, getDatabaseProductVersion))
الـ درايفر أوJDBCالطرق هي وهذه(getDriverName, getDriverVersion)ذالك على مثال وهذا:
- 3. DatabaseMetaData dbMetaData = connection.getMetaData();
String productName = dbMetaData.getDatabaseProductName();
System.out.println("Database: " + productName);
String productVersion =dbMetaData.getDatabaseProductVersion();
System.out.println("Version: " + productVersion);
الغرض أنشاءStatement
نمط من الغرضStatementالغرض أنشاء ويتم البيانات لقاعدة وأوامر استعالمات إرسال أجل من يستخدم
نمط من غرض منConnectionهي الطريقة باستخدامcreateStatementكتالي األمر ويكون:
Statement statement = connection.createStatement();
التحديث أو االستعالم تنفيذ
نمط من الغرض على حصولك بمجردStatementاستعالم إلرسال استعماله يمكنك فإنهSQLذالك
الطريقة باستخدامكexecuteQueryالنمط من غرض لك ترجع تيResultSetذالك على مثال هذا.
String query = "SELECT col1, col2, col3 FROM sometable";
ResultSet resultSet = statement.executeQuery(query);
تس التي الطرق تلخص التالية القائمةتالصف في ًةعاد خدمStatement:
executeQuery:تقوم الطريقة بهذهاستعالم بتنفيذSQLنمط من غرض في البيانات وترجع
ResultSetنمط من والغرضResultSetيكون أن الممكن من ليس لكن فارغ يكون أي ممكنnull.
executeUpdate:الـ أوامر أجل من فقط الطريقة هذه تستخدمSQLهي التيUPDATEأوINSERT
أوDELETEال عدد الطريقة هذه لنا وتعدصفوفباألمر تأثرت التي.لغة أوامر ًاأيض تدعم إنها كما
البيانات تعريف(DDL)هي منها التيCREATE TABLEوDROP TABLEوALTER TABLE.
executeBatch:بقومبتنفيذأوامر مجموعةواحدة دفعةل ويعيدمصفوفة ناعدد يساوي عنصر كل
أمر لكل التعديالت.للمج أمر إلضافةماستخدم وعةaddBatch.
setQueryTimeout:النتيجة على للحصول للدرايفر الالزم الوقت مقدار تحدد أنت الطريقة بهذه
نوع من استثناء الطريقة هذه وترميSQLException.
getMaxRows/setMaxRows:الصفوف عدد تحديد تستطيع الطرق بهذهالذيالـ يحتويه قد
ResultSet.
النتائج معالجة
الطريقة باستخدام هي النتائج مع للتعامل طريقة أبسطnextالصف منResultSetوهيأجل مناالنتقال
مرة كل في البيانات جدول في واحد صفا بها يتم التيالطريقة ستدعاءnext.
الصف فيResultSetعن ذالك العامود في الموجودة البيانات الحصول أجل من مختلفة طرقة هناك يوجد
هي والطرق العامود دليل أو العامود اسم طريقgetXxxحيثXxxالجافة في البيانات نوع هيالمقابلفي لها
ا استخدام يتم المثال سبيل فعلى البيانات قواعدلطريقةgetIntمن صحيحة عدد قيمة على الحصول أجل من
الطريقة استخدام ويتم الحقلgetStringشكل على الحقل قيمة على الحصول اجل منStringهناك ًاطبع
لـ الطرق من كثيرgetالصف فيResultSet.الطريقةgetXxxنوع من استثناء ترميSQLException.
مالحظة:الـ في األول العامود دليلResultSetهو1وليس0.
لطباعة مثال نعرض اآلنقيموالث األول العامودكل أجل من العامود والدليل العامود اسم طريق عن اني
الـ في الصفوفResultSet:
while(resultSet.next()) {
System.out.println(resultSet.getString(1) + " " +
resultSet.getString(2) + " " +
resultSet.getString("firstname") + " "
resultSet.getString("lastname"));
}
األفضل منتم إذا األعمدة تغير الممكن من ألنه الدليل من بدل العامود لقيمة للوصول األعمدة اسم استخدام
البيانات قاعدة في الجدول هيكلة تغير.
فيJDBC 1.0تغالـ في لإلمام التحرك فقط يمكنك فإنه يرResultSetأنه حين فيفيJDBC 2.0فإنه
الطريقة بوساطة لإلمام االنتقال يمكنكnextالطريقة بوسط الوراء إلى خطوة والعودةpreviousالـ في
ResultSetالطريقتان بواسطة البيانات قاعدة جدول في معين صف إلى االنتقال ويمكنكrelativeو
absolute.
- 4. في ليس أنه تعلم أن عليكJDBC 1.0حتى والJDBC 2.0الـ الدرايفر إصدار لتحديد مباشرة آلية يوجدJDBC
الـ في أماJDBC 3.0فالمشكلة هذه حل تم قدالطريقتان بإضافة وذالكgetJDBCMajorVersionو
getJDBCMinorVersionالصف إلىDatabaseMetaData.
قائ هذهالصف في المفيدة لطرق ملخص هي مةResultSet:
next/previous:الطريقةnextفي مؤشر تحريك على تقومResultSetاألمام إلى واحد صف
الـ في اصدارات كل في موجودة الطريقة وهذهJDBC.الطريقة أماpreviousعلى تقوم فهي
في المؤشر تحريكResultSetالطر وهذه الخلف إلى واحد صفالثاني اإلصدار في موجودة يقة
الـ منJDBCتليها التي واإلصدارات.
relative/absolute:الطريقةrelativeسواء الصفوف من نسبي عدد المؤشر تحريك على تقوم
إيجابي كان(لألعلى أي)سلبي أو(لألسفل).الطريقة أماabsoluteالمؤشر تحريك على تقوم فهي
معين الصف رقم إلى.ك إذاالطريقة قيمة انتabsoluteنهاية في سيكون المؤشر وضع فإن سلبية
الـResultSetفي مدعومة وهيJDBC 2.0.
getXxx:هذا ذكرنا وقد العامود دليل أو العامود اسم بحسب ذالك محدد عامود من قيمة لنا تعيد
الطريقة هذه لنا تعيد أن ويمكن سبق ما في الطريقة0أوnullقي كانت إذاالـ مةSQLهيnull.
هي أهمها من لكن طويل عنها والحديث المرجعة القيم من كثير الطريقة لهذهgetStringو
getIntوgetFloatوgetDoubleالطريقة باستخدام الحقل مع ثنائية قناة فتح ًاأيض يمكنك و
getBinaryStreamالـ الطرق من الكثير وهناكgetقاعد من بيانات على للحصولالبيانات ة.
wasNull:الطريقة من قيمة على حصول أخر اختبار في تقومgetXxxالـ قيمة كان إذا فيماSQL
هيnullال أم.
findColumn:الـ في محدد عامود دليل تعيدResultSetالعامود اسم معرفة من وذلك.
getRow:الجدول في الحالي الصف رقم لك تعيد.ه صف أول دليل انه مالحظةو1وليس0.
getMetaData:نمط من غرض الطريقة هذه لنا تعيدResultSetMetaDataتصف وهي
ResultSet. ResultSetMetaDataتعطيك التيأعدادالمعلومات من وغيرها واسمها األعمدة.
الطريقةgetMetaDataًاجد مفيدةنمط من يكون غرض من عليه وتحصلResultSetهذا لنا وتعيد
الطريقنمط من غرض ةResultSetMetaData.معالجة بعملية تقوم أن أجل من أنتبشكل الجدول
وهذا األعمدة ونمط ورقم اسم تعرف أن عليك فإنه صحيحةالصف دور هوResultSetMetaDataالذي
الـ في األعمدة وأنواع وعدد اسم تحدد يتم خالله منResultSet.
ل قائمة هي هذهالصف في المفيدة طرقResultSetMetaData:
getColumnCount:الـ في األعمدة أعداد لنا تعيدResultSet.
getColumnName:البيانات قاعدة من العامود اسم لنا تعيد.أول دليل انه مالحظةعامودهو1وليس0.
getColumnType:الـ بيانات نمط لنا تعيدSQLالعامود في.قيم مقارنة يمكنsqlفي يقابله بما
امن ذلك لجافةjava.sql.Types.
isReadOnly:فقط للقراءة هي القيم إدخال كان إذا فيما تشير.
isSearchable:استخدام ممكن كان إذا فيما تشيرجملةWHEREالعامد في.
isNullable:قيمة تخزين كان إذا فيما تشيرnullقانوني غير العامود في.
مالحظة:أنResultSetMetaDataيحو الفقم الصفوف عدد معرفة أردة فإذا الصفوف عدد عن معلومات ي
عندك كان إذا يلي بماJDBC 2.0باستدعاد قمالطريقةlastفيResultSetإلى المؤشر تحرك التيأخر
الطريقة باستدعاء قم وبعدها صفgetRowعدد وهو األخير سيكون وهو الحالي الصف لنا تعيد عندها
الصفوف.كان إذا أماعندكJDBC 1.0الطريقة خالل من هو اإلصدار هذا في الوحيدة الطريقةnextقم
حلقة في بوضعهاwhileبوضع وقمفإذا عدادقيمة كانتnextهيfalseصف أخر يكون عندها.
االتصال إغالق
أجل منإغالقيلي بما قم االتصال:
connection.close();
إنمن كل إغالق يعني االتصال إغالقالكائنينStatementوResultSet.
متأكد تكون عندما االتصال إغالق عليك ينبغي إذابأنكعملية بأي تقوم لنمعالجةأوبيانات استعالم.
- 5. بيانات قاعدة مع اتصال مثالMySQL
من كل نستخدم سوف المثال هذا فيselectوinsertإضافة عن عبارة هو والمثالمنشورالفيس في كما
بوكأخر أن مبسط بشكل لكنمنشورأول سيكون أضيفهمنشوريظهر.اسمها ولتكن البيانات قاعدة ننشئ اآلن
testاسمه جدول وننشئpostرقم األول عامودان يتضمنالمنشورid_postمحتوى والثانيالمنشور
p_content.
الـ تعليماتSQLالعملية هذه أجل من
CREATE DATABASE `test1` ;
CREATE TABLE `test1`.`post` (`id_post` INT( 10 ) UNSIGNED NOT NULL AUTO_INCREMENT
PRIMARY KEY ,`p_content` TEXT NOT NULL) ENGINE = InnoDB;
مكان يظهر األول سيرفلتان ننشئ بعدهاإدخالالمنشوراإلضافة وزرالمنشوريكون الزر من األسفل وفي
موجودالمنشوراتالضغط عندبحشر يقوم الذي الثاني سرفلت إلى ينقلنا الزر علىالمنشورالبيانات قاعدة في
األول السرفلت إلى بتوجيهك ويقم.
واسمه األول السرفلت اآلنShowPost
import java.io.*;
import java.sql.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class ShowPost extends HttpServlet {
void processRequest (HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException, SQLException {
response.setContentType("text/html;charset=UTF-8");
try {Class.forName("com.mysql.jdbc.Driver").newInstance();//1
} catch (Exception ex) {//1
throw new SecurityException("class not found. " + ex.toString());//1
}//1
String hostName = "localhost:3306";//2
String dbName = "test1";//2
String MySqlURL = "jdbc:mysql://"+hostName+"/"+dbName;//2
String user = "root";//3
String password = "";//3
Connection connection = DriverManager.getConnection(MySqlURL, user, password);//3
Statement statement = connection.createStatement();//4
String query = "SELECT * FROM `post` ORDER BY `post`.`id_post` DESC";//5
ResultSet resultSet = statement.executeQuery(query);//5
PrintWriter out = response.getWriter();
try {
out.println("<html><head><title>Servlet ShowPost</title></head>");
out.println("<body> ");
out.println("<form action="http://localhost:8085/CreatePost/InsertPost" method="post">"
+"<textarea name="post" ></textarea><br/>"
+"<input type="submit" value="post"/>"
+"</form>");
while(resultSet.next()) //6
{
out.println(resultSet.getString(2)+"<hr/>"); //6
}
out.println("</body></html>");
} finally {
out.close();
}
connection.close();//7
}//end processRequest
- 6. تتمةShowPost
واسمه الثاني السرفلت اآلنInsertPost
بمشروع القيام تريد عندما نصائحالبيانات بقواعد اتصال فيهبص قممساعد صف نعبإنشاء وقم االتصال إلنشاء
عميل عليك تسهل بحيث إليها بحاجة أنت التي العمليات من وغيرها واستعالم والحذف والحشر لتعديل طرق
عليه والسيطرة البرنامج وتعديل البرمجة
التدريب اجل من واجبات
1.فكرة بتطوير قمالمنشوراتلكل تعليق بوضع وقممنشور
2.ال بتطوير قمعملية بوضع وقم السابقة فكرةاإلعجابالمنشور و التعليق من لكل
3.بساعة تصويته بعد التصويت يستطيع الشخص وأجعل الموقع تقيم لعملية مشابه شيء أنشاء قم
4.صفحة تطبيق بإنشاء قمindexواالسم رقم ويتضمن الطالب لتسجل األول رابطين لك تعرضو
االختصاصوالصفالهوايةلكل زران هناك العرض وفي المسجلين عرض الثاني والرابططالب
بياناته لتعديل والثاني الطالب لحذف األول
import java.io.*;
import java.sql.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class InsertPost extends HttpServlet {
void processRequest (HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException, SQLException {
String post=request.getParameter("post");
response.setContentType("text/html;charset=UTF-8");
try {Class.forName("com.mysql.jdbc.Driver").newInstance();//1
} catch (Exception ex) {//1
throw new SecurityException("class not found. " + ex.toString());//1
}//1
String hostName = "localhost:3306";//2
String dbName = "test1";//2
String MySqlURL = "jdbc:mysql://"+hostName+"/"+dbName;//2
String user = "root";//3
String password = "";//3
Connection connection = DriverManager.getConnection(MySqlURL, user, password);//3
Statement statement = connection.createStatement();//4
String query = "INSERT INTO `test1`.`post` ( `id_post` , `p_content` ) VALUES ( NULL , '"+post+"' );";//5
int resultSet = statement.executeUpdate(query);//5
connection.close();//7
response.sendRedirect("http://localhost:8085/CreatePost/ShowPost");
}//end processRequest
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
try { processRequest(request, response);
} catch (SQLException ex) {}
}//end doPost
} end servlet
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
try { processRequest(request, response);
} catch (SQLException ex) {}
}//end doGet
}//end servlet