أخي قديماً ربطت هذه القاعدة مع جافا
وكتبت مقالاً في الموضوع
المشكلة أني أضعت المقال
لكن أظن أن الأمر اقترب
كل ما عليك أن تقوم بالقليل من البحث
وبإذن الله ستجد مرادك
تحياتي
أخي قديماً ربطت هذه القاعدة مع جافا
وكتبت مقالاً في الموضوع
المشكلة أني أضعت المقال
لكن أظن أن الأمر اقترب
كل ما عليك أن تقوم بالقليل من البحث
وبإذن الله ستجد مرادك
تحياتي
المشكلة قد ارى انها هنا
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
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
Connection con =
DriverManager.getConnection("jdbc:sqlserver://localhost;databaseName=test;user=sa;password=123456");جزاك الله خير اخي alaadiaa
بالفعل المشكلة كانت في url فكان من اللازم اضافة اسم المستخدم وكلمة المرور الى url لكي يقوم بالاتصال ... طبعا مع الاخذ بالاعتبار فتح TCP/IP
String url = "jdbc:sqlserver://localhost:1433;databaseName=test;user=t123;password=t123"; Connection connction = DriverManager.getConnection(url);
والحمد لله لقد اضفت نص اكبر من النصوص السابقة باربع مرات ولقد اضافها دون ايه مشاكل ... ولكن المشكلة تظهر عندما تريد ان تضيف كود مثلا
فبرنامج الاخ ابو خالد جزاه الله خير استعملته في اضافة النصوص ولم يظهر لي اي مشكلة ... ولكن عندما اردت ان اضيف كود البرنامج نفسه الى قاعدة البيانات هنا تحدث المشكلة ...لا يضيف ...
السبب الاقواس وعلامات التنصيص وغيرها الموجودة في البرنامج ... فمثلا بدل ان تضيف نص كامل اضف فقط هذه العلامة '
وهنا تحدث الثغرة في البرنامج والكود كاملا ... فاذا كانت المشكلة في String فاعتقد ان دوال string سوف تحلها ...
جزاك الله الجميع الف خير
ولكن اين اجده ... او مامفهومها ..؟
مثال بسيط
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
هل هناك إمكانية أن تكتب لنا الخطوات باختصار
وتطرحها في موضوع جديد
لأنها بجد متعبة وتنسى بسهولة
الله معك
جزاك الله خير اخي alaadiaa . وجزاك الله خير على مجهودك في حل مشكلة قاعدة البيانات
والحمد لله بالنسبة لقاعدة البيانات ليس لدي مشكلة فيها
فالان استطيع ان اضيف واحذف واقوم بالتعديل كذلك بالاضافة الى النصوص الطويلة جدا ... بمعنى ان مشكلتي مع قاعدة البيانات انتهت ولله الحمد
وكا فهمت انك تريد ان اطرح موضوع الربط بالجافا في موضوع مستقل ... ان شاء الله لك ما تريد
وبالنسبة للخطوات وطرح الموضوع في طريقة الربط ... فان شاء الله سوف اقوم بطرح الخطوات في كيفية الربط في موضوع جديد سواء كان مختصر او مفصل ...
ولكن بالنسبة للمثال الذي ذكرته حول PreparedStatement ... ففي الحقيقة لم افهمه جيداً ولهذا لدي اسئلة كثيرة حول بعض النقاط في المثال ...
ولكن لا اريد ان اتعبك بكثرة الاسئلة فليس لها مكان ... ولكن فيما لو اخذنا برنامج الاخ الفاضل ابو خالد جزاه الله خير ... وقمنا باضافة PreparedStatement فكيف يكون تركيبة الجديد
اعتقد ان هذا الامر سوف يغنيك ويغنيني ويغني الجميع ايضا عن الاسئلة وكثرتها بالاضافة الى انه سوف يكون اكثر فهما ... اعتقد ذلك
وبالنسبة لما ذكرت وهو هذا :
لذا راعي دائماً أن تقوم بعدم استخدام Statement
إلا في الحالات التي لا تستدعي أخذ معلومات من المستخدم إطلاقاً
انتمنى منك توضيح هذا الامر ...
وجزاكم الله خير
تم تعديل هذه المشاركة بواسطة Jsp في 8 أبريل 2008 في 12:22
عندما تحتاج إلى أي بيانات من المستخدم لتقوم بعملية معينة على قاعدة البيانات
إياك أن تستخدم 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();
}
}تحياتي
م.علاء
جزاك الله خير اخي علاء
بالصدفة الطريقة لا تنفع ... فعند اضاافة بعض الكود الطويل يتعطل البرنامج عن الاضافة
هذا ما توصلت اليه
اضن ان الدالة PreparedStatement لا تصلح مع الكود الطويل مثلاً
لان في الحقيقة قمت بتجربتها بادخال بعض الكود وتم اضافته الى قاعدة البيانات
ولكن عند ادخال الكود الطويل قليلاً هنا تتعطل الخاصية او الدالة ولا تتم الاضافة
المشكلة هي نفس السابقة وذلك بعدم اضافة المحتوى الى قاعدة البيانات
السلام عليكم
اعرض علينا بعض الشيفرة التي تضيفه
اعرض علينا الشيفرة الخاصة بالفئة PreparedStatement
اعرض علينا الخطأ الحاصل عند الإضافة
تحياتي
جزاك الله خير اخي علاء
المشكلة التي حدث ان لا مشكلة بالفعل
فكانت المشكلة في قاعدة البيانات بحيث اني جعلت nvarchar خاصية للحقل الذي سوف اضيف فيه المواضيع الطويلة
اما عن مسالة الكود فالحمد لله استطيع اضافة اي كود مهما كان ولا يحدث لي مشكلة في ذلك
الحمد لله
هذا شيء جيد
على الأقل للأناس الكسولين أمثالي
أنتظر موضوع ربط قواعد البيانات SQLServer بجافا الذي وعدتني
تحياتي