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

درس حول الأتصال بقاعدة البيانات Mysql

بدأه mohammeding في 4 سبتمبر 2009 · 13 رد · 5,805 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

أردت من هذا الدرس أن أوضح معلومات عن كيفية تعامل مع قاعدة معطيات mysql

بسم الله

أول شئ نحتاجه لربط جافا مع mysql لمكتبة أسمها mysql-connector-java

رابط تحميل http://dev.mysql.com/downloads/connector/j/5.0.html

بعد تحميل فك ضغظ البرنامج فيخرج لك ملف أسمه mysql-connector-java-5.0.8

أدخل للملف لتجد بعدها نسخة jar للمكتبة أسمها mysql-connector-java-5.0.8-bin

قم بعمل نسخ لها وضعها في ملف C:\Program Files\Java\jdk1.6.0\jre\lib\ext

و يتوقف هذا حسب كل مستعمل و حاسوبه

الأن أكتملنا من الشق الفيزيائي لربط

ندخل لشق البرمجي

أود أن أنوه على شيئ يجب أن تكون مثبث mysql لكي تتعامل معه

تستطيع تحميل من هذا الموقع http://dev.mysql.com/downloads/

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

الأن نصمم كلاس إتصال بقاعدة البايانات و كود هاهوا

import java.sql.*;
import java.util.Properties.*;
import javax.swing.*;
import java.util.*;




public class connect_to_db
{
	 Properties props;
	 Connection connection;
	 Statement statement;
	 PreparedStatement ps;


	 public connect_to_db()
	 {

	   props = new Properties();
	   try
		   {
			Class.forName("com.mysql.jdbc.Driver").newInstance();
			System.out.println("Good arabteam");
			try
			{
			props.put("user", "root");//  إسم المستعمل
			props.put("password", "*******");//ضع  الرقم  السري  للخادم  mysql 
			connection = DriverManager.getConnection("jdbc:mysql://localhost/ecole?useUnicode=true&characterEncoding=utf8",props);
			System.out.println("java connecté a data base mysql");
			statements();
			}
	  catch(SQLException e)
			{
			System.out.println("erreure connexion");
		   JOptionPane.showMessageDialog(null, "Informmation connection base de donnée\nErreur connaction a base de donnée \n", "connact data base",-1);
		   }
		   }
	  catch (Exception E)
		   {
			System.out.println("JDBC Driver error");
			JOptionPane.showMessageDialog(null, "Informmation connection base de donnée\nErreur connaction a driver jdbc \n", "connact data base",-1);
		   }




	 }
	 public void statements(){
		 try{
		  statement=connection.createStatement();
		 }
		 catch (SQLException actionException){
			 System.out.println("probleme statement");
		 }
	 }


}

ضع هذه الكلاس في برنامجك

وقم بتغير إسم القاعدة البيانات حسب إسم قاعدتك مثلا إسم قاعدة البيانات بتاعي هي ecole

connection = DriverManager.getConnection("jdbc:mysql://localhost/ecole?useUnicode=true&characterEncoding=utf8",props);

وبهذا نكون قد عملنا كلاس إتصال

نبدا الأن في عمليات المختلفة على قاعدة المعطيات

نبدأ أولا بي إدخال و هي عملية الأساسية

أول شئ نقوم به هو إنشاء أوبجكت على connect_to_db

وبعد ذلك إنشاء متغير من نوع string نحط عليه عملية إدخال

وكما ترى أنا أقوم بإستعانة المتغيرات من jtextfield

أدخال pn.gettext and rn.gettext هما عبارة عن إدخالان من نوع رقمي لذا نزعت منهم إقتباس

إدخال fn.gettext and hs.gettext هما عبارة عن إدخلان من نوع حرفي لذا يجب وضع إقتباس

String insertSql;
int on;
connect_to_db te=new connect_to_db();
   try
	 {

insertSql = "INSERT INTO student   VALUES (" +rn.getText() + ",'" + fn.getText()+  "'," + pn.getText () +",'" + hs.getText () +"')";
	   on = te.statement.executeUpdate(insertSql );
	   System.out.println("java  insére donneés table dans mysql");
	   JOptionPane.showMessageDialog( null, "fichie enregistré dand base de donnée!","enregistrée des donnée",1);
			 }
   catch (SQLException actionException)
	 {
   System.out.println("java ne insére pas donneés table dans mysql");
   JOptionPane.showMessageDialog(null, "error d'entreé des donneé ", "errore",0);
  }
		  }

ونأني حاليا إلى الأستعلام تقريبا نفس الشئ

 try
		{
		connect_to_db te=new connect_to_db();
		 ResultSet rs = te.statement.executeQuery("select rn,fn,n,sex from student");
		 while(rs.next())
		 {
			 String n = rs.getString("rn");
			 String a = rs.getString("fn");
			 String p = rs.getString("n");
			 String s = rs.getString("sex");
					  }

		}
		catch(SQLException actionException){
		  JOptionPane.showMessageDialog(null, "error d'requte resultat ", "errore",0);

		}

و الأن إلى عملية التحديث

connect_to_db te=new connect_to_db();
   try
	 {
		  nsertSql = "update student  set fn='" + fon.getText() +  "',pn=" + pon.getText () +",hs='" + hos.getText () +"' where rn=" +  ron.getText() +  ";";
	   on = te.statement.executeUpdate(insertSql );
	   System.out.println("java  insére donneés table dans mysql");
	   JOptionPane.showMessageDialog( null, "Save Success!","Save the Data",1);
			 }
   catch (SQLException actionException)
	 {
   System.out.println("java ne insére pas donneés table dans mysql");
   JOptionPane.showMessageDialog(null, "error d'entreé des donneé ", "errore",0);
  }

والأن إلى عملية الحذف

String sql;
int on;
try{
		connect_to_db te=new connect_to_db();
	   Sql = "delete from  student where rn=" + sel_tab + ";";
	   on = te.statement.executeUpdate(Sql );
	   dtm.removeRow( sel_tab );
		}
		catch(SQLException actionException){
		  JOptionPane.showMessageDialog(null, "Error The Delete ", "Errore",0);
		 }

أنتهى الدرس الأول و الدرس القادم الأخير سيكون حول بعض الأمثلة الوقعية لأستخدام القاعدة المعطيات mysql

بصراحة الأمثلة موجودة و لكن وقت فطور لحق

وصحا فطوركم

تم تعديل هذه المشاركة بواسطة mohammeding في 4 سبتمبر 2009 في 20:42

3
#2

بارك الله فيك يا أخي العزيز

#3

موضوع رائع أخي

قمت بالتثبيت

لكني أتمنى عليك أن تكتب حسب العادات المتبعة في الشيفرة الخاصة بجافا

مثال اسم الفئة تبدأ بالحرف الكبير

وهكذا

تحياتي

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

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

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

728x90.png

#4

السلام عليكم

أشكر أخوة على تشجيعي في عمل هذا الدرس الذي يحفزني لعمل مزيد من الدروس

الدرس اليوم يتناول أمثلة واقعية حول إستخدام جافا مع mysql

بسم الله

نبدأ أولا بي الأستعلام بحيث نقوم بعرض نتيجة الأستعلام على jtable

لنفرض اولا لدينا jtable

public javax.swing.JTable table;

على فكرة أنا أستخدم نت بينز في مشاريعي

وثاني شئ نعرف tablemodel

javax.swing.table.DefaultTableModel jdtm= new javax.swing.table.DefaultTableModel();

ونأتي حاليا إلى ملأ الجدول

		table.setModel(dtm);
		dtm.addColumn("Registration No");
		dtm.addColumn("First Name");
		dtm.addColumn("Name");
		dtm.addColumn("sex");
try
		{

		 connect_to_db te=new connect_to_db();
		 ResultSet rs = te.statement.executeQuery("select rn,fn,n,sex from student");
		 atab=0;
		 while(rs.next())
		 {
			 String n = rs.getString("rn");
			 String a = rs.getString("fn");
			 String p = rs.getString("n");
			 String s = rs.getString("sex");
			 Object obj[] = {n,a,p,s};
			 dtm.addRow(obj);
			 Object o = new Object();
		}

	  }
		catch(SQLException actionException){
		  JOptionPane.showMessageDialog(null, "error d'requte resultat ", "errore",0);

		}

وبهذا نكون قد حطينا المعلومات في jtable

لنأتي مثلا إلى عملية الحدف من الجدول مثلا هذا كود عبارة عن حادثة ل jButton

int sel_tab=table.getSelectedRow();
  int reponse = JOptionPane.showConfirmDialog(null, "				  Are you sure?", "Confirm Delet",
JOptionPane.YES_NO_CANCEL_OPTION);
	   if (reponse == JOptionPane.YES_OPTION)
	   {try{
		connect_to_db te=new connect_to_db();
	   String Sql = "delete from  student where rn=" + sel_tab + ";";
	   on = te.statement.executeUpdate(Sql );
	   dtm.removeRow( sel_tab );
		}
		catch(SQLException actionException){
		  JOptionPane.showMessageDialog(null, "Error The Delete ", "Errore",0);
		 }				   }
   else if (reponse == JOptionPane.NO_OPTION);

وبهذا نكون قد حدف سطر من الجدول بمجرد selected عليه و ضغظ على زر jButton

و نأتي حاليا إلى كيفية عمل تقرير لشهادة مدرسية لقاعدة البيانات إنطلاقا من jtable

لنقوم بعمل حادثة لي زر بحيث عند ضغظ عليه يقوم بي أنتقاء السطر selected

وعمل تقرير لذلك الطالب

pri=table.getSelectedRow();
				try
		{
		 connect_to_db te=new connect_to_db();
		 ResultSet rs = te.statement.executeQuery("select rn,fn,n from student where rn='" +   pri + "';");
		 while(rs.next())
		 {
			 String n = rs.getString("rn");
			 String a = rs.getString("fn");
			 String p = rs.getString("n");
			iReport iR= new iReport(p,a,ch_pri);
			iR.Html();


		 }
		 }
		catch(SQLException actionException){
		  JOptionPane.showMessageDialog(null, "error d'requte resultat ", "errore",0);

		}

وكما ترى في كود نقوم بتمرير عنصر للكلاس iReport

import java.io.*;
class iReport {
	public String n;
	public Writer out;
	public int re;
	public iReport(String name,String first_name,int r)
	{
	   try
	   {
		n=name;
		re=r;

		 out  = new FileWriter("src/"+name+""+r+".html");
		out.write("<html><head><title>Report Fekair</title></head><body>");
		out.write("<font siz=7><b><center>School Certificate</center></b></font>");
		out.write("<p>");
		out.write("<table cellspacing=10 cellpadding=15 align=center>");
		out.write("<tr><td><font siz=5><b>First Name :</b></font></td><td>"+first_name+"</td><td><font siz=5><b>Name :</b></font></td><td>"+name+"</td></tr>");
		out.write("<tr><td><font siz=5><b>Section :</b></font></td><td colspan=4></td></tr>");
		out.write("<tr><td><font siz=5><b>School :</b></font></td><td colspan=4><b>Faculty of Engineering and Computer Science</b></td></tr>");
		out.write("<tr><td><font siz=5><b>Signature :</font></td><td></td><td></td><td></td></tr>");
		out.write("</table></body></html>");
		out.flush();
		out.close();



	   }
	   catch (Exception e) {
	   System.out.println("In makereport"+ e);

	}
	}
	public void Html(){
String file =""+n+""+re+".html";
fekair mod =new  fekair(file);
	mod.setVisible(true);
   }

}

الكلاس iReport بحيث أن هذه الكلاس تقوم بإنشاء ملف html وتسميه حسب اسم الطالب و رقم تسجيله وبعد ذلك تقوم تمرير اسم الملف لكلاس fekair التي تحتوي بدورها على JEditorPane القارئ لملفات html وبعد ذلك نقوم بعملية الطباعة

import java.net.*;
import javax.swing.*;

import java.awt.*;

public class fekair extends javax.swing.JFrame {

	/** Creates new form fekair */
	Class c = fekair.class;
   URL ul;
	String initialURLe;
	   JFrame f;
	   Thread monThread;
	public fekair(String initialURL) {
		  initComponents();
		try
		{
			 initialURLe ="../"+initialURL+"";
			  ul= fekair.class.getResource(initialURLe);
			  htmlPane.setPage(ul);
		}
		catch(Exception ioe) {

			JOptionPane.showMessageDialog(null, "Error The file test.html  " +initialURL+ " "+ ioe, "Errore",0);

	}

	}

	/** This method is called from within the constructor to
	 * initialize the form.
	 * WARNING: Do NOT modify this code. The content of this method is
	 * always regenerated by the Form Editor.
	 */
	@SuppressWarnings("unchecked")
	// <editor-fold defaultstate="collapsed" desc="Generated Code">						  
	private void initComponents() {

		jScrollPane1 = new javax.swing.JScrollPane();
		htmlPane = new javax.swing.JEditorPane();
		jToolBar1 = new javax.swing.JToolBar();
		jButton1 = new javax.swing.JButton();
		jButton2 = new javax.swing.JButton();
		jButton3 = new javax.swing.JButton();
		jProgressBar1 = new javax.swing.JProgressBar(0,100);

		setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
		setTitle("Print Report");

		htmlPane.setEditable(false);
		jScrollPane1.setViewportView(htmlPane);

		jToolBar1.setRollover(true);

		jButton1.setText("Print");
		jButton1.setFocusable(false);
		jButton1.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
		jButton1.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
		jButton1.addActionListener(new java.awt.event.ActionListener() {
			public void actionPerformed(java.awt.event.ActionEvent evt) {
				jButton1ActionPerformed(evt);
			}
		});
		jToolBar1.add(jButton1);

		jButton2.setText("Cancel");
		jButton2.setFocusable(false);
		jButton2.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
		jButton2.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
		jToolBar1.add(jButton2);

		jButton3.setText("Exit");
		jButton3.setFocusable(false);
		jButton3.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
		jButton3.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
		jButton3.addActionListener(new java.awt.event.ActionListener() {
			public void actionPerformed(java.awt.event.ActionEvent evt) {
				jButton3ActionPerformed(evt);
			}
		});
		jToolBar1.add(jButton3);
		jToolBar1.add(jProgressBar1);

		javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
		getContentPane().setLayout(layout);
		layout.setHorizontalGroup(
			layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
			.addComponent(jScrollPane1, javax.swing.GroupLayout.Alignment.TRAILING)
			.addComponent(jToolBar1, javax.swing.GroupLayout.DEFAULT_SIZE, 711, Short.MAX_VALUE)
		);
		layout.setVerticalGroup(
			layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
			.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
				.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
				.addComponent(jToolBar1, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE)
				.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
				.addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 354, javax.swing.GroupLayout.PREFERRED_SIZE))
		);

		pack();
	}// </editor-fold>						

	private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {										 
		// TODO add your handling code here:
		//jProgressBar1.setMaximum(100);
		monThread= new Thread();
		monThread.start();
		 for (int j = 1; j < 100; j++) // on fait une boucle pour que la JProgressBar "avance"
	  {
	   jProgressBar1.setValue(j);
							try
	   {
		monThread.sleep(10);
	   }
	  catch(Exception e)
	   {
		e.printStackTrace();
	   }

	  }

		Frame f = new Frame();
	f.add(htmlPane);
		PrintJob pjob =Toolkit.getDefaultToolkit().getPrintJob(f,"Printing Test",null);

	if (pjob==null){
	return;
	}

	Graphics pg = pjob.getGraphics();
	pjob.end();
	//pg.dispose();
		jProgressBar1.setValue(0);
	}										

	private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {										 
		// TODO add your handling code here:
		 //.dispose();
		this.dispose();
	}										

	/**
	* @param args the command line arguments
	*/


	// Variables declaration - do not modify					 
	public javax.swing.JEditorPane htmlPane;
	private javax.swing.JButton jButton1;
	private javax.swing.JButton jButton2;
	private javax.swing.JButton jButton3;
	public javax.swing.JProgressBar jProgressBar1;
	private javax.swing.JScrollPane jScrollPane1;
	private javax.swing.JToolBar jToolBar1;
	// End of variables declaration				   

}

حادثة الطباعة

Frame f = new Frame();
	f.add(htmlPane);
		PrintJob pjob =Toolkit.getDefaultToolkit().getPrintJob(f,"Printing Test",null);

	if (pjob==null){
	return;
	}

	Graphics pg = pjob.getGraphics();
	pjob.end();

صورة لعمل التقرير

post-163892-1252170314_thumb.jpg

وبهذا نكون قد أنهينا الدرس لنهار اليوم

وأرجو منكم طرح أي أستفسار يخطر ببالك

وصح افطوركم

تم تعديل هذه المشاركة بواسطة علاء الصالحي في 6 سبتمبر 2009 في 00:13 — السبب: إصلاح مشكلة في تنسيق الشيفرة

1
#5

هل يمكنك تحديثنا أكثر عن الطباعة وعن المدخلات الخاصة بها

هل هذه الشيفرة لها علاقة بالأدة ireport?

بأمانة جهد تشكر عليه

أتمنى لك التوفيق السداد

تحياتي

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

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

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

728x90.png

#6

السلام عليكم

قبل كل شئ أشكركم على تشجيعي في وضع هذه الدرس

بسم الله

الشيفرة التي تؤدي عمل طباعة لا تتطلب الأدة ireport

فهي تقوم أولا بي إستيراد المتغيرات عبرconstructor كما ترى في شيفرة التالية

public iReport(String name,String first_name,int r)

بحيث هذه المتغيرات تدخل عن طريق constructor من الكلاس الأساسية

iReport iR= new iReport(p,a,ch_pri);

بحيث هذه المتغيرات خرجت عن طريق الأستعلام في قاعدة البيانات

وبعد ذلك نقوم بإنشاء ملف أسمة يكون عن طريق اسم الطالب و رقم تسجيله و ذلك لتفادي حدوث مشكل ملفين لهم نفس الأسم و يكون الملف بإمتداد html وذلك ليسهل علينا طريقة قرائته

out  = new FileWriter("src/"+name+""+r+".html");

وقمت بوضع كل ملفات في ملف اسمه src كما ترون في الشيفرة اعلى

وبعد ذلك أقوم في كتابة في الملف بلغة الترميز html وتستطيع من خلال ذلك تحديد واجهة التقرير بتاعك كأنك تبرمج صفحة الويب

out.write("<html><head><title>Report Fekair</title></head><body>");
		out.write("<font siz=7><b><center>School Certificate</center></b></font>");
		out.write("<p>");
		out.write("<table cellspacing=10 cellpadding=15 align=center>");
		out.write("<tr><td><font siz=5><b>First Name :</b></font></td><td>"+first_name+"</td><td><font siz=5><b>Name :</b></font></td><td>"+name+"</td></tr>");
		out.write("<tr><td><font siz=5><b>Section :</b></font></td><td colspan=4></td></tr>");
		out.write("<tr><td><font siz=5><b>School :</b></font></td><td colspan=4><b>Faculty of Engineering and Computer Science</b></td></tr>");
		out.write("<tr><td><font siz=5><b>Signature :</font></td><td></td><td></td><td></td></tr>");
		out.write("</table></body></html>");
		out.flush();
		out.close();

وبهذا نكون قد عملنا ملف و كتبنا فيه

وبعد ذلك نقوم بتمرير أسم الملف (التقرير) لكلاس fekair وذلك لكي نستدعي الملف

String file =""+n+""+re+".html";
fekair mod =new  fekair(file);
	mod.setVisible(true);

وكما ترى ا في الشيفرة التالية كيفية دخول أسم الملف

public fekair(String initialURL)

وبعد ذلك نقوم بعرض الملف على JEditorPane واللذي بدوره يعرض ملف كأنه متصفح على فكرة هذا الJEditorPane تستطيع عمل متصفح من خلاله

initialURLe ="../"+initialURL+"";
			  ul= fekair.class.getResource(initialURLe);
			  htmlPane.setPage(ul);

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

Frame f = new Frame();
	f.add(htmlPane);
		PrintJob pjob =Toolkit.getDefaultToolkit().getPrintJob(f,"Printing Test",null);

	if (pjob==null){
	return;
	}

	Graphics pg = pjob.getGraphics();
	pjob.end();

ولكي أطمئن الجميع عملية بناء التقارير في جافا بهذه الطريقة عملية سهلة بحيث تعطيك تحكم أكبر في شكل التقرير ولا تستدعي تدخل الأدوت و برامج و ما إلى ذلك

وأرجو منكم طرح أي أستفسار يخطر ببالك

#7

انا اعمل على مشروع جافا يربط بين الجافا والداتابيس..

واجهتني مشكلة .. اللي هي {لما انفذ الكود ;("Class.forName("com.mysql.jdbc.Driver

يطلع عندي (classnotfoundexcption) وجنني ادور حل ما حصلت

للاسف ما اقدر اخذ صورة لاني شغال على جهاز mac ..لكن هذا اللي يطلع بالضبط

java.lang.ClassNotFoundException: org.gjt.mm.mysql.Driver

(at java.net.URLClassLoader$1.run(URLClassLoader.java:202

( at java.security.AccessController.doPrivileged(Native Method

at java.net.URLClassLoader.findClass(URLClassLoader.java:190

( at java.lang.ClassLoader.loadClass(ClassLoader.java:307

( at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301

( at java.lang.ClassLoader.loadClass(ClassLoader.java:248

(at java.lang.Class.forName0(Native Method

( at java.lang.Class.forName(Class.java:169

( at methods.Main.getConnection(Main.java:38

( at methods.Main.create(Main.java:52

( at methods.Main.<init>(Main.java:22

( at methods.Main.main(Main.java:30

#8
java chaild كتب:

انا اعمل على مشروع جافا يربط بين الجافا والداتابيس..

واجهتني مشكلة .. اللي هي {لما انفذ الكود ;("Class.forName("com.mysql.jdbc.Driver

يطلع عندي (classnotfoundexcption) وجنني ادور حل ما حصلت

للاسف ما اقدر اخذ صورة لاني شغال على جهاز mac ..لكن هذا اللي يطلع بالضبط

java.lang.ClassNotFoundException: org.gjt.mm.mysql.Driver

هذا الخطا ناتج من الجمله اللتى ذكرتها

 ;("Class.forName("com.mysql.jdbc.Driver

post-217802-074888400 1278436279_thumb.j

وهذا لانك قمت بتحميل Driver ولكنه ليس موجود

فقط قم باضافته فى المكتبات الخاصه بالبرنامج

هكذا

post-217802-066822200 1278436269_thumb.j

post-217802-089136500 1278436292_thumb.j

سلام عليكم

المرفقات
AddSQLToProject.jpgforNameError.jpgLoadMySQLDriver.jpg

Software Developer
Mahmoudkelany.com


 

#9

السلام عليكم

جزاك الله خيراً اخي الكريم على هذا الموضوع المفيد جداً

انت ذكرت مثالاً على كيفية ملاء الجدول ومثلاً على كيفية حذف سجل

ولكن كيف نحدث احد ال(cell) من الجدول(jTable) مباشره بإستخدام زر معين؟

انا حاولت بهذا الكود لكن العملية لم تنجح


int sel_tab=jTable1.getSelectedRow();

myDbConnection dbconnect;
dbconnect = new myDbConnection();
ResultSet resultSet =null;
resultSet = dbconnect.excuteQuery("SELECT id, area,location, status1 FROM pledges ");
if(e.getSource()==jButton1){
try {
dbconnect.excuteUpdate("update pledges (area)" + "values (" + resultSet.getString("area") + " )whare id= "+sel_tab+"");
} catch (SQLException ex) {;}
}
}
    public void actionPerformed(ActionEvent e) {

تم تعديل هذه المشاركة بواسطة M.S.B في 2 أبريل 2011 في 14:16

#10

درس اكثر من رائع ومفيد لنا جميعا ً

بس ان شاء الله اذا وصلت لمستوى الداتا بيس راح اطلع علي الموضوع هذا من جديد باذن الله

لا تحرمنا من جديدك

#11

الكود غير واضح طبعا

لكن هناك خطأ بسيط فى الـ SQL command وهو كلمه where انت قومت بكتابتها whare

انا فكرتى فى تحديث خليه معينه

هو اننى اقوم بجلب الـ primary key الخاص بهذا الصف

واقوم بتحديث الخليه التى تم تحديدها

يعنى اقوم بتحديث العمود هذا عندما يكون الPK يساوى الرقم الذى تم اخذه من الجدول

ان لم تعمل لديك يمكنك عرض الكود الخاص بالعمليه وتحديد ماذا تريد بالظبط

لان الكود هذا غير مفهوم

Software Developer
Mahmoudkelany.com


 

#12

الاستعلام الذى كتبته يستخدم فى الادخال insert وليس التعديل

غيره الى

int viewRow = jTable1.getSelectedRow(); // view row with sort
int modelRow = jTable1.convertRowIndexToModel(viewRow); // convert


dbconnect.executeUpdate("update pledges set area ='" + jTable1.getModel().getValueAt(modelRow,1) + "' where id = " + jTable1.getModel().getValueAt(modelRow,0));

على اعتبار ان العمود الاول فى الجدول jTable1 هو رقم التعهد والعمود الثانى هو المنطقة

بالتوفيق

تم تعديل هذه المشاركة بواسطة MOHAMED FATHEI في 2 أبريل 2011 في 21:33


﴿وَمَا كَانَ اللَّهُ لِيُعَذِّبَهُمْ وَأَنْتَ فِيهِمْ ۚ وَمَا كَانَ اللَّهُ مُعَذِّبَهُمْ وَهُمْ يَسْتَغْفِرُونَ﴾

الأنفال ۳۳                                  
 

#13

جزاكم الله خير على التفاعل يا اخوان

الأخ Mahmoud Kelany

عدلت الwhere وللأسف لم يعمل بشكل صحيح

بالنسبة لبقيت كلامك فلم افهم بالظبط ما تقول :P

وهذا هو كامل الكود بإمكانك تشييكه


import java.awt.event.ActionListener;
import java.sql.*;
import java.util.*;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.table.DefaultTableModel;



/**
*
* @author user
*/
public class showp1 extends javax.swing.JFrame implements ActionListener {

/** Creates new form showp1 */
public showp1() {
initComponents();
this.setLocationRelativeTo(null);
jButton1.addActionListener(this);
}

/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {

jScrollPane1 = new javax.swing.JScrollPane();
jTable1 = new javax.swing.JTable();
jButton1 = new javax.swing.JButton();

setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
addWindowListener(new java.awt.event.WindowAdapter() {
public void windowOpened(java.awt.event.WindowEvent evt) {
formWindowOpened(evt);
}
});

jTable1.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null}
},
new String [] {
"id", "area", "location", "status"
}
));
jScrollPane1.setViewportView(jTable1);

jButton1.setText("jButton1");

javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addContainerGap(15, Short.MAX_VALUE)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jButton1)
.addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 375, javax.swing.GroupLayout.PREFERRED_SIZE))
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addContainerGap(25, Short.MAX_VALUE)
.addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 155, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(33, 33, 33)
.addComponent(jButton1)
.addGap(64, 64, 64))
);

pack();
}// </editor-fold>

private void formWindowOpened(java.awt.event.WindowEvent evt) {

myDbConnection dbconnect;
// TODO add your handling code here:
ArrayList<String> list = new ArrayList<String>();
try {

dbconnect = new myDbConnection();
ResultSet resultSet =null;
resultSet = dbconnect.excuteQuery("SELECT id, area,location, status1 FROM pledges ");
// if (resultSet.wasNull()) {
// System.out.println("wasNull");
// }

//else {
while (resultSet.next()){
list.add(resultSet.getString(1));
list.add(resultSet.getString(2));
list.add(resultSet.getString(3));
list.add(resultSet.getString(4));
// i = Long.parseLong(rs1.getString(1));
}
//}
} catch (Exception e) {
System.out.println(e);
}
String[][] record;

int myListCount = list.size()/4;
record = new String[myListCount][4];
int count = 1;
for (int ii = 1; ii<=myListCount;ii++) {
for(int i=1;i<=4;i++){
record[ii-1][i-1] = list.get(count-1);
count++;
}
}


jTable1.setModel(new DefaultTableModel(record, new String[]{"id", "area", "location", "status1"}));

}
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new showp1().setVisible(true);
}
});
}





// Variables declaration - do not modify
private javax.swing.JButton jButton1;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JTable jTable1;
// End of variables declaration

public void actionPerformed(ActionEvent e) {

myDbConnection dbconnect;
dbconnect = new myDbConnection();
ResultSet resultSet =null;
resultSet = dbconnect.excuteQuery("SELECT id, area,location, status1 FROM pledges ");
if(e.getSource()==jButton1){


try {
int srow=jTable1.getEditingRow();
int scol=jTable1.getEditingColumn();
String ss =jTable1.getModel().getValueAt(srow, scol).toString();

//int viewRow = jTable1.getSelectedRow(); // view row with sort
//int modelRow = jTable1.convertRowIndexToModel(viewRow); // convert

// System.out.print(ss);
String n = resultSet.getString("id");
String a = resultSet.getString("area");
String p = resultSet.getString("location");
String se = resultSet.getString("status1");
dbconnect.excuteUpdate("update pledges SET area="+ a +" where id= "+ss+"");

//dbconnect.excuteUpdate("update pledges set area ='" + jTable1.getModel().getValueAt(modelRow,1) + "' where id = " + jTable1.getModel().getValueAt(modelRow,0));




} catch (SQLException ex) {;}
}
}
}
import java.awt.event.ActionEvent;

الفكره في الكود انه يحضر البيانات من قاعدة البيانات ويعرضها في الجدول(jTable) ويستطيع المستخدم تعديل اي (cell) ومن ثم حفظ التعديل بإستخدام زر ال(jbutton)

طبعاً جزئية تعديل البيانات بإستخدما الزر هي المشكله معي

الأخ MOHAMED FATHEI

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

قمت بالحث في النت فوجدت هذا الكود يستخدم كثيراً ..جربته ولكنه لم يعمل معي (او بالأحرى لم اعرف كيف استخدمه)


{ return true; }
public void setValueAt(Object value, int row, int col) {
rowData[row][col] = value;
fireTableCellUpdated(row, col);
}
public boolean isCellEditable(int row, int col)

#14

بعد بحث وتقصي وجدت هذا الحل وقد عمل معي بشكل صحيح


jTable1.setModel(new DefaultTableModel(record, new String[]{"id", "area", "location", "status1"}));
public void actionPerformed(ActionEvent e) {


if(e.getSource()==jButton1){


{
jTable1.getModel().addTableModelListener(new TableModelListener() {
public void tableChanged(TableModelEvent e) {
myDbConnection dbconnect;
dbconnect = new myDbConnection();
ResultSet resultSet =null;
resultSet = dbconnect.excuteQuery("SELECT id, area,location, status1 FROM pledges ");
int row = e.getFirstRow();
int column = e.getColumn();
TableModel model = (TableModel)e.getSource();
String columnName = model.getColumnName(column);
Object data = model.getValueAt(row, column);
int viewRow = jTable1.getSelectedRow(); // view row with sort
int modelRow = jTable1.convertRowIndexToModel(viewRow); // convert

dbconnect.excuteUpdate("update pledges set area ='" + data + "' where id = '"+ jTable1.getModel().getValueAt(modelRow,0) +"'" );
System.out.println("Table value changed "+data);

}
});}}

هذا هو الكود الصحيح لتحيدث احد ال(cell) من الجدول(jTable) مباشره بإستخدام زر jButton

شكراً لكل من ساعد بالحل

بالتوفيق للجميع

تم تعديل هذه المشاركة بواسطة M.S.B في 10 أبريل 2011 في 19:31

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