الانتقال إلى المحتوى

تحديث سجلات قاعدة بيانات اوراكل عن طريق JSP


احمد الجابري

Recommended Posts

عند تعلم لغة جديدة ليست بالطريقة الصحيحة ان تحفظ اوامرها و قواعدها اللغوية و تقضي الساعات تقرأ في مراجعها وكتبها .
قيمة المبرمج والمطور في مكتبته الخاصه واقصد بها الاكواد والروتينات التي يحتفظ بها والتي هي ناتج خبرته البرمجية وخبرات اخرين .
فانت كمتعلم جديد للغة جديدة كل ماعليك هو تشغيل ابسط برامجها وعمل تعديلات طفيفه حتى تعرف فائدة كل ايعاد او جمله فيها .
اما في حالة الرغبة الجادة لاتقان لغة فلايتم ذلك الا عن طريق البدأ في مشروع كبير محلل مُسبقاً او عمل محاكاة لبرنامج موجود اصلا
وفي طريق بناءه ستتعرف على ادق تفاصيل هذه اللغة فيما يخص بالغرض الذي صممت البرنامج لاجله .

والان نعود الى اكمال ما بدأنا به وهو طريقة تحديث البيانات في قاعدة اوراكل عن طريق لغة 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");
}}
%>



وهذا على ان نلتقي في موضوع اخر ربما يكون عن طريقة حذف البيانات او اضافتها حسب الوقت :)

قُدماً ...
احمد الجابري

رابط هذا التعليق
شارك

مشكور اخوي على احمد ويعطيك ربي الف عافية
طيب مشكلة اللغة العربية في الاستعلام تظهر سليمة لكن في الادخال او التحديث تظهر بشكل رموز
مع العلم انه تم استخدام
request.setCharacterEncoding("windows-1256");
response.setContentType("text/html; charset=utf-8");

ارجو اجد الاجابة
شكر لك

رابط هذا التعليق
شارك

اخي الكريم سامي عبدالله
اذا كنت تستخدم نفس امثلتي التي اوردتها ماعليك الا اضافة السطر التالي في الملف edit.jsp
بعد اول سطر مباشرة
وهو :

<%@ page contentType="text/html; charset=windows-1256" language="java" import="java.sql.*" errorPage="" %>
<%
request.setCharacterEncoding("windows-1256");
%>



هذا كل ماتحتاجه وقد جربته في تحديث بيانات الجدول DEPT الخاص بـSCOTT وهو يعمل بشكل صحيح .

ارجوا إعلامي بما يستجد لديك ..

قُدماً
احمد الجابري

رابط هذا التعليق
شارك

تأكد من تحديث القيم في الـRegistry

1- اذهب الى Start ثم Run ثم اكتب regedit وبعدها اضغط على OK
2- الان بعد ان فتحت نافذة برنامج Registry Editor اذهب الى
HKEY_LOCAL_MACHINE ثم اختر SOFTWARE
ثم ORACLE وبعدها HOME0
3- ابحث عن المتغير NLS_LANG واضغط عليه مرتين لتغيير قيمته
ثم ضع هذه القيمة في الخانه الخاصة ببيانات القيمة

ARABIC_UNITED ARAB EMIRATES.AR8MSWIN1256



اعد تشغيل قاعدة البيانات او تشغيل الجهاز ككل وحاول مره اخرى .

قُدماً ...

احمد الجابري

رابط هذا التعليق
شارك

  • بعد 4 أسابيع...

اسف على التأخير اخي gadallah

هل ال JSP برنامج متثل ال ديفيلوبر ؟
لا طبعاً JSP عبارة عن لغة متكاملة يعني كل ماتحتاج للبدأ بها هو web server يدعمها مثل JRUN او Apache
وتستطيع كتابة برامجك عن طريق برنامج notepad .
لكن لايمكنك تطوير برنامج PL/SQL بدون برنامج developer .

واذا كان برنامج كيف انزلة علي المكنة بتعتي ؟
وبالنسبة لتنزيله على المكنة بتعتك هناك موضوع مستقل مثبت اسمه كل ماتحتاجه لربط اوراكل و JSP

وما الفرق بين JSP و ASP ?
من ناحية الهيكلة تقريباً نفس الشيء لكن الفرق ان ASP تعمل على webserver من نوع IIS والذي يوجد على انظمة ويندوز فقط وهي مشتقة من لغة Visual Basic. اما JSP فهي مشتقة من لغة جافا وتحتاج الى webserver من نوع Apache وهناك انواع اخرى تدعم اللغة ويمكن تشغيلها على نظام ويندوز وغيره بدون الحاجة الى تغيير حرف واحد في الكود .

اسف ان الرد لم يكن سريعاً .. لاني صراحة ماانتبهت .

قُدماً .. احمد الجابري

رابط هذا التعليق
شارك

  • بعد 2 شهور...

انضم إلى المناقشة

يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.

زائر
أضف رد على هذا الموضوع...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   تمت استعادة المحتوى السابق الخاص بك.   مسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

جاري التحميل
×
×
  • أضف...

برجاء الإنتباه

بإستخدامك للموقع فأنت تتعهد بالموافقة على هذه البنود: سياسة الخصوصية