1
votes

I am making a small inventory management project using Java swing, JDBC and a MySQL database in my project. I have three buttons, "Purchase", "Sale" and "Clear". If I click the purchase button then it updates my "product, purchase" table by adding the product name, price, quantity etc. The purchase button is working properly but the sale button is not working.

This is my project view:

enter image description here

When I click my Sale button it gives me this Exception:

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'sdate' in 'field list' at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) at java.lang.reflect.Constructor.newInstance(Unknown Source)

at com.mysql.jdbc.Util.handleNewInstance(Util.java:404) at com.mysql.jdbc.Util.getInstance(Util.java:387) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:942) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3966) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3902) at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2526) at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2673) at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2549) at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1861) at com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:1192) at com.mysql.jdbc.CallableStatement.execute(CallableStatement.java:823) at com.imp.ProductController.SaveSale(ProductController.java:76) at com.imp.Inventory$3.actionPerformed(Inventory.java:154)

at javax.swing.AbstractButton.fireActionPerformed(Unknown Source) at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source) at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source) at javax.swing.DefaultButtonModel.setPressed(Unknown Source) at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source) at java.awt.Component.processMouseEvent(Unknown Source) at javax.swing.JComponent.processMouseEvent(Unknown Source) at java.awt.Component.processEvent(Unknown Source) at java.awt.Container.processEvent(Unknown Source) at java.awt.Component.dispatchEventImpl(Unknown Source) at java.awt.Container.dispatchEventImpl(Unknown Source) at java.awt.Component.dispatchEvent(Unknown Source) at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source) at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source) at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source) at java.awt.Container.dispatchEventImpl(Unknown Source) at java.awt.Window.dispatchEventImpl(Unknown Source) at java.awt.Component.dispatchEvent(Unknown Source) at java.awt.EventQueue.dispatchEventImpl(Unknown Source) at java.awt.EventQueue.access$500(Unknown Source) at java.awt.EventQueue$3.run(Unknown Source) at java.awt.EventQueue$3.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source) at java.awt.EventQueue$4.run(Unknown Source) at java.awt.EventQueue$4.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source) at java.awt.EventQueue.dispatchEvent(Unknown Source) at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) at java.awt.EventDispatchThread.pumpEvents(Unknown Source) at java.awt.EventDispatchThread.pumpEvents(Unknown Source) at java.awt.EventDispatchThread.run(Unknown Source)

How can I solve this problem?

Here is my source code:

IMP/src/com/imp/dao/DatabaseConnectionHelper.java

package com.imp.dao;

import java.sql.Connection;
import java.sql.DriverManager;

public class DatabaseConnectionHelper {
    public static void main(String[] args) throws Exception {
        getConnection();

    }
    public static Connection getConnection() throws Exception {
        try {
            String driver = "com.mysql.jdbc.Driver";
            String url = "jdbc:mysql://localhost:3306/imp";
            String username = "root";
            String password = "password";
            Class.forName(driver);

            Connection conn = DriverManager.getConnection(url, username, password);
            System.out.println("Database Connected");
            return conn;
        } 
        catch (Exception e) {
            System.out.println(e);
        }
        return null;
    }
}

/IMP/src/com/imp/ProductController.java

package com.imp;

import java.awt.List;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

import javax.swing.DefaultComboBoxModel;
import javax.swing.JComboBox;

import com.imp.dao.DatabaseConnectionHelper;
import com.mysql.jdbc.CallableStatement;

public class ProductController {
    public static boolean SavePname ( String pname ) throws SQLException {
        Connection myConn = null;
        CallableStatement myCsmt = null;
        boolean check = true;

        try {
            myConn = DatabaseConnectionHelper.getConnection();
            myCsmt = (CallableStatement) myConn.prepareCall("{ CALL save_product(?) }");

            myCsmt.setString(1, pname);
            check = myCsmt.execute();
        } 
        catch (Exception exp) {
            exp.printStackTrace();
        }
        finally{
            Close (myConn, myCsmt);
        }
        return check;
    }

    public static boolean SavePurchase ( String pname, String price, String pdate, String qty ) throws SQLException {
        Connection myConn = null;
        CallableStatement myCsmt = null;
        boolean check = true;

        try {
            myConn = DatabaseConnectionHelper.getConnection();
            myCsmt = (CallableStatement) myConn.prepareCall("{ CALL save_purchase(getProductid(?), ?, ?, ?) }");

            myCsmt.setString(1, pname);
            myCsmt.setString(2, price);
            myCsmt.setString(3, pdate);
            myCsmt.setString(4, qty);

            check = myCsmt.execute();
        } 
        catch (Exception exp) {
            exp.printStackTrace();
        }
        finally{
            Close (myConn, myCsmt);
        }
        return check;
    }

    public static boolean SaveSale ( String pname, String price, String Sdate, String qty ) throws SQLException {
        Connection myConn = null;
        CallableStatement myCsmt = null;
        boolean check = true;

        try {
            myConn = DatabaseConnectionHelper.getConnection();
            myCsmt = (CallableStatement) myConn.prepareCall("{ CALL save_sale(getProductid(?), ?, ?, ?) }");

            myCsmt.setString(1, pname);
            myCsmt.setString(2, price);
            myCsmt.setString(3, Sdate);
            myCsmt.setString(4, qty);

            check = myCsmt.execute();
        } 
        catch (Exception exp) {
            exp.printStackTrace();
        }
        finally{
            Close (myConn, myCsmt);
        }
        return check;
    }

    public static void LoadComboBox ( JComboBox combo ) throws SQLException {
        Connection myConn = null;
        CallableStatement myCsmt = null;
        ResultSet myRs = null;

        try {
            myConn = DatabaseConnectionHelper.getConnection();
            myCsmt = (CallableStatement) myConn.prepareCall("{ CALL listProduct() }");

            myCsmt.execute();
            myRs = myCsmt.getResultSet();

           ArrayList pList = new ArrayList();

           while ( myRs.next() ) {
               pList.add(myRs.getString(1));
           }

           combo.setModel(new DefaultComboBoxModel(pList.toArray()));
           combo.insertItemAt("Select one", 0);
           combo.setSelectedIndex(0);
       } 
       catch (Exception exp) {
           exp.printStackTrace();
       }
       finally{
           Close (myConn, myCsmt, myRs);
       }
   }


   private static void Close(Connection myConn, CallableStatement myStmt)
        throws SQLException {

       if (myStmt != null) {
           myStmt.close();
       }

       if (myConn != null) {
           myConn.close();
       }
    }

    private static void Close(Connection myConn, CallableStatement myStmt, ResultSet myRs)
        throws SQLException {

        if (myStmt != null) {
            myStmt.close();
        }

        if (myConn != null) {
            myConn.close();
        }

        if (myRs != null) {
            myRs.close();
        }
    }
}

/IMP/src/com/imp/Inventory.java (this is my Frame file)

package com.imp;

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.SQLType;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;

import com.mysql.jdbc.CallableStatement;

import javax.swing.GroupLayout;
import javax.swing.GroupLayout.Alignment;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JComboBox;
import javax.swing.LayoutStyle.ComponentPlacement;
import javax.swing.JTextField;
import javax.swing.JButton;
import java.awt.event.ActionListener; 
import java.awt.event.ActionEvent;
import java.awt.event.ItemListener;
import java.awt.event.ItemEvent;
import com.imp.dao.DatabaseConnectionHelper;
public class Inventory extends JFrame {

    private JPanel contentPane;
    private JTextField PriceTextField;
    private JTextField QtyTextField;
    private JTextField DateTextField;

/**
 * Launch the application.
 */
public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
        public void run() {
            try {
                Inventory frame = new Inventory();
                frame.setVisible(true);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });
}

/**
 * Create the frame.
 * @throws SQLException 
 */
public Inventory() throws SQLException {
    setTitle("Inventory Management System");
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setBounds(100, 100, 469, 356);
    contentPane = new JPanel();
    contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
    setContentPane(contentPane);

    JLabel lblProductName = new JLabel("Product Name:");

    JComboBox comboBox = new JComboBox();

    comboBox.setEditable(true);

    JLabel lblNewLabel = new JLabel("Available Quantity:");

    JLabel lblNewLabel_1 = new JLabel("AVG Purchase Price:");

    JLabel lblNewLabel_2 = new JLabel("Price:");

    JLabel lblNewLabel_3 = new JLabel("Quantity:");

    JLabel lblNewLabel_4 = new JLabel("Date:");

    JLabel lbQty = new JLabel("");

    JLabel lbPrice = new JLabel("");

    PriceTextField = new JTextField();
    PriceTextField.setColumns(10);

    QtyTextField = new JTextField();
    QtyTextField.setColumns(10);

    DateTextField = new JTextField();
    DateTextField.setColumns(10);

    JButton btnPurchase = new JButton("Purchase");
    btnPurchase.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            boolean check = false;

            if ( comboBox.getSelectedIndex() < 0 ){
                try {
                    ProductController.SavePname(comboBox.getSelectedItem().toString());
                } 
                catch (SQLException e) {    
                    e.printStackTrace();
                }
            }

            try {
                check = ProductController.SavePurchase(comboBox.getSelectedItem().toString(), 
                        PriceTextField.getText(), DateTextField.getText(), QtyTextField.getText());
            } 
            catch (SQLException e) {
                e.printStackTrace();
            }

            if (!check){
                JOptionPane.showMessageDialog(rootPane, "Purchase Save SuccessFully.....!!....");
                // By this method we can load all product from our database
                try {
                    ProductController.LoadComboBox(comboBox);
                    Clear();
                } 
                catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }

        private void Clear() {
            comboBox.setSelectedIndex(0);
            lbQty.setText("");
            lbPrice.setText("");
            PriceTextField.setText("");
            QtyTextField.setText("");
            DateTextField.setText("");
        }
    });

    JButton btnSale = new JButton("Sale");
    btnSale.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {

            boolean check = false;

            if ( comboBox.getSelectedIndex() < 0 ){
                try {
                    ProductController.SavePname(comboBox.getSelectedItem().toString());
                } 
                catch (SQLException e) {    
                    e.printStackTrace();
                }
            }

            try {
                check = ProductController.SaveSale(comboBox.getSelectedItem().toString(), 
                        PriceTextField.getText(), DateTextField.getText(), QtyTextField.getText());
            } 
            catch (SQLException e) {
                e.printStackTrace();
            }

            if (!check){
                JOptionPane.showMessageDialog(rootPane, "Sale Save SuccessFully.....!!....");
                // By this method we can load all product from our database
                try {
                    ProductController.LoadComboBox(comboBox);
                    Clear();
                } 
                catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }

        private void Clear() {
            comboBox.setSelectedIndex(0);
            lbQty.setText("");
            lbPrice.setText("");
            PriceTextField.setText("");
            QtyTextField.setText("");
            DateTextField.setText("");
        }
    });

    comboBox.addItemListener(new ItemListener() {
        @SuppressWarnings({ "null", "resource" })
        public void itemStateChanged(ItemEvent arg0) {
            if ( comboBox.getSelectedIndex() > 0 ) {
                Connection myConn = null;
                CallableStatement myCsmt = null;
                ResultSet myRs = null;

                try {
                    myConn = DatabaseConnectionHelper.getConnection();
                    myCsmt = (CallableStatement) myConn.prepareCall("{?= call getProductQty(?)}");

                    myCsmt.registerOutParameter(1, java.sql.Types.INTEGER);
                    myCsmt.setString(2, comboBox.getSelectedItem().toString());

                    myCsmt.execute();

                    int output = myCsmt.getInt(1);
                    //JLabel lbQty = null;
                    //JLabel lbPrice = null;

                    lbQty.setText(String.valueOf(output));

                    //
                    myCsmt = (CallableStatement) myConn.prepareCall("{CALL avg_price(getProductid(?))}");
                    myCsmt.setString(1, comboBox.getSelectedItem().toString());
                    myCsmt.execute();

                    myRs = myCsmt.getResultSet();

                    while ( myRs.next() ) {
                        lbPrice.setText(myRs.getString(1));
                    }
                } 
                catch (Exception e) {
                    e.printStackTrace();
                }
                finally{
                    try {
                        myConn.close();
                        myCsmt.close();
                        myRs.close();
                    } 
                    catch (SQLException e) {
                        e.printStackTrace();
                    }
                }
            }

        }
    });


    JButton btnClear = new JButton("Clear");
    GroupLayout gl_contentPane = new GroupLayout(contentPane);
    gl_contentPane.setHorizontalGroup(
        gl_contentPane.createParallelGroup(Alignment.LEADING)
            .addGroup(gl_contentPane.createSequentialGroup()
                .addContainerGap()
                .addGroup(gl_contentPane.createParallelGroup(Alignment.LEADING)
                    .addComponent(lblProductName)
                    .addComponent(lblNewLabel)
                    .addComponent(lblNewLabel_1)
                    .addComponent(lblNewLabel_2)
                    .addComponent(lblNewLabel_3)
                    .addComponent(lblNewLabel_4)
                    .addComponent(btnPurchase))
                .addGap(57)
                .addGroup(gl_contentPane.createParallelGroup(Alignment.TRAILING)
                    .addComponent(lbPrice, GroupLayout.DEFAULT_SIZE, 241, Short.MAX_VALUE)
                    .addComponent(lbQty, GroupLayout.DEFAULT_SIZE, 241, Short.MAX_VALUE)
                    .addComponent(DateTextField, 241, 241, 241)
                    .addComponent(QtyTextField, 241, 241, 241)
                    .addComponent(PriceTextField, 241, 241, 241)
                    .addComponent(comboBox, 0, 241, Short.MAX_VALUE)
                    .addGroup(gl_contentPane.createSequentialGroup()
                        .addGap(25)
                        .addComponent(btnSale)
                        .addPreferredGap(ComponentPlacement.RELATED, 106, Short.MAX_VALUE)
                        .addComponent(btnClear)))
                .addContainerGap(144, Short.MAX_VALUE))
    );
    gl_contentPane.setVerticalGroup(
        gl_contentPane.createParallelGroup(Alignment.LEADING)
            .addGroup(gl_contentPane.createSequentialGroup()
                .addContainerGap()
                .addGroup(gl_contentPane.createParallelGroup(Alignment.BASELINE)
                    .addComponent(lblProductName)
                    .addComponent(comboBox, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(ComponentPlacement.UNRELATED)
                .addGroup(gl_contentPane.createParallelGroup(Alignment.BASELINE)
                    .addComponent(lblNewLabel)
                    .addComponent(lbQty, GroupLayout.PREFERRED_SIZE, 21, GroupLayout.PREFERRED_SIZE))
                .addGap(18)
                .addGroup(gl_contentPane.createParallelGroup(Alignment.BASELINE)
                    .addComponent(lblNewLabel_1)
                    .addComponent(lbPrice, GroupLayout.PREFERRED_SIZE, 21, GroupLayout.PREFERRED_SIZE))
                .addGap(18)
                .addGroup(gl_contentPane.createParallelGroup(Alignment.BASELINE)
                    .addComponent(lblNewLabel_2)
                    .addComponent(PriceTextField, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
                .addGap(18)
                .addGroup(gl_contentPane.createParallelGroup(Alignment.BASELINE)
                    .addComponent(lblNewLabel_3)
                    .addComponent(QtyTextField, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
                .addGap(18)
                .addGroup(gl_contentPane.createParallelGroup(Alignment.TRAILING)
                    .addComponent(lblNewLabel_4)
                    .addComponent(DateTextField, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(ComponentPlacement.RELATED, 50, Short.MAX_VALUE)
                .addGroup(gl_contentPane.createParallelGroup(Alignment.BASELINE)
                    .addComponent(btnPurchase)
                    .addComponent(btnClear)
                    .addComponent(btnSale))
                .addGap(48))
    );
    contentPane.setLayout(gl_contentPane);

    // By this method we can load all product from our database
    ProductController.LoadComboBox(comboBox);
}

}

This is my Product Table Structure: enter image description here

This is my Sale Table Structure: enter image description here

This is my Purchase Table Structure: enter image description here

Here is my save_sale storeed procedure structure enter image description here

1
You have a type are using sdate but you have pdate - ScaisEdge
@scaisEdge that sale table has an sdate. - Mark Rotteveel
You need to reduce the amount of code and only show the minimum required to reproduce this error (including the stored procedure DDL). As far as I can tell one of your stored procedures (save_sale) references a column sdate on a table that doesn't have a column with that name. - Mark Rotteveel
I have posted an asnwer hope is useful - ScaisEdge
Please post the DDL as code, not as an image. The problem BTW is that your purchase table doesn't have a column sdate, so you need to fix that stored procedure to use pdate. - Mark Rotteveel

1 Answers

2
votes

Somewhere you have Sdate and pdate .. so .. sdate and Sdate are not the same and check also for pdate

    try {
        myConn = DatabaseConnectionHelper.getConnection();
        myCsmt = (CallableStatement) myConn.prepareCall("{ CALL save_sale(getProductid(?), ?, ?, ?) }");

        myCsmt.setString(1, pname);
        myCsmt.setString(2, price);
        myCsmt.setString(3, Sdate); /// this one  
        myCsmt.setString(4, qty);

Looking to your image .. you are try to insert in purchase using sdate .. but in purchase the column is named pdate ..