السلام عليكم ...
من الاوقات المزعجة لي عندما اقوم بانشاء برنامج هو ربطه بقاعدة البيانات ..
بحثت في الانترنت عن ادوات لتحل لي هذه المشكله، ووجدت عدد قليل منها ولكنها تولد لي ملفات لا حاجه لي بها ، كما انها تستخدم المصفوفات (Array) بدلا من القوائم (List) ، ولا تقوم بتطبيق العمومية (Generics).
لذلك قمت بانشاء هذه الاداة لتوفر لي الوقت و تريحني من كتابة الكود .. واتمنى ان يتم تطويرها في هذا المنتدى لتأدي العمل المرضي
طريقة العمل
سأفرض ان لدي جدول في قاعدة بيانات باسم student و يحتوي هذا الجدول على (id, name, password, email, note)
ستقوم الاداة بتوليد الاصناف التالية
1- صنف يمثل الجدول باسم Student
public class Student {
private int id;
private String name;
private String password;
private String email;
private String note;
// getters
....
// setters
....
}2 - صنف للاتصال بقاعدة البيانات وتنفيذ الاوامر الرئيسية في SQL و هو مقسم الى 3 اقسام
الاول ويحتوي على طريقة تعود بكائن من الصنف Connection
public class DAO {
protected DAO() {
}
protected Connection getDirectConnection() throws ClassNotFoundException, SQLException{
Class.forName("com.mysql.jdbc.Driver");
return DriverManager.getConnection("jdbc:mysql://localhost/rich?user=root&password=");
}
}والثاني يحتوي على طرق لتنفيذ اوامر SQL كما انه يرث الصنف السابق (DAO)
public class StudentDAO extends DAO {
//getBean
public Student getStudent(int pk) throws SQLException, ClassNotFoundException{
Student bean=null;
PreparedStatement preparedStatement=getDirectConnection().prepareStatement("SELECT * FROM Student WHERE id = ?");
preparedStatement.setInt(1, pk);
ResultSet resultSet = preparedStatement.executeQuery();
if(resultSet.next()){
bean=new Student();
bean.setId(resultSet.getInt(1));
bean.setName(resultSet.getString(2));
bean.setPassword(resultSet.getString(3));
bean.setEmail(resultSet.getString(4));
bean.setNote(resultSet.getString(5));
}
resultSet.close();
preparedStatement.close();
return bean;
}
//getAllBeans
public List<Student> getAllStudent() throws SQLException, ClassNotFoundException{
List<Student> list=new ArrayList<Student>();
PreparedStatement preparedStatement=getDirectConnection().prepareStatement("SELECT * FROM Student");
ResultSet resultSet = preparedStatement.executeQuery();
while(resultSet.next()){
Student bean=new Student();
bean.setId(resultSet.getInt(1));
bean.setName(resultSet.getString(2));
bean.setPassword(resultSet.getString(3));
bean.setEmail(resultSet.getString(4));
bean.setNote(resultSet.getString(5));
list.add(bean);
}
resultSet.close();
preparedStatement.close();
return list;
}
//insert
public int insert(Student bean) throws SQLException, ClassNotFoundException{
PreparedStatement preparedStatement=getDirectConnection().prepareStatement("INSERT INTO Student (name, password, email, note) VALUES ( ?, ?, ?, ?)");
preparedStatement.setString(1, bean.getName());
preparedStatement.setString(2, bean.getPassword());
preparedStatement.setString(3, bean.getEmail());
preparedStatement.setString(4, bean.getNote());
int result=preparedStatement.executeUpdate();
preparedStatement.close();
return result;
}
//update
public int update(Student bean) throws SQLException, ClassNotFoundException{
PreparedStatement preparedStatement=getDirectConnection().prepareStatement("UPDATE Student SET name = ? , password = ? , email = ? , note = ? WHERE id = ?");
preparedStatement.setString(1, bean.getName());
preparedStatement.setString(2, bean.getPassword());
preparedStatement.setString(3, bean.getEmail());
preparedStatement.setString(4, bean.getNote());
preparedStatement.setInt(5, bean.getId());
int result=preparedStatement.executeUpdate();
preparedStatement.close();
return result;
}
//delete
public int delete(int pk) throws SQLException, ClassNotFoundException{
PreparedStatement preparedStatement=getDirectConnection().prepareStatement("DELETE FROM Student WHERE id = ?");
preparedStatement.setInt(1, pk);
int result=preparedStatement.executeUpdate();
preparedStatement.close();
return result;
}
}الثالث و هو صنف لا يحتوي على اي طريقه ، ويرث الصنف السابق(StudentDAO). و يفضل استخدامة في المشروع بدلا من الصنف السابق (StudentDAO). كي لا تضيع التعديلات المضافة الجديدية في الصنف (StudentDAO) عند اعادة توليد الاصناف. فتكون الاضافاة الجديدية في هذا الصنف
public class StudentExtDAO extends StudentDAO {
}قمت مؤخرا باضافة توليد لملفات EJB و غيرها ولكنها لم تكن هدف رئيسي من الاداه.
حاليا الاداه تدعم قاعدة البيانات MySQL ولم اجربها مع غيرها.
ارجوا من الجميع تجربتها و اضافة اقتراحاتكم لتطويرها ...
المرفق الاداه بصيغة JAR كما انه يحتوي على المصدر.

