2016-05-20 10 views
1

私はJavaスイング、JDBC、およびMySQLデータベースを使用して小さな在庫管理プロジェクトを作成しています。プロジェクト。私は3つのボタン、 "購入"、 "セール"と "クリア"を持っています。購入ボタンをクリックすると、商品名、価格、数量などを追加して「商品、購入」テーブルが更新されます。購入ボタンは正常に機能していますが、販売ボタンは機能していません。なぜこのエラーが発生するのですかcom.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: 'sdate' 'フィールドリスト'で不明な列

これは私のプロジェクトビューである:

enter image description here

私は販売のボタンをクリックすると、それは私にこの例外を与える:

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:不明'フィールドリスト'の列 'sdate' at sun.reflect.NativeConstructorAccessorImpl.newInstance0(ネイティブメソッド) at sun.reflect.NativeConstructorAccessorImpl.newInstance(不明なソース)sun.reflect.DelegatingConstructorAccessorImpl.newInstance(不明なソース)で0 java.lang.reflect.Constructor.newInstanceで (不明なソース)

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

でcom.imp.ProductController.SaveSale(ProductController.java:76) でCallableStatement.java:823) 。 fireActionPerformed(Unknown Source) (javax.swing.DefaultButtonModel.setPressed(Unknown))ソース) をjavax.swing.plaf.basic.BasicButtonListener.mouseReleased(不明なソース) をjava.awt.Component.processMouseEvent(不明なソース) をjavax.swing.JComponent.processMouseEvent(不明なソース) at java.awt javaのでjava.awt.Container.dispatchEventImpl(不明なソース) でjava.awt.Component.dispatchEventImpl(不明なソース) でjava.awt.Container.processEvent(不明なソース) で.Component.processEvent(不明なソース) .awt.Component.dispatchEvent(不明なソース) at java.awt.LightweightDispatcher.retargetMouseEvent(不明なソース) at java.awt.LightweightDispatcher.processMouseEvent(不明なソース) at java.awt.LightweightDispatcher .dispatchEvent(不明なソース) at java.awt.Container.dispatchEventImpl(不明なソース) at java.awt.Window.dispatchEventImpl(不明なソース) at java.awt.Component.dispatchEvent(不明なソース) at java.awt .EventQueue.dispatchEventImpl(不明なソース) at java。(未知のソース) at java.security.AccessController.doPrivileged(ネイティブメソッド) )java.awt.EventQueue $ 4.runですべてjava.security.ProtectionDomain $ JavaSecurityAccessImpl.doIntersectionPrivilege(不明なソース) ですべてjava.security.ProtectionDomain $ JavaSecurityAccessImpl.doIntersectionPrivilege(不明なソース) で (不明なソース) いるjava.awtで.EventQueue $ 4.run(不明なソース) java.security.AccessController.doPrivileged(ネイティブメソッド) java.security.ProtectionDomain $ JavaSecurityAccessImpl.doIntersectionPrivilege(不明なソース) at java.awt.EventQueue.dispatchEv java.awtでのENT(不明なソース)java.awt.EventDispatchThread.pumpOneEventForFiltersで (不明なソース)java.awt.EventDispatchThread.pumpEventsForFilterで (不明なソース)java.awt.EventDispatchThread.pumpEventsForHierarchyで (不明なソース) 。 EventDispatchThread.pumpEvents(不明なソース)java.awt.EventDispatchThread.pumpEventsで (不明なソース)java.awt.EventDispatchThread.runで (不明なソース)

どのように私はこの問題を解決することができますか?

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(これは私のFrameファイルである)

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); 
} 

}

これは私のプロダクトテーブルの構造である: enter image description here

これは私の販売テーブルの構造である: enter image description here

これは私の購入テーブルである構造: enter image description here

がここに私でありますsave_saleストアドプロシージャ構造 enter image description here

+0

タイプはsdateを使用していますが、 – scaisEdge

+0

@scaisEdgeの 'sale'テーブルには' sdate 'があります。 –

+1

コードの量を減らし、このエラーを再現するのに必要な最小値(ストアドプロシージャDDLを含む)のみを表示する必要があります。限り、あなたのストアドプロシージャ( 'save_sale')の1つに、その名前のカラムを持たないテーブルの' sdate'カラムを参照することができます。 –

答えて

2

どこかあなたは... SDATEとpdateを持っているので... SDATEとSDATEが同じではないと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); 

のためにもチェック..あなたはSDATEを使用して購入に挿入しようとしています。..購入時には列名はpdateです。

+0

私はすでにあなたが気付いているコードを変更しようとしています。同じ免除を受けています。私は新しい画像をアップロードします。これはsave_saleのストアドプロシージャテーブルです........ thnx in advance allあなた –

+0

私は答えを更新しています..オレのオススメ – scaisEdge

+0

thnx @scaisEdge今は完璧に働いています –

関連する問題