احمد الجابري بتاريخ: 29 أغسطس 2004 تقديم بلاغ مشاركة بتاريخ: 29 أغسطس 2004 عند تعلم لغة جديدة ليست بالطريقة الصحيحة ان تحفظ اوامرها و قواعدها اللغوية و تقضي الساعات تقرأ في مراجعها وكتبها .قيمة المبرمج والمطور في مكتبته الخاصه واقصد بها الاكواد والروتينات التي يحتفظ بها والتي هي ناتج خبرته البرمجية وخبرات اخرين .فانت كمتعلم جديد للغة جديدة كل ماعليك هو تشغيل ابسط برامجها وعمل تعديلات طفيفه حتى تعرف فائدة كل ايعاد او جمله فيها .اما في حالة الرغبة الجادة لاتقان لغة فلايتم ذلك الا عن طريق البدأ في مشروع كبير محلل مُسبقاً او عمل محاكاة لبرنامج موجود اصلاوفي طريق بناءه ستتعرف على ادق تفاصيل هذه اللغة فيما يخص بالغرض الذي صممت البرنامج لاجله .والان نعود الى اكمال ما بدأنا به وهو طريقة تحديث البيانات في قاعدة اوراكل عن طريق لغة JSP .عملية تحديث البيانات من خلال لغة JSP او اي لغة ويب اخرى مثل PHP, Coldfusion, ASP لها نفس المباديء ولا تختلف الى في اشياء بسيطة جداًقد نتحدث عنها في سياق الحديث عن بعض الاوامر في لغة JSP .كما رأينا في السابق واعني في الموضوع عرض البيانات باستخدام JSP كيفية عرض البيانات على الشاشة على هيئة تقرير غير قابل للتعديلهنا نحن في حاجة الى امكانية التعديل ومن ثم ارسالها الى قاعدة البيانات واستبدال القيمة السابقه بالقيمة الجديدة . تمر هذه العملية بعدة مراحل اوجزها في مايلي :1 - عرض البيانات لاختيار السجل الذي نرغب في تحديث بياناته .2 - تمرير متغير يحتوي على معرف السجل واقصد هنا الـPK ( Primary Key ) الى الصفحة المسؤولة عن عرض السجل لتحديث بياناته3 - بعد عرض البيانات داخل حاويات Text Boxes والتعديل عليها نقوم بإرسال قيمها عن طريق Form الى الصفحة المسؤولة عن التحديث داخل قاعدة البيانات .اوردت هنا مثال للتعامل مع قواعد بيانات اوركل خصيصاً حيث ان معظم الامثلة التي توردها الكتب العامة في تعليم JSP لا تعمل بشكل صحيحفمثلاً اذا استخدمنا جملة الـSQL في تحديث البيانات مباشرة فعند وجود علامة تنصيص في القيمة المرسله سيحدث هناك خطأ .ولذلك نحن بحاجة هنا لا ستخدام الـClass المسمى بـ PreparedStatement بدلاً من Statement العادية .هذه المعلومة مهمة جداً فلا تنسوها ! .والان قم بحفظ هذا الملف تحت اسم listforedit.jsp وهو مشابه تماماً للملف السابق في موضوع عرض البيانات مع JSP ماعدا اضافة رابطيمكن من ارسال قيمة متغير تحوي على معرف السجل الى الصفحة edit.jsp عن طريق GETوالفرق بين GET و POST في ارسال البيانات ان الاولى تستخدم اذا كان حجم قيم المتغيرات صغيراً وليست سرية فهو يعرضها في شريط عنوانالمتصفح الخاص بك كالتالي : http://localhost:8080/edit.jsp?id=10ليتم تلقيه عن طريق الايعاز request.getParameter("id") و لاحظ الاختلاف في حالة التعامل مع البيانات الحرفية والعددية .اما Post فيستخدم للبيانات السرية والكبيرة ويتم ارسالها ضمنياً بدون ان ترى شيئاً في شريط عنوان المتصفح .لاحظ ان GET وPost هي من صلب لغة HTML وليست JSP .listforedit.jsp <%@ page contentType="text/html; charset=windows-1256" language="java" import="java.sql.*" errorPage="" %> <% Driver Driverrs = (Driver)Class.forName("oracle.jdbc.driver.OracleDriver").newInstance(); Connection Connrs = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl","scott","tiger"); PreparedStatement Statementrs = Connrs.prepareStatement("SELECT * FROM DEPT"); ResultSet rs = Statementrs.executeQuery(); %> <html> <head> <title>Show Dept. Table</title> <meta http-equiv="Content-Type" content="text/html; charset=windows-1256"> </head> <body> <table width="600" border="0" align="center" cellpadding="0" cellspacing="5"> <tr bgcolor="#000000"> <td><font color="#FFFFFF" size="2" face="Tahoma">Dep. No.</font></td> <td><font color="#FFFFFF" size="2" face="Tahoma">Dep. Name </font></td> <td><font color="#FFFFFF" size="2" face="Tahoma">Loc.</font></td> </tr> <% while (rs.next()) { %> <tr bgcolor="efefef"> <td><font size="2" face="Tahoma"><%=rs.getInt("DEPTNO")%></font></td> <td><font size="2" face="Tahoma"><a href="edit.jsp?id=<%=rs.getInt("DEPTNO")%>"><%=rs.getString("DNAME")%></a></font></td> <!-- تمت اضافة رابط يقوم بنقل المتغير الذي يحوي قيمة معرف القسم --> <td><font size="2" face="Tahoma"><%=rs.getString("LOC")%></font></td> </tr> <% } %> </table> </body> </html> <% rs.close(); Statementrs.close(); Connrs.close(); %> احفظ هذا الملف تحت اسم edit.jsp ولاتنسى ان Jsp حساسه لحالة الحروف من حيث كونه Capital Case او Small Case فـ Edit.jsp لايشير الى edit.jsp وستظهر لك رسالة خطأ بعدم وجود هذا الملف .edit.jsp <%@ page contentType="text/html; charset=windows-1256" language="java" import="java.sql.*" errorPage="" %> <html> <head> <title>Edit Department</title> <meta http-equiv="Content-Type" content="text/html; charset=windows-1256"> </head> <body> <% Connection con = null; Statement stmt = null; ResultSet rs = null; Class.forName("oracle.jdbc.driver.OracleDriver"); con = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl","scott","tiger"); stmt = con.createStatement(); rs = stmt.executeQuery("SELECT * FROM DEPT where DEPTNO =" + Integer.parseInt(request.getParameter("id"))); %> <form name="updteform" method="POST"> <table width="80%" align="center" cellspacing="5"> <tr valign="top" bgcolor="#000000"> <td width="95"><font color="#FFFFFF" size="2" face="Tahoma">DEPT. No. </font></td> <td width="197"><font color="#FFFFFF" size="2" face="Tahoma">Dept. Name </font></td> <td width="305"><font color="#FFFFFF" size="2" face="Tahoma">Loc</font></td> </tr> <% if(rs.next()) { %> <tr valign="top"> <td bgcolor="#efefef"> <input name="txt_DEPTNO" type="hidden" id="txt_DEPTNO" value="<%=rs.getInt("DEPTNO")%>"><%=rs.getInt("DEPTNO")%></td> <td bgcolor="#efefef"><input name="txt_DNAME" type="text" id="txt_DNAME" value="<%=rs.getString("DNAME")%>" size="30""> </td> <td bgcolor="#efefef"><input name="txt_LOC" type="text" id="txt_LOC" value="<%=rs.getString("LOC")%>" size="30"> </td> </tr> <% } %> <tr valign="top"> <td colspan="3"> <input type="submit" name="Submit" value="Update"> <input type="button" value="Back" onClick="javascript:history.back();"> </td> </tr> </table> </form> </body> </html> <% rs.close(); stmt.close(); con.close(); %> <% // Update هنا يبدأ الجزء الخاص بتحديث البيانات في حالة ضغط المستخدم على الزر if (request.getParameter("Submit") != null) { String txt_DNAME = request.getParameter("txt_DNAME"); String txt_LOC = request.getParameter("txt_LOC"); int txt_DEPTNO = Integer.parseInt(request.getParameter("txt_DEPTNO")); String updSql = "UPDATE DEPT SET DNAME = ? , LOC = ? WHERE DEPTNO = " + txt_DEPTNO; Class.forName("oracle.jdbc.driver.OracleDriver"); Connection con2 = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl","scott","tiger"); PreparedStatement ps = con2.prepareStatement(updSql); synchronized(ps){ ps.setString(1,txt_DNAME); ps.setString(2,txt_LOC); ps.executeUpdate(); response.sendRedirect("listforedit.jsp"); }} %> وهذا على ان نلتقي في موضوع اخر ربما يكون عن طريقة حذف البيانات او اضافتها حسب الوقت قُدماً ...احمد الجابري اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
Guest عادل الشهري بتاريخ: 29 أغسطس 2004 تقديم بلاغ مشاركة بتاريخ: 29 أغسطس 2004 سلام عليكمألف شكر على الشرح الممتاز ... فعلاً تميز جديد في قسم الجافا أخوك عادل اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
KhalidOCP بتاريخ: 30 أغسطس 2004 تقديم بلاغ مشاركة بتاريخ: 30 أغسطس 2004 الاخ احمد ,تعجز الكلمات عن الشكر , بارك الله فيك وجعله في ميزان حسناتك يوم القيامة . اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
سامي عبدالله بتاريخ: 31 أغسطس 2004 تقديم بلاغ مشاركة بتاريخ: 31 أغسطس 2004 مشكور اخوي على احمد ويعطيك ربي الف عافيةطيب مشكلة اللغة العربية في الاستعلام تظهر سليمة لكن في الادخال او التحديث تظهر بشكل رموزمع العلم انه تم استخدامrequest.setCharacterEncoding("windows-1256");response.setContentType("text/html; charset=utf-8");ارجو اجد الاجابةشكر لك اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
احمد الجابري بتاريخ: 31 أغسطس 2004 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 31 أغسطس 2004 اخي الكريم سامي عبداللهاذا كنت تستخدم نفس امثلتي التي اوردتها ماعليك الا اضافة السطر التالي في الملف edit.jspبعد اول سطر مباشرةوهو : <%@ page contentType="text/html; charset=windows-1256" language="java" import="java.sql.*" errorPage="" %> <% request.setCharacterEncoding("windows-1256"); %> هذا كل ماتحتاجه وقد جربته في تحديث بيانات الجدول DEPT الخاص بـSCOTT وهو يعمل بشكل صحيح .ارجوا إعلامي بما يستجد لديك ..قُدماً احمد الجابري اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
سامي عبدالله بتاريخ: 31 أغسطس 2004 تقديم بلاغ مشاركة بتاريخ: 31 أغسطس 2004 شكر لك اخي الغالي احمد على تجاوبك السريعلم تنجح المحاولة أتوقع المشكلة في قاعدة البيانات. اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
احمد الجابري بتاريخ: 31 أغسطس 2004 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 31 أغسطس 2004 تأكد من تحديث القيم في الـRegistry1- اذهب الى Start ثم Run ثم اكتب regedit وبعدها اضغط على OK2- الان بعد ان فتحت نافذة برنامج Registry Editor اذهب الىHKEY_LOCAL_MACHINE ثم اختر SOFTWAREثم ORACLE وبعدها HOME03- ابحث عن المتغير NLS_LANG واضغط عليه مرتين لتغيير قيمتهثم ضع هذه القيمة في الخانه الخاصة ببيانات القيمة ARABIC_UNITED ARAB EMIRATES.AR8MSWIN1256 اعد تشغيل قاعدة البيانات او تشغيل الجهاز ككل وحاول مره اخرى .قُدماً ...احمد الجابري اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
arab20002000 بتاريخ: 1 سبتمبر 2004 تقديم بلاغ مشاركة بتاريخ: 1 سبتمبر 2004 مشكور على الدرس اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
OCM بتاريخ: 29 سبتمبر 2004 تقديم بلاغ مشاركة بتاريخ: 29 سبتمبر 2004 متميز دائماً والى الامام اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
gadallah بتاريخ: 3 أكتوبر 2004 تقديم بلاغ مشاركة بتاريخ: 3 أكتوبر 2004 اخي الكريم هل ال JSP برنامج متثل ال دي فبوبر ؟واذا كان برنامج كيف انزلة علي المكنة بتعتي ؟وما الفرق بين JSP و ASP ?ارجو الرد سريعا اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
احمد الجابري بتاريخ: 9 أكتوبر 2004 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 9 أكتوبر 2004 اسف على التأخير اخي gadallahهل ال JSP برنامج متثل ال ديفيلوبر ؟لا طبعاً JSP عبارة عن لغة متكاملة يعني كل ماتحتاج للبدأ بها هو web server يدعمها مثل JRUN او Apacheوتستطيع كتابة برامجك عن طريق برنامج notepad .لكن لايمكنك تطوير برنامج PL/SQL بدون برنامج developer .واذا كان برنامج كيف انزلة علي المكنة بتعتي ؟وبالنسبة لتنزيله على المكنة بتعتك هناك موضوع مستقل مثبت اسمه كل ماتحتاجه لربط اوراكل و JSPوما الفرق بين JSP و ASP ?من ناحية الهيكلة تقريباً نفس الشيء لكن الفرق ان ASP تعمل على webserver من نوع IIS والذي يوجد على انظمة ويندوز فقط وهي مشتقة من لغة Visual Basic. اما JSP فهي مشتقة من لغة جافا وتحتاج الى webserver من نوع Apache وهناك انواع اخرى تدعم اللغة ويمكن تشغيلها على نظام ويندوز وغيره بدون الحاجة الى تغيير حرف واحد في الكود .اسف ان الرد لم يكن سريعاً .. لاني صراحة ماانتبهت .قُدماً .. احمد الجابري اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
تركي936 بتاريخ: 30 ديسمبر 2004 تقديم بلاغ مشاركة بتاريخ: 30 ديسمبر 2004 يسلام على لعبك يابو حميد اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
Recommended Posts
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.