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

لدي نصوص كبيرة اريد تخزينها

بدأه ماكسيموس في 28 مارس 2008 · 39 رد · 3,963 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#26

أخي قديماً ربطت هذه القاعدة مع جافا

وكتبت مقالاً في الموضوع

المشكلة أني أضعت المقال

لكن أظن أن الأمر اقترب

كل ما عليك أن تقوم بالقليل من البحث

وبإذن الله ستجد مرادك

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#27

/index.php?showtopic=129755

المشكلة قد ارى انها هنا

http://labnotesh.wordpress.com/2007/11/28/cannot-connect-to-sql-server-2005-express/

ولكن من الغريب ان الخطوات السابقة ناجحة ... بالاضافة الى انشاء اكثر من مستخدم واعطاءة صلاحيات ... طبعا ليس على شاشة windows authentication

ولكن عندما يكون url الخاص بقاعدة البيانات كالتالي

jdbc:microfost:sqlserver://localhost:1433/test

يخرج الخطا التالي :

java.sql.SQLException:no suittable driver found for jdbc:microsoft:sqlserver://localhost:1433/test

واذا كان url الخاص بقاعدة البيانات كالتالي :

jdbc:sqlserver://localhost:1433/test

يخرج الخطا التالي :

com.microsoft.sqlserver.jdbc.SQLServerException:The port number 1433/test is not valid

وتبقى الاسئلة المتاحة ... هل علي ان اضيف اسم المستخدم وكلمة المرور الى url الخاص ...

وهل علي ان اجلب المكتبة الخاصة microsoft driver لكي لا تظهر لي هذه الرسالة ويقوم بالربط

طبعا مجرد احتمالات ... ولكن ما تزال المشكلة قائمة مع هذه الاحتمالات ... ولا اعرف اي جواب يكون هو الحل ... وهل الاحتمالات صحيحة او يوجد غيرها

تم تعديل هذه المشاركة بواسطة Jsp في 4 أبريل 2008 في 22:54

#28
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");

Connection con = 
DriverManager.getConnection("jdbc:sqlserver://localhost;databaseName=test;user=sa;password=123456");
حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#29

جزاك الله خير اخي alaadiaa

بالفعل المشكلة كانت في url فكان من اللازم اضافة اسم المستخدم وكلمة المرور الى url لكي يقوم بالاتصال ... طبعا مع الاخذ بالاعتبار فتح TCP/IP

String url = "jdbc:sqlserver://localhost:1433;databaseName=test;user=t123;password=t123";

Connection connction = DriverManager.getConnection(url);

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

فبرنامج الاخ ابو خالد جزاه الله خير استعملته في اضافة النصوص ولم يظهر لي اي مشكلة ... ولكن عندما اردت ان اضيف كود البرنامج نفسه الى قاعدة البيانات هنا تحدث المشكلة ...لا يضيف ...

السبب الاقواس وعلامات التنصيص وغيرها الموجودة في البرنامج ... فمثلا بدل ان تضيف نص كامل اضف فقط هذه العلامة '

وهنا تحدث الثغرة في البرنامج والكود كاملا ... فاذا كانت المشكلة في String فاعتقد ان دوال string سوف تحلها ...

جزاك الله الجميع الف خير

#30

أخي أظن أن هناك حل لهذا الموضوع في الجافا

أظن اسمه prepared statement

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#31

ولكن اين اجده ... او مامفهومها ..؟

#32

مثال بسيط

final String sql = "Select * from Customer where CustomerID =?";//1
final PreparedStatement ps = con.prepareStatement(sql);
ps.setString(1,customerID);//3

ستقوم الجملة رقم 3 بتزويد الجملة رقم 1 بالقيمة في مكان علامة الاستفهام

على هيئة VARCHAR أو LONGVARCHAR على حسب طولها

من حسن حظك أن انتبهت إلى الموضوع

لأن هذه ثغرة مشهورة جداً يعرفها أصغر مخترق في العالم

تسمى بثغرة الحقن

لأنك تقوم بحقن جملة SQL بأشياء أخرى

مثال على الثغرة

لو افترضنا أننا نستخدم Statment

في الشيفرة السابقة

والمستخدم أدخل لنا القيمة

cust1' or 1=1 --

ستجد أنه سيرى جميع المستخدمين

لأن الشرط الذي وضعناه متحقق دائماً

1=1 دائماً إلا إذا كانت قاعدة البيانات معتوهة بعض الشيء

على العموم هذا مخترق مسكين

هناك آخر سيقوم بحذف كل المستخدمين

أو ربما يضيف مستخدمين جدد

ربما هناك من سيقوم بحذف كل الجداول

على كل الأحوال الموضوع لا يتعدى كونه كارثة

بالمعنى الحقيقي لمعنى كارثة

لذا راعي دائماً أن تقوم بعدم استخدام Statement

إلا في الحالات التي لا تستدعي أخذ معلومات من المستخدم إطلاقاً

أتمنى أن تنتهي مشاكلك مع قاعدة البيانات

أي مساعدة أنا في الخدمة

بما أنك قد قمت بربط جافا مع قاعدة بيانات SQLServer

هل هناك إمكانية أن تكتب لنا الخطوات باختصار

وتطرحها في موضوع جديد

لأنها بجد متعبة وتنسى بسهولة

الله معك

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#33

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

والحمد لله بالنسبة لقاعدة البيانات ليس لدي مشكلة فيها

فالان استطيع ان اضيف واحذف واقوم بالتعديل كذلك بالاضافة الى النصوص الطويلة جدا ... بمعنى ان مشكلتي مع قاعدة البيانات انتهت ولله الحمد

وكا فهمت انك تريد ان اطرح موضوع الربط بالجافا في موضوع مستقل ... ان شاء الله لك ما تريد

وبالنسبة للخطوات وطرح الموضوع في طريقة الربط ... فان شاء الله سوف اقوم بطرح الخطوات في كيفية الربط في موضوع جديد سواء كان مختصر او مفصل ...

ولكن بالنسبة للمثال الذي ذكرته حول PreparedStatement ... ففي الحقيقة لم افهمه جيداً ولهذا لدي اسئلة كثيرة حول بعض النقاط في المثال ...

ولكن لا اريد ان اتعبك بكثرة الاسئلة فليس لها مكان ... ولكن فيما لو اخذنا برنامج الاخ الفاضل ابو خالد جزاه الله خير ... وقمنا باضافة PreparedStatement فكيف يكون تركيبة الجديد

اعتقد ان هذا الامر سوف يغنيك ويغنيني ويغني الجميع ايضا عن الاسئلة وكثرتها بالاضافة الى انه سوف يكون اكثر فهما ... اعتقد ذلك

وبالنسبة لما ذكرت وهو هذا :

لذا راعي دائماً أن تقوم بعدم استخدام Statement

إلا في الحالات التي لا تستدعي أخذ معلومات من المستخدم إطلاقاً

انتمنى منك توضيح هذا الامر ...

وجزاكم الله خير

تم تعديل هذه المشاركة بواسطة Jsp في 8 أبريل 2008 في 12:22

#34

عندما تحتاج إلى أي بيانات من المستخدم لتقوم بعملية معينة على قاعدة البيانات

إياك أن تستخدم Statement

في حالة الجمل المباشرة

مثل

select * from table

لا مشكلة لو استخدمت Statement

وهذه شيفرة الأخ أبو خالد مع التعديل

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Statement;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.SwingUtilities;

public class MainFrame extends JFrame implements ActionListener{

	static final long serialVersionUID = 1l;
	Connection con;
	JTextArea txtArea = new JTextArea();
	JButton btnAdd = new JButton("Add");

	public MainFrame() {
		javax.swing.SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				createAndShowGUI();
			}
		});
	}

	private void createAndShowGUI() {

		try{
			Class.forName("com.mysql.jdbc.Driver");			
			String uri = "jdbc:mysql://localhost/test";
			String user = "root";
			String pass = "";

			con = DriverManager.getConnection(uri, user, pass);

		} catch(ClassNotFoundException e){
			e.printStackTrace();
		} catch(SQLException e){
			e.printStackTrace();
		}

		SwingUtilities.updateComponentTreeUI(this);
		validate();

		JFrame frame = new JFrame(" ... ");
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

		Container pane = frame.getContentPane();
		pane.setLayout(new BorderLayout());

		JPanel rightPanel = initRightPanel();

		pane.add(rightPanel,BorderLayout.CENTER);

		frame.pack();

		frame.setVisible(true);

	}

	public JPanel initRightPanel(){
		JPanel bottomPanel = new JPanel(new BorderLayout());	

		JScrollPane sp = new JScrollPane(txtArea);
		sp.setPreferredSize(new Dimension(500,300));
		bottomPanel.add(sp,BorderLayout.CENTER);	
		btnAdd.addActionListener(this);
		bottomPanel.add(btnAdd,BorderLayout.PAGE_END);
		return bottomPanel;
	}

	public void actionPerformed(ActionEvent e){
		if(e.getSource()==btnAdd){
			String theme = txtArea.getText();
String sql = "INSERT INTO theme(content) values (?)";
			try{
				PreparedStatement ps = con.prepareStatement(sql);
				ps.setString(1,theme);
				ps.execute();

				txtArea.setText("");	

				ps.close();
			} catch(SQLException excep){
				excep.printStackTrace();
			}			
		}
	}		

	public static void main(String[] args){
		new MainFrame();
	}

}

تحياتي

م.علاء

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#35

جزاك الله خير اخي علاء

بالصدفة الطريقة لا تنفع ... فعند اضاافة بعض الكود الطويل يتعطل البرنامج عن الاضافة

هذا ما توصلت اليه

#36

ما المشكلة التي تحصل عليها؟؟

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#37

اضن ان الدالة PreparedStatement لا تصلح مع الكود الطويل مثلاً

لان في الحقيقة قمت بتجربتها بادخال بعض الكود وتم اضافته الى قاعدة البيانات

ولكن عند ادخال الكود الطويل قليلاً هنا تتعطل الخاصية او الدالة ولا تتم الاضافة

المشكلة هي نفس السابقة وذلك بعدم اضافة المحتوى الى قاعدة البيانات

#38

السلام عليكم

اعرض علينا بعض الشيفرة التي تضيفه

اعرض علينا الشيفرة الخاصة بالفئة PreparedStatement

اعرض علينا الخطأ الحاصل عند الإضافة

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#39

جزاك الله خير اخي علاء

المشكلة التي حدث ان لا مشكلة بالفعل

فكانت المشكلة في قاعدة البيانات بحيث اني جعلت nvarchar خاصية للحقل الذي سوف اضيف فيه المواضيع الطويلة

اما عن مسالة الكود فالحمد لله استطيع اضافة اي كود مهما كان ولا يحدث لي مشكلة في ذلك

#40

الحمد لله

هذا شيء جيد

على الأقل للأناس الكسولين أمثالي

أنتظر موضوع ربط قواعد البيانات SQLServer بجافا الذي وعدتني

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

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