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

إدخال بيانات من ال GUI إلى قاعدة البيانات من نوع Access

بدأه mr.beshoy في 25 فبراير 2010 · 17 رد · 1,451 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

هنا برنامج بسيط يمكنك من عرض البيانات الموجود فى Database من توع access داخل ال JTable ...

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

و لكن اوجه مشكلة فى إدخال بيانات إلى ال Database

فكرت فى عمل هذه الدالة :

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

 private void insertIntoDatabase(int id, String Fname, String Lname) throws SQLException {
            id = Integer.parseInt(fields[0].getText());
            Fname = fields[1].getText();
            Lname = fields[2].getText();
            insertDataQuery = "INSERT INTO Employee VALUES(Integer.parseInt(fields[0].getText()),fields[1].getText(),fields[2].getText())";
            int result = statement.executeUpdate(insertDataQuery);
        }

لكن كيف أقوم بإدخال هذه القيم لل Database .

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

فى الكود المرفق :

هناك 3 classes ال Class DialogInsertData

هو المسئول عن إدخال البيانات ... و لكن لدى سوال : ستلاحظون فى هذا ال class إنى أقوم بكتابة جمل ال statement and connection مرة أخرى و هم موجودين بدورهم فى ال Class ResultTableModel هل من طريقة جيدة لعدم تكرارهم .

الكود فى المرفقات مع قاعدة البيانات

JTableTest.rar

#2

يا جماعة أى حد يساعدنى فى هيك الامر ..

#3

قمت بطباعة قيمة المتغير insertDataQuery لمعرفة محتواه، لأني أظن أنه من لمفروض يكون هكذا

insertDataQuery = "INSERT INTO Employee VALUES(" + Integer.parseInt(fields[0].getText()) + "," + fields[1].getText(),fields[2].getText() + ")";

تم تعديل هذه المشاركة بواسطة herch في 26 فبراير 2010 في 16:06

#4

تمام .

لكن عندما نفعل هذا

int result = statement.executeUpdate(insertDataQuery);

لتنفيذ جملة ال inserty كيف أقوم بإدخال قيم ال result إلى قاعدة البيانات ؟؟؟

شكراً

#6

ما هي المشكلة ؟؟

هل لا يتم اضافة السجل فى قاعدة البيانات ؟؟؟ اذا كان هذا فجرب تغلق ال Connection بعد تنفيذ ال method executeUpdate

سبـــــحــــان الله و بحمده سبحان الله العظيم

403100468.gif

#7

فهمت الأمر ..

الكود هذا مظبط لكن لماذا بيعطى هذا الخطأ

java.sql.SQLException: General error

الشفيرة :

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

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.swing.Box;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class InsertTest extends JDialog {

    private static final String DRIVER = "sun.jdbc.odbc.JdbcOdbcDriver";
    private static final String DRIVER_URL = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};" +
            "Dbq=Database2.mdb";
    private Connection connection;
    private Statement statement;
    private ResultSet resultSet;
    //  private ResultSetMetaData metaData;
    private JPanel mainPanel, componentPanel, labelsPanel, fieldsPanel, buttonsPanel;
    private Box labelsBox, fieldsBox, buttonsBox;
    private JLabel[] labels;
    private JTextField[] fields;
    private JButton[] buttons;
    private String[] labelNames = {"ID", "First name", "Last name"};
    private String[] buttonNames = {"ok", "again", "close"};
    private MyActionListener myActionListener;

    public InsertTest(JFrame frame) throws ClassNotFoundException, SQLException {
        myActionListener = new MyActionListener();
        intializingLabels();
        intializingFields();
        intializingButtons();
        intializingPanal();
        getContentPane().add(mainPanel);
        ///////////////////////////////////////////////////////////////
        Class.forName(DRIVER);
        connection = DriverManager.getConnection(DRIVER_URL);
        statement = connection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
                ResultSet.CONCUR_READ_ONLY);
        ///////////////////////////////////////////////////////////////

    }

    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        InsertTest dialogTest = new InsertTest(new JFrame());
        dialogTest.setSize(new Dimension(600, 300));
        dialogTest.setResizable(false);
        dialogTest.setLocationRelativeTo(null);
        dialogTest.setVisible(true);

    }

    private void intializingPanal() {
        mainPanel = new JPanel(new BorderLayout());
        componentPanel = new JPanel(new FlowLayout(80, 50, 10));
        ////////////////////////////////////////////////////////////////
        labelsPanel = new JPanel();
        labelsPanel.add(labelsBox);
        componentPanel.add(labelsPanel);
        /////////////////////////////////////////////////////////////////
        fieldsPanel = new JPanel();
        fieldsPanel.add(fieldsBox);
        componentPanel.add(fieldsPanel);
        ////////////////////////////////////////////////////////////////
        buttonsPanel = new JPanel(new FlowLayout());
        buttonsPanel.add(buttonsBox);
        mainPanel.add(buttonsPanel, BorderLayout.SOUTH);
        ////////////////////////////////////////////////////////////////
        mainPanel.add(componentPanel, BorderLayout.WEST);
    }

    private void intializingLabels() {
        labels = new JLabel[labelNames.length];
        labelsBox = Box.createVerticalBox();
        labelsBox.add(Box.createGlue());
        for (int i = 0; i < labelNames.length; ++i) {
            labels = new JLabel(labelNames);
            labels.setFont(new Font("Monospaced", Font.BOLD, 15));
            labelsBox.add(labels);
        }
    }

    private void intializingFields() {
        fields = new JTextField[labelNames.length];
        fieldsBox = Box.createVerticalBox();
        fieldsBox.add(Box.createGlue());
        for (int i = 0; i < labelNames.length; ++i) {
            fields = new JTextField(20);
            fieldsBox.add(fields);
        }
    }

    private void intializingButtons() {
        buttons = new JButton[buttonNames.length];
        buttonsBox = Box.createHorizontalBox();
        buttonsBox.add(Box.createGlue());
        for (int i = 0; i < buttonNames.length; ++i) {
            buttons = new JButton(buttonNames);
            buttons.addActionListener(myActionListener);
            buttonsBox.add(buttons);
        }
    }

    private class MyActionListener implements ActionListener {

        public void actionPerformed(ActionEvent e) {
            if (e.getSource() == buttons[0]) {
                try {
                    insertData();
                } catch (SQLException ex) {
                    ex.printStackTrace();
                }
            } else if (e.getSource() == buttons[1]) {
                Pattern p = Pattern.compile("[a-zA-Z]");
                for (int i = 0; i < labelNames.length; ++i) {
                    Matcher m = p.matcher(fields.getText());
                    boolean find = m.find();

                    while (find) {
                        fields.setText(" ");
                        find = m.find();
                    }
                }
            } else if (e.getSource() == buttons[2]) {
                System.exit(0);
            }
        }

        private void insertData() throws SQLException {
            int id = Integer.parseInt(fields[0].getText());
            String Fname = fields[1].getText();
            String Lname = fields[2].getText();
            String insertData = "INSERT INTO Employee VALUES  ( ' " + id + " ',' " + Fname + " ',' " + Lname + " ' ) ";
            int count = statement.executeUpdate(insertData);
            System.out.println(count);

        }
    }
}

شكراً

تم تعديل هذه المشاركة بواسطة mr.beshoy في 26 فبراير 2010 في 17:37

#8

ما هو صنف العمود id؟؟ هل هو varchar أم integer؟؟

#9

iDعمود من نوع AutoNumber

Fname عمود من نوع Text

Lname عمود من نوع Text

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

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

شكراً

insertIntoTable.rar

تم تعديل هذه المشاركة بواسطة mr.beshoy في 26 فبراير 2010 في 17:49

#10

إذا كان autonumber فهذا يعني أنه يضيف واحد تلقائيا كل مرة تضيف سطر، فلماذا تعطيه قيمة؟؟

جرب التالي، افترضت أن اسم العمودين هو Fname و Lname

String insertData = "INSERT INTO Employee(Fname, Lname) VALUES (' " + Fname + " ',' " + Lname + " ' ) ";
#11

حذفت ال Id

و ملئت ال 3 TextFields ثم ضغت على OK button

اعطانى هذا الخطأ

java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver] Number of query values and destination fields are not the same.

أزاى يعنى القيم مش متفقة

؟؟

#12

أين الكود؟

#13

بما ان ال ID بيضيفه تلقائيا حذفته

و أصبح كودنا الجديد كالتالى

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

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.swing.Box;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class InsertTest extends JDialog {

    private static final String DRIVER = "sun.jdbc.odbc.JdbcOdbcDriver";
    private static final String DRIVER_URL = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};" +
            "Dbq=Database2.mdb";
    private Connection connection;
    private Statement statement;
    private ResultSet resultSet;
    //  private ResultSetMetaData metaData;
    private JPanel mainPanel, componentPanel, labelsPanel, fieldsPanel, buttonsPanel;
    private Box labelsBox, fieldsBox, buttonsBox;
    private JLabel[] labels;
    private JTextField[] fields;
    private JButton[] buttons;
    private String[] labelNames = {"First name", "Last name"};
    private String[] buttonNames = {"ok", "again", "close"};
    private String[] fieldName = {"Fname", "Lname"};
    private MyActionListener myActionListener;

    public InsertTest(JFrame frame) throws ClassNotFoundException, SQLException {
        myActionListener = new MyActionListener();
        intializingLabels();
        intializingFields();
        intializingButtons();
        intializingPanal();
        getContentPane().add(mainPanel);
        ///////////////////////////////////////////////////////////////
        Class.forName(DRIVER);
        connection = DriverManager.getConnection(DRIVER_URL);
        statement = connection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
                ResultSet.CONCUR_READ_ONLY);
        ///////////////////////////////////////////////////////////////

    }

    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        InsertTest dialogTest = new InsertTest(new JFrame());
        dialogTest.setSize(new Dimension(600, 300));
        dialogTest.setResizable(false);
        dialogTest.setLocationRelativeTo(null);
        dialogTest.setVisible(true);

    }

    private void intializingPanal() {
        mainPanel = new JPanel(new BorderLayout());
        componentPanel = new JPanel(new FlowLayout(80, 50, 10));
        ////////////////////////////////////////////////////////////////
        labelsPanel = new JPanel();
        labelsPanel.add(labelsBox);
        componentPanel.add(labelsPanel);
        /////////////////////////////////////////////////////////////////
        fieldsPanel = new JPanel();
        fieldsPanel.add(fieldsBox);
        componentPanel.add(fieldsPanel);
        ////////////////////////////////////////////////////////////////
        buttonsPanel = new JPanel(new FlowLayout());
        buttonsPanel.add(buttonsBox);
        mainPanel.add(buttonsPanel, BorderLayout.SOUTH);
        ////////////////////////////////////////////////////////////////
        mainPanel.add(componentPanel, BorderLayout.WEST);
    }

    private void intializingLabels() {
        labels = new JLabel[labelNames.length];
        labelsBox = Box.createVerticalBox();
        labelsBox.add(Box.createGlue());
        for (int i = 0; i < labelNames.length; ++i) {
            labels = new JLabel(labelNames);
            labels.setFont(new Font("Monospaced", Font.BOLD, 15));
            labelsBox.add(labels);
        }
    }

    private void intializingFields() {
        fields = new JTextField[2];
        fieldsBox = Box.createVerticalBox();
        fieldsBox.add(Box.createGlue());
        for (int i = 0; i < fieldName.length; ++i) {
            fields = new JTextField(20);
            fieldsBox.add(fields);
        }
    }

    private void intializingButtons() {
        buttons = new JButton[buttonNames.length];
        buttonsBox = Box.createHorizontalBox();
        buttonsBox.add(Box.createGlue());
        for (int i = 0; i < buttonNames.length; ++i) {
            buttons = new JButton(buttonNames);
            buttons.addActionListener(myActionListener);
            buttonsBox.add(buttons);
        }
    }

    private class MyActionListener implements ActionListener {

        public void actionPerformed(ActionEvent e) {
            if (e.getSource() == buttons[0]) {
                try {
                    insertData();
                } catch (SQLException ex) {
                    ex.printStackTrace();
                }
            } else if (e.getSource() == buttons[1]) {
                Pattern p = Pattern.compile("[a-zA-Z]");
                for (int i = 0; i < labelNames.length; ++i) {
                    Matcher m = p.matcher(fields.getText());
                    boolean find = m.find();

                    while (find) {
                        fields.setText(" ");
                        find = m.find();
                    }
                }
            } else if (e.getSource() == buttons[2]) {
                System.exit(0);
            }
        }

        private void insertData() throws SQLException {
            // int id = Integer.parseInt(fields[0].getText());
            String Fname = fields[0].getText();
            String Lname = fields[1].getText();
            String insertData = "INSERT INTO Employee VALUES  (' " + Fname + " ',' " + Lname + " ' ) ";
            int count = statement.executeUpdate(insertData);
            JOptionPane.showMessageDialog(null, "you have now" + count + "rows");

        }
    }
}

فى المرفقات ايضاً

insertIntoTable.rar

#14

يا أخي إقرأ الردود جيدا

هذا ما كتبت في ردي السابق

String insertData = "INSERT INTO Employee(Fname, Lname) VALUES (' " + Fname + " ',' " + Lname + " ' ) ";

وانظر ماذا كتبت أنت

String insertData = "INSERT INTO Employee VALUES (' " + Fname + " ',' " + Lname + " ' ) ";

طبيعي أن تحصل على خطأ، بما أنه ينتظر ثلاث قيم وأنت تمرر قيمتين. يجب أن تحدد في ال query الأعمدة التي ستعطيها قيمة.

#15

أسف جداً اخ عصام تعبتك معايا .

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

إلى اللقاء فى مشاكل أخرى :lol: :)

شكراً لك

#16

ضيف try و catch لأمر تنفيذ الإستعلام وألغي التنصيص من على حقل id وهو بيمشي معك حلاوه

    	private void insertData() throws SQLException {
        	int id = Integer.parseInt(fields[0].getText());
        	String Fname = fields[1].getText();
        	String Lname = fields[2].getText();
        	String insertData = "INSERT INTO Employee VALUES( " + id + " ,' " + Fname + " ',' " + Lname + " ' ) ";
        	try{
         	statement.executeUpdate(insertData);   
        	}
        	catch(Exception ex){
            	JOptionPane.showMessageDialog(null, ex.getMessage());
        	}



    	}


HeartOutputStream myHeart;
OutputStream myHeartOutStream;

myHeartOutStream = MAllaw.getHeart().getOutputStream();
myHeart = new HeartOutputStream(myHeartOutStream);

while(myHeart.isStillBeating())
myHeart.write("I ♥ Java");

#17

شكراً جزيلاً . تم تعديل الخطأ

#18

ال autoNumber أو ال auto_increment في MySQL لا يجب إعطائها قيمة، بل مدير قواعد البيانات هو الذي يعطيها قيمة تلقائية، وإلا فما الفائدة من اختيار autonumber؟؟ اختر number عادي إذا كنت تريد أن تعطيه القيمة بنفسك

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

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

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

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

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