الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

Convert Jdbc Statement To Xml

بدأه Tigger_it في 7 أغسطس 2009 · 8 رد · 609 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

السلام عليكــم ورحمـة الله وبركاتــه ،،

لو كانت عندي معلومات في داتا بيس مخزنه واردت تحويل طريقه عرض البيانات الي xml اي لو عملت عميله اتصال الي اي قاعدة بيانات وحصل الاتصال واردت عرض البيانات بعد ذالك في ملف xml وعرضها هل يمكن ذالك ؟

وبالنسبه لملفات pdf كيف يتم عملية حفظها في الداتا بيس هل سوف نسنخدم blob و clob مثل الصور ام ماذا

وشكرا :)

تم تعديل هذه المشاركة بواسطة Tigger_it في 7 أغسطس 2009 في 19:14

ab66i830gh93.gif

i25sctz8qnls.jpg

#2

ملف pdf هو عبارة عن binary data، يعني استعمل blob تماما كما فعلت بالنسبة للصورة

بالنسبة لxml ممكن توضح أكثر ماذا تريد فعله

#3

بالنسبه للسوال الثاني يعنى مثلا لو كان عندي قاعدة بيانات Employee من نوع mysql فيها حقول اسم الموظف ورقمو والراتب الخاص فيه واردت عرض البيانات من هذة الداتابيس الي نوع xml يعنى اعمل ملف xml واحفظ فيها البيانات الموجوده في الداتابيس واعرضها من هذا الملف يعنى راح يكون امتداد الملف عندي xml وارح اعرض البيانات منو ؟ ان شالله تكون وضحت

ab66i830gh93.gif

i25sctz8qnls.jpg

#4

لنفترض جدول "mytable" فيه ثلاث أعمدة id & name & age

الملف xml الناتج سيكون على هذا الشكل


<persons>
<person>
<id>1</id>
<name>younes</name>
<age>14</age>
</person>
.......
</persons>
<?xml version="1.0" encoding="UTF-8"?>


import javax.xml.parsers.*;
import org.w3c.dom.*;
import javax.xml.transform.*;
import javax.xml.transform.dom.*;
import javax.xml.transform.stream.*;
import java.io.*;

public class TestMySQLXml {
public static void main(String[] args) {
DocumentBuilderFactory factory = null;
DocumentBuilder builder = null;
Document document = null;
Element root = null;
Connection con = null;
PreparedStatement st = null;
try {
con = DriverManager.getConnection("jdbc:mysql://localhost/test", "root", "");
st = con.prepareStatement("select * from mytable");
factory = DocumentBuilderFactory.newInstance();
builder = factory.newDocumentBuilder();
document = builder.newDocument();
root = document.createElement("persons");
ResultSet rs = st.executeQuery();
while(rs.next()) {
Element person = document.createElement("person");

Element id = document.createElement("id");
id.setTextContent(String.valueOf(rs.getInt("id")));
person.appendChild(id);
Element name = document.createElement("name");
name.setTextContent(rs.getString("name"));
person.appendChild(name);
Element age = document.createElement("age");
age.setTextContent(String.valueOf(rs.getInt("age")));
person.appendChild(age);
root.appendChild(person);
}
document.appendChild(root);
Source source = new DOMSource(document);

Result result = new StreamResult(new File("mytable.xml"));

TransformerFactory tFactory = TransformerFactory.newInstance();
Transformer tBuilder = tFactory.newTransformer();

tBuilder.transform(source, result);

} catch (Exception e) {
e.printStackTrace();
}
}
}
   import java.sql.*;

#5

هو هاد الي قصدتو بس الكود مو واضح كثير فيك تشرحو DocumentBuilderFactory و DocumentBuilder اول مرة اسمع فيهم ممكن تشرحهم شوي ..

ab66i830gh93.gif

i25sctz8qnls.jpg

#6

DocumentBuidlerFactory كما يوحي بذلك إسمها تقوم بإنشاء objects من صنف DocumentBuilder عن ظريق الميثود newDocumentBuidler()

DocumentBuilder تتيح الحصول على object من صنف Document عن طريق الميثود newDocument()

الآن لدينا object من صنف Document، هذه الكلاس تمثل الملف xml، لكن ليس الملف بحد ذاته مثل الكلاس File، لكن محتواه المتمثل في الnode tree، وهي التي تسمح بالتحكم في هذه الtree وذلك بإضافة nodes جديدة وتحديد بعض خصائصها

كما تعلم فكل ملف xml يجب أب يكون لديه root node يحتوي على باقي الnodes


root = document.createElement("persons");
		 document = builder.newDocument();

بعد الحصول على Document، نقوم بإنشاء الroot node والذي أسميته Element، persons تمثل node في الxml

الآن لدينا الroot node وهو يمثل الجدول كاملا الموجود في قاعدة البيانات، الآن يجب أن نضيف كل سطر على حدة من الجدول إلى شجرة الxml، والهدف هو أن نحصل على بنية بهذا الشكل


<person> -------------> first line of the table
<id>1</id>
<name>xxxx</name>
<age>100</age>
</person> -------------> end of th first line of the table

<person> -------------> second line of the table
<id>2</id>
<name>yyyy</name>
<age>200</age>
</person> -------------> end of th second line of the table

.....................

</persons> -------------> end of root node
		 <persons> -------------> the root node, represents the table

ننشئ العنصر "person"

Element person = document.createElement("person");

ننشئ العنصر "id" ونعطيه قيمة العمود id الموجود في الجدول عن طريق setTextContent

وبما أن id يعتبر child node بالنسبة للعنصر "person" فإننا نضيفه إليه عن طريق الميثود appendChild

ونعمل نفس الشيء بالنسبة للباقي


id.setTextContent(String.valueOf(rs.getInt("id")));
person.appendChild(id);
		 Element id = document.createElement("id");

بعد أن ملأنا العنصر "person" ، يجب علينا إضافته إلى الroot node الذي هو "persons"

root.appendChild(person);

بعد نهاية الloop يكون الroot node امتلأ بجميع سطور الجدول، وحان وقت إضافته إلى الDocument

document.appendChild(root);

الآن لدينا object من صنف Document يمثل شجرة xml تحتوي على معطيات الجدول، لكنها مخزنة في الذاكرة فقط

من أجل كتابتها في القرص الصلب، نستعمل الكود التالي



Result result = new StreamResult(new File("mytable.xml"));

TransformerFactory tFactory = TransformerFactory.newInstance();
Transformer tBuilder = tFactory.newTransformer();

tBuilder.transform(source, result);
		 Source source = new DOMSource(document);

هذا الكود فقط أخدته من مثال، يعني إرجع لتوثيق كل كلاس واقرأها، المهم معرفته هو أنك تمرر الDocument الذي حصلت عليه إلى DOMSource، وتمرر object من صنف File إلى StreamResult وهو الملف xml الذي ستتم الكتابة فيه

أتمنى أن تكون فهمت شيئا من كل هذه الخزعبلات :wacko: :wacko:

#7

ماشاء الله عليك اخ herch بتستاهل تكون خبير جافا كبير شكرا كثير كثير علي الشرح انا فهمت الفكرة وعرفت كل شي لشو بعمل راح اطبق الكود واشوف باقي الكلاس الي موجوده في الكود وارجع اسئلك طبعا في اسئله بس لا تقول بدي الفلوس :D

لي رجعه ..

ab66i830gh93.gif

i25sctz8qnls.jpg

#8

ما شاء الله يا أخي، و الله إني لأجد نفسي أتعلم منك.

عندي سؤال، في هذه الحاله خصيصا، لم لا نكتب ملف ال اكس ام ال يدويا؟

#9

كلنا هنا تنعلم من بعض :wink:

تعرف أن الxml بخلاف html يجب بالضرورة أن يكون well formed، يعني هناك قواعد كثيرة يجب مراعاتها

إستخدام هذه الطريقة يمكنك من الحصول على ملف xml يكون well formed، بينما بكتابته باليد ممكن تفتح tag وتنسى ما تغلقه وأيضا يجب عليك أن تنتبه وتتذكر بنيتة الشجرة اللي عندك وفي أي عنصر تتواجد حاليا .... يعني وجع راس :lol:

بناء Document وتمريره إلى Transformer أسهل ويضمن الحصول على ملف xml صحيح، مع أني لم أجرب من قبل كتابته يدويا، يعني ممكن يكون كلامي غلط

مواضيع مشابهة