بســم الله الـرحمــن الرحيــم
السلام عليكــم ورحمـة الله وبركاتــه ،،
هذا المشروع تطوير للمشروع السابق ليسهل التعامل مع البرنامج ومعرفة الخطأ بوضوح
أضف الصنف التالي لمشروعك وغير اسم الحزمة حسب ما يتفق مع مشروعك :
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;
public class userdbi {
public static int insert(String s1, String s2){
//الاتصال بقاعدة بيانات mdb وتحديد موقعها
String url = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};" +
"Dbq=d:\\dbi\\rohailidbi.mdb";
//إنشاء كائن Connection و PreparedStatement
Connection conn = null;
PreparedStatement ps = null;
try {
//الاتصال بقاعدة البيانات
conn = DriverManager.getConnection(url);
try {
//الجملة التالية سوف تمرر إلى برنامج mysql server لإضافة البيانات
String query = "INSERT INTO table1 (c1, c2)" +
"VALUES (?, ?)";
ps = conn.prepareStatement(query);
//تمرير البيانات المراد اضافتها الى الحقول السابق ذكرها بالترتيب
ps.setString(1, s1);
ps.setString(2, s2);
ps.executeUpdate();//إضافة البيانات إلى القاعدة
//اغلاق ps و conn (الاتصال)
ps.close();
conn.close();
return 2;//إعادة 2 إذا اتصل البرنامج بالقاعدة وأضاف البيانات
}
catch (SQLException ex) {
//الرسالة التالية سوف تظهر في السطر الثالث تقريبا إذا اتصل البرنامج بالقاعدة ولم يستطع إضافة البيانات ورمى استثاء
Logger.getLogger(userdbi.class.getName()).log(Level.SEVERE, "connected but can not insert data", ex);
return 1;//إعادة 1 إذا اتصل البرنامج بالقاعدة ولم يستطع إضافة البيانات
}
}
catch (SQLException ex) {
//الرسالة التالية سوف تظهر في السطر الثالث تقريبا إذا لم يستطع البرنامج الاتصال بالقاعدة ورمى استثناء
Logger.getLogger(userdbi.class.getName()).log(Level.SEVERE, "can not connect to database", ex);
return 0;//اعادة 0 اذا لم يتصل البرنامج بالقاعدة
}
}
//هذه الدالة تعود بقيمة الحقل c2 بدلالة الحقل c1
public static String select (String s){
String url = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};" +
"Dbq=d:\\dbi\\rohailidbi.mdb";
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {
conn = DriverManager.getConnection(url);
//اختيار السجل ( الصف ) الذي تكون قيمة الحقل c1 فيه تساوي ؟
String query = "SELECT * FROM table1 " +
"WHERE c1 = ?";
ps = conn.prepareStatement(query);
ps.setString(1, s);
rs = ps.executeQuery();
//وضع كل بيانات السجل (الصف) في الكائن rs
rs.next();
//اعادة قيمة الحقل c2 من السجل المحدد سابقا
return rs.getString("c2");
}
catch (SQLException ex) {
Logger.getLogger(userdbi.class.getName()).log(Level.SEVERE, null, ex);
//اعادة null إذا لم تكن القيمة الممرة للحقل c1 موجودة
return null;
}
finally{
try {
rs.close();
ps.close();
conn.close();
}
catch (SQLException ex) {
Logger.getLogger(userdbi.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
}
package rohailidbi;
أضف الأوامر التالية لمشروعك في أي مكان لحفظ واستعادة البيانات من القاعدة
public void store() {
//تمرير النص الموجود في t1 وt2 إلى الأمر insert
int h = userdbi.insert(t1.getText().toString(), t2.getText().toString());
switch (h){
case 0:
t3.setText("غير قادر على الإتصال");
break;
case 1:
t3.setText("تم الإتصال ولم تضف البيانات");
break;
case 2:
t3.setText("تم الإتصال وأضيفت البيانات");
break;
default :
break;
}
}
//الأوامر التالية لاستعادة قيمة الحقل الثاني بدلالة الأول
public void restore() {
t2.setText("");
String s;
//تمرير النص الموجود في t1 للدالة userdbi.select التي سوف تعيد قيمة الحقل c2 ثم وضع قيمة الحقل c2 في s
s = userdbi.select( t1.getText().toString() );
if ( s.equals(null) )
t3.setText("الحقل2 فارغ أو الحقل 1 غير موجود");
else{
t2.setText(s);
t3.setText("تم استعادة البيانات بنجاح");
}
}
//الأوامر التالية تستدعي الأمر insert من الصنف userdbi
مرفق المشروع كاملا بهيئة netbeans وهو الملف المسمى rohailidbi.zip
مرفق قاعدة البيانات في الملف المسمى dbi.zip
بعد فك الضغط ضع الملف rohailidbi.mdb في المجلد dbi وضع المجلد dbi في القسم d حيث يكون مسار الملف كالتالي :
d:\dbi\rohailidbi.mdb
يجب أن يكون برنامج microsoft access مثبتا على جهازك ليعمل البرنامج يشكل وإلا لن يكون بمقدورك الاتصال بالقاعدة وإضافة واسترجاع البيانات .
الحقل c1 مفتاح أساسي لذلك لا يمكن تكرار البيانات في هذا عمود الحقل c1 ، وعندما تحاول اضافة نفس البيانات سوف تنتج الرسالة التالية تم الاتصال ولم تضف البيانات
النص العربي لا يحفظ بشل صحيح في القاعدة بل تظهر مكانه علامات اسفهام بسبب الترميز في برنامج ms access وسوف أبحث عن حل لهذه المشكلة وإذا وجد أحد الحل فليخبرني لأني بأمس الحاجة إليه .
بالتوفيق .
