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

أسئلة متعلقة باللست وانشاء جدول في قاعدة بيانات

بدأه دمعة غيم في 7 يناير 2011 · 15 رد · 1,124 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

1- كيف انفذ امر في حدث الدبل كلك على عنصر في قائمة لست؟

2- كيف اطلع معلومات (tool text tip) عن اي عنصر في قائمة لما امرر الماوس عليه؟ يعني المعلومات مو وحدة لكل عنصر.

3- كيف استخدم اختيار لست او قيمة متغير من نافذة معينة في نافذة اخرى (في الفيجوال بيسك 6 كنت احط المتغيرات قلوبال او في module ) بس كيف اسويها بالجافا

4- كيف ممكن اعمل جدول بحيث ادخل بياناته الاسم و الداتا تايب والحجم في جدول مثل الموجود في اكسس او اس كيو ال سيرفر وبعدين اسوي انشاء جدول (ياريت يكون مثال بالكود)

5- لما اضيف جدول الى الفورم واضيف الباكج الخاص فيه واعرف الجدول واعرف المودل للجدول ويطلع لي الست تيبل للجدول غير معروفة وش ممكن يكون السبب؟

سوري نسيت سؤال كمان

كيف انفذ امر في الرول باك rollback

شكرا مقدما لكل من يجيب وعفوا لو كثرت الاسئلة

تحياتي

تم تعديل هذه المشاركة بواسطة دمعة غيم في 7 يناير 2011 في 01:06

#2
دمعة غيم كتب:

1- كيف انفذ امر في حدث الدبل كلك على عنصر في قائمة لست؟

أضف MouseListener إلى القائمة، وداخل الطريقة mouseClicked، قم بالتحقق من أن عدد النقرات يساوي 2

jList1.addMouseListener(new MouseAdapter() {
	@Override
	public void mouseClicked(MouseEvent e) {
		if (e.getClickCount() == 2) {
			System.out.println("Double click on " + jList1.getSelectedValue());
		}
	}
});

دمعة غيم كتب:

2- كيف اطلع معلومات (tool text tip) عن اي عنصر في قائمة لما امرر الماوس عليه؟ يعني المعلومات مو وحدة لكل عنصر.

يجب أن تضيف MouseMotionListener، وفي كل مرة تتحرك الفأرة داخل القائمة، استرجع إحداثيات مؤشر الفأرة، وحدد ال index المطابق لهذه الإحداثيات باستعمال locationToIndex، ثم استرجع القيمة الموجودة في هذا ال index وأظهرها في ال tooltip

jList1.addMouseMotionListener(new MouseMotionAdapter() {
	@Override
	public void mouseMoved(MouseEvent e) {
		int index = jList1.locationToIndex(e.getPoint());
		String value = jList1.getModel().getElementAt(index).toString();
		jList1.setToolTipText(value);
	}
});

بالنسبة للباقي فلم أفهم أغلب ما قلت blink.gif

#3

أشكرك اخي عالاجابة

السؤال الثالث يعني لو عندي في البرنامج 2 فورم (نافذتين) الاولى فيها متغير مثلا فلما انفذ تتغير قيمة هذا المتغير . ابغى اضغط على زر ينقلني الى النافذة الثانية واستخدم في النافذة الثانية القيمة الجدية للمتغير

السؤال الرابع ابغى اسوي انشاء جدول في قاعدة بيانات بس المستخدم هو اللي بيدخل اسم الجدول واسم الحقول والداتا تايب تبعهم والحجم بنفس الفكرة تبع الاكسس (و لو فيه فكرة غير اوك بس المهم اسمح له بالتعديل في الجدول (اسماء الحقول او نوعهم او حجمهم ) قبل ما يضغط على زر انشاء جدول.

يعني انا لو سويت الجدول ابغى اتراجع عنه وش اسوي؟

السؤال الخامس ابغى اعرض بيانات جدول في jTable نفذت نفس الخطوات الموجودة هنا بالمنتدى وباكثر من مكان بس ما ضبطت معايا الطريقة

ارجو ان تكون الاسئلة واضحة

تحياتي واكرر شكري

#4

لنفترض أن لديك نافذتين JFrame1 و JFrame2، ومتغير String في JFrame1 تريد تمريره إلى JFrame2، يكفي أن تنشئ constructor ينتظر String parameter، وعندما تنشئ كائن JFrame2، تمرر له المتغير String

public class JFrame1 extends JFrame {

	String x = "blabla";

	//.....

	private void actionPerformed(ActionEvent evt) {
		JFrame2 f = new JFrame2(x);
		f.setVisible(true);
	}
}

-------------------------

public class JFrame2 extends JFrame {


	public JFrame2(String x) {
    	//......
		System.out.println(x);
	}
}

ما الذي يطرح مشكلا في السؤال الرابع؟ يكفي أن تقوم ببناء ال query حسب اختيارات المستعمل

اقتباس
السؤال الخامس ابغى اعرض بيانات جدول في jTable نفذت نفس الخطوات الموجودة هنا بالمنتدى وباكثر من مكان بس ما ضبطت معايا الطريقة

ممكن تعرض الكود الذي استعملت؟

تم تعديل هذه المشاركة بواسطة herch في 7 يناير 2011 في 11:02

#5

عفوا عالتأخير

    try{

          String forName="com.mysql.jdbc.Driver";
          String url="jdbc:mysql://localhost/pepole?" ;
             //  "user=as&passwor=as";
       DefaultTableModel dtm=new DefaultTableModel();

          Class.forName(forName);

            Connection con = DriverManager.getConnection(url);
            System.out.println("Connected");
            Statement st = con.createStatement();

      //     dtm.setColumnIdentifiers(model);


    String SelectStr="Select * from person;";
    Object[] rows=new Object[3];
    ResultSet rs=st.executeQuery(SelectStr);
    jTable1.setModel(dtm);
    int i=0;
        while (rs.next())
        {
               System.out.println(rs.getString(i+1)+ "     ");
               System.out.println("Done");
               rows[0] =rs.getRowId(1);
               rows[1] =rs.getRowId(2);
               rows[2] =rs.getRowId(3);

               dtm.addRow(rows);
               System.out.println("Done2");
               System.out.println();
    //jTable1.setModel(dtm);

        }
        st.close();
        con.close();
        }
       catch (SQLException e) {

            System.out.println("SQL Exception: "+ e.toString());

        } catch (ClassNotFoundException cE) {

            System.out.println("Class Not Found Exception: "+cE.toString());


        }

هذه الجملة

      //     dtm.setColumnIdentifiers(model);

لم يتعرف عليها النت بينز ليش؟

ولما انفذ يطلع لي الرسالة

SQL Exception: java.sql.SQLFeatureNotSupportedException

على الجملة

               dtm.addRow(rows);

ايضا اخي كيف اتراجع عن امرر في الداتا بيز من قبل احد جاوبني وقالي سوي الامر في الرول باك بس كيف اسويه؟

وعفوا عالازعاج

#6

هل مررت مصفوفة للطريقة setColumnIdentifiers؟؟

على العموم هذا مثال يقوم بإظهار هيكل جدول ما في JTable. يبدو أن هذا ما تريد فعله.

أيضا تعود على مراجعة ال documentation، لأنها أحسن مصدر للمعلومات حول فئات الجافا http://download.orac...ase/6/docs/api/

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.Vector;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
/**
 *
 * @author issam
 */
public class NewClass {

	public NewClass() throws ClassNotFoundException, SQLException {
		JFrame frm = new JFrame();
		DefaultTableModel dtm = new DefaultTableModel();
		JTable tbl = new JTable(dtm);

		String forName = "com.mysql.jdbc.Driver";
		String url = "jdbc:mysql://localhost/test";	//The database name is test, change it to your convenience

		Class.forName(forName);

		Connection con = DriverManager.getConnection(url, "root", "4c3der");	//username is "root" with empty password, put yours

		String sql = "desc zozo";	//this query describe the structure of a table named "zozo". change it to a existant table in your base
		PreparedStatement ps = con.prepareStatement(sql);
		ResultSet rs = ps.executeQuery();
		ResultSetMetaData meta = rs.getMetaData();	//We get the metadata of the resultset, which ive us the possibility to know the number of columns, their name...
		int colCount = meta.getColumnCount();
		Vector<String> columns = new Vector<String>();
		for (int i = 1; i <= colCount; i++) {
			columns.add(meta.getColumnName(i));
		}
		dtm.setColumnIdentifiers(columns);
		Object[] rowData = new Object[colCount];
		while(rs.next()) {
			for (int i = 1; i <= colCount; i++) {
				rowData[i-1] = rs.getObject(i);
			}
			dtm.addRow(rowData);
		}
		frm.add(new JScrollPane(tbl));

		frm.setSize(600, 400);
		frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frm.setVisible(true);
	}

	public static void main(String[] args) {
		try {
			new NewClass();
		} catch (ClassNotFoundException ex) {
			ex.printStackTrace();
		} catch (SQLException ex) {
			ex.printStackTrace();
		}
	}
}

بالنسبة لل transaction، فهي تستعمل عندما تكون هناك سلسلة من الأوامر sql المرتبطة فيما بينها، لكن يبدو لي أنك تريد أن تنفذ أمر واحد في كل مرة. يكفي أن تخزن الأمر sql في الذاكرة وتعدل فقط ال JTable، ولا تنفذه حتى يقوم المستخدم بتأكيد التغييرات.

تم تعديل هذه المشاركة بواسطة herch في 8 يناير 2011 في 01:39

#7

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

اما الترانزاكشن فمالها علاقة بالجدول اللي بعرضه لاني بسوي create table وبعدين امر اخر هو insert ومافي عرض للبيانات

فما احتاجه هو عندي textArea وعندي زرين واحد Testوالاخر Execute الييزور يكتب جملة ال SQL في مكان الكتابة ويضغط على احد الزرين

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

ان شاء الله قدرت اوصل الفكرة

اما الجدول فراح انفذه الحين

اما السؤال الرابع

فابغى زي كده لاحظ ان الداتيب يكون كمبو بوكس

187064250.jpg

تحياتي

#8

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

؟؟؟؟؟؟؟؟؟؟؟

#9

:sleep: هل قرأت الكود أصلا؟ استعمل SHIFT+F6 أو Run File. يوجد تعديلات يجب أن تقوم بها.

على العموم الكود لن يفيدك. لو كنت وضحت ما تريد من الأول لما كانت هناك إضاعة للوقت

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

لا تقم فقط بالنسخ واللصق. غير الكود حتى يلائمك. غير إسم المتغير jList1 باسم القائمة التي تستعمل. أو ضع الكود الذي تستعمل

إضافة checkbox إلى الجدول : /index.php?showtopic=214692

إضافة combobox إلى الجدول : http://download.oracle.com/javase/tutorial/uiswing/components/table.html#combobox

#10

أخي اشكر لك تفاعلك

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

لكن المشكلة التي يجب حلها اولا هي اظهار بيانات الجدول

لانها ما تظهر ولا ادري وش الخطأ

        try{
       String forName="com.mysql.jdbc.Driver";
       String url="jdbc:mysql://localhost/pepole" ;
       DefaultListModel model=new DefaultListModel();
       Object modArr[]=new Object[3];
       model.addElement("Id");
       model.addElement("Name");
       model.addElement("Phone");
       Class.forName(forName);

       for (int i=0;i<model.getSize();i++)
         modArr=model.getElementAt(i);
       DefaultTableModel dtm=new DefaultTableModel(modArr,0);

           Connection con = DriverManager.getConnection(url);
            System.out.println("Connected");
            Statement st = con.createStatement();

      //     dtm.setColumnIdentifiers(model);


        String SelectStr="Select * from person;";
    Object[] rows=new Object[3];
    ResultSet rs=st.executeQuery(SelectStr);
    jTable1.setModel(dtm);
    int i=0;
        while (rs.next())
        {
               System.out.println(rs.getString(i+1)+ "     ");
               rows[0] =rs.getRowId(1);
               rows[1] =rs.getRowId(2);
               rows[2] =rs.getRowId(3);

               dtm.addRow(rows);
               System.out.println();
   // jTable1.setModel(dtm);

        }
        st.close();
        con.close();
        }
       catch (SQLException e) {

            System.out.println("SQL Exception: "+ e.toString());

        } catch (ClassNotFoundException cE) {

            System.out.println("Class Not Found Exception: "+cE.toString());


        }

ممكن اعرف الخطأ اللي عندي لاني تعبت اقارن ما كتبت مع ماالغير مسووين الخطأ يطلع في الجملة

               dtm.addRow(rows);

يعني يغير اسماء الكولم بس مايظهر البيانات

#11

لماذا تستعمل getRowId؟ استعمل getString إذا كانت الأعمدة varchar

rows[0] =rs.getString(1);
rows[1] =rs.getString(2);
rows[2] =rs.getString(3);

ما هي رسالة الخطأ التي تظهر لك؟

1
#12

هذه هي الرسالة

SQL Exception: java.sql.SQLFeatureNotSupportedException

طيب ماقلت لي اخي وين اسوي الليسنر

ما عرفت وين اضيفها

#13

لنفترض القائمة إسمها myJList، في ال constructor الخاص بالنافذة التي توجد فيها القائمة، ضع هذا الكود

myJList.addMouseMotionListener(new MouseMotionAdapter() {
        @Override
        public void mouseMoved(MouseEvent e) {
                int index = jList1.locationToIndex(e.getPoint());
                String value = jList1.getModel().getElementAt(index).toString();
                jList1.setToolTipText(value);
        }
});

myJList.addMouseListener(new MouseAdapter() {
        @Override
        public void mouseClicked(MouseEvent e) {
                if (e.getClickCount() == 2) {
                        System.out.println("Double click on " + jList1.getSelectedValue());
                }
        }
});

طبعا ضع مكان myJList إسم القائمة لديك

#14

شكرا اخي على الاجابة

الجدول ظهرت بياناته

اما الليسنر فما ظبط مطلع لي خط احمر تحت كل الجمل انا الليست عندي اسمها jList1 فحطيتها مكان myJList بس ما ظبطت

public class CreateTable extends javax.swing.JFrame {

    /** Creates new form CreateTable */
    public CreateTable() {
        initComponents();

        jList1.addMouseMotionListener(new MouseMotionAdapter() {
        @Override
        public void mouseMoved(MouseEvent e) {
                int index = jList1.locationToIndex(e.getPoint());
                String value = jList1.getModel().getElementAt(index).toString();
                jList1.setToolTipText(value);
        }
});

jList1.addMouseListener(new MouseAdapter() {
        @Override
        public void mouseClicked(MouseEvent e) {
                if (e.getClickCount() == 2) {
                        System.out.println("Double click on " + jList1.getSelectedValue());
                }
        }
});

    }

فلا ادري مالخطأ

اسفة

#15

إذا كنت تستعمل Netbeans، إفتح الملف ثم اضغط على SHIFT+ALT+I، هذا سيقوم بإضافة ال imports اللازمة.

#16

ضغطت الارزار بس ما صار شي

كمان الجدول لما حطيته في الكونستركتر ما ضبط :ohmy: :ohmy:

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

هذا هو كود الكونستركتر

public ShowTable(String forName,String url,String sqlStr,DefaultListModel model){

         try{

       Object modArr[]=new Object[model.getSize()];

       for (int i=0;i<model.getSize();i++)
         modArr=model.getElementAt(i);

       DefaultTableModel dtm=new DefaultTableModel(modArr,0);

           Connection con = DriverManager.getConnection(url);
            System.out.println("Connected");
            Statement st = con.createStatement();

       Object[] rows=new Object[model.getSize()];
       ResultSet rs=st.executeQuery(sqlStr);
       jTable1.setModel(dtm);
       int i=0;
       while (rs.next())
        {
               System.out.println(rs.getString(i+1)+ "     ");
               for(i=1;i<model.getSize()+1;i++)
               rows[i-1] =rs.getString(i);

               dtm.addRow(rows);
               System.out.println();
   // jTable1.setModel(dtm);

        }
        st.close();
        con.close();
        }
       catch (SQLException e) {

            System.out.println("SQL Exception: "+ e.toString());

        } catch (Exception cE) {

            System.out.println("Class Not Found Exception: "+cE.toString());


        }

    }

وفي النافذة الاخرى في حدث النقر على زر كتبت الكود

 String SelectStr="Select * from "+ jComboBox1.getSelectedItem()+";";

    ShowTable showTable=new ShowTable(forName1,url1,SelectStr,model1);
    showTable.setVisible(true);

    showTable.show(true);

والنتيجة النافذة تظهر فاضية بدون اي ادوات !!!!!!!!!

والرسالة التي تظهر هي:

Class Not Found Exception: java.lang.NullPointerException

اسفة على الازعاج

بس ابغى اناقش يوم الاربعاء ولازم اخلص في هاليومين

تحياتي

تم تعديل هذه المشاركة بواسطة دمعة غيم في 9 يناير 2011 في 03:43

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…