2017-05-02 11 views
1

私のデータベースには、スタッフが新しい注文を入力するために使用できる注文テーブルがあります。この注文テーブルは、在庫データを保持する在庫テーブルにリンクしています。製品テーブル。私は注文を私の注文表に追加することができますが、私は更新する在庫量を得ることができません。これはこれまでの私の方法です。ユーザ入力による別のデータベーステーブル内の在庫金額の更新

@FXML 
    public void AddOrder(ActionEvent event) { 


     String orderID= orderBox.getText(); 
     String customerID = customerBox.getText(); 
     String productID = productBox.getText(); 
     String amount = amountBox.getText(); 
     String cost = costBox.getText(); 
     String date = dateBox.getText(); 





     dc = new Database(); 



     try { 
     c = dc.Connect(); 
     query = c.prepareStatement("INSERT INTO ordertable (orderID,customerID,productID,Amount,Cost, Date)VALUES(?,?,?,?,?,?)"); 
     update=c.prepareStatement ("UPDATE inventory set stockAmount ="+amount+" WHERE productID ="+productID+""); 
     query.setString(1, orderID); 
     query.setString(2, customerID); 
     query.setString(3, productID); 
     query.setString(4, amount); 
     query.setString(5, cost); 
     query.setString(6, date); 
     query.executeUpdate(); 
     update.executeUpdate(); 
     Alert confirmation = new Alert(Alert.AlertType.CONFIRMATION, "Saved"); 
     // closeConfirmation.showMessageDialog(this, "Saved"); 
     confirmation.show(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

    orderBox.clear(); 
    customerBox.clear(); 
    productBox.clear(); 
    amountBox.clear(); 
    costBox.clear(); 
    dateBox.clear(); 

} 

私はあなたが準備された文(query)を混合している

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column '2AAB' in 'where clause' 
    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:425) 
    at com.mysql.jdbc.Util.getInstance(Util.java:408) 
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:943) 
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3973) 
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3909) 
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2527) 
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2680) 
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2501) 
    at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1858) 
    at com.mysql.jdbc.PreparedStatement.executeUpdateInternal(PreparedStatement.java:2079) 
    at com.mysql.jdbc.PreparedStatement.executeUpdateInternal(PreparedStatement.java:2013) 
    at com.mysql.jdbc.PreparedStatement.executeLargeUpdate(PreparedStatement.java:5104) 
    at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1998) 
    at application.OrderController.AddOrder(OrderController.java:180) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
    at java.lang.reflect.Method.invoke(Unknown Source) 
    at sun.reflect.misc.Trampoline.invoke(Unknown Source) 
    at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
    at java.lang.reflect.Method.invoke(Unknown Source) 
    at sun.reflect.misc.MethodUtil.invoke(Unknown Source) 
    at javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1769) 
    at javafx.fxml.FXMLLoader$ControllerMethodEventHandler.handle(FXMLLoader.java:1657) 
    at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86) 
    at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238) 
    at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191) 
    at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59) 
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58) 
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) 
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) 
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) 
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) 
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) 
    at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74) 
    at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:49) 
    at javafx.event.Event.fireEvent(Event.java:198) 
    at javafx.scene.Node.fireEvent(Node.java:8411) 
    at javafx.scene.control.Button.fire(Button.java:185) 
    at com.sun.javafx.scene.control.behavior.ButtonBehavior.mouseReleased(ButtonBehavior.java:182) 
    at com.sun.javafx.scene.control.skin.BehaviorSkinBase$1.handle(BehaviorSkinBase.java:96) 
    at com.sun.javafx.scene.control.skin.BehaviorSkinBase$1.handle(BehaviorSkinBase.java:89) 
    at com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(CompositeEventHandler.java:218) 
    at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:80) 
    at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238) 
    at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191) 
    at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59) 
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58) 
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) 
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) 
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) 
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) 
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) 
    at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74) 
    at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54) 
    at javafx.event.Event.fireEvent(Event.java:198) 
    at javafx.scene.Scene$MouseHandler.process(Scene.java:3757) 
    at javafx.scene.Scene$MouseHandler.access$1500(Scene.java:3485) 
    at javafx.scene.Scene.impl_processMouseEvent(Scene.java:1762) 
    at javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2494) 
    at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:380) 
    at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:294) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$354(GlassViewEventHandler.java:416) 
    at com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:389) 
    at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:415) 
    at com.sun.glass.ui.View.handleMouseEvent(View.java:555) 
    at com.sun.glass.ui.View.notifyMouse(View.java:937) 
    at com.sun.glass.ui.win.WinApplication._runLoop(Native Method) 
    at com.sun.glass.ui.win.WinApplication.lambda$null$148(WinApplication.java:191) 
    at java.lang.Thread.run(Unknown Source) 
+2

なぜあなたは 'UPDATE'のために準備されたステートメントを使用していませんか? – Barmar

+1

問題は、製品IDを引用符で囲まなかったことです。しかし、あなたが準備されたステートメントを使用した場合、この問題は発生しません。 – Barmar

+0

私は プライベートPreparedStatementクエリを持っています。 プライベートなPreparedStatementアップデート。 変数として。これで十分ではないと私は思いますか? –

答えて

0

(2AAB iは入力てるのproductIDあり、そしてそれは私の在庫表内のproductID列の下に存在する)取得していますエラー普通のもの(update)であり、これがあなたのコードで問題になっています。あなたは入力をエスケープしていないし、MySQLはエスケープされていないテキストをカラム名として扱います。動作するはず

 
    update=c.prepareStatement ("UPDATE inventory set stockAmount =? WHERE productID =?"); 
    update.setInt(1, amount); 
    update.setString(2, productID);
+0

よろしくお願いします! –

0

問題は、あなたがUPDATEクエリでプロダクトIDを引用しなかったことです。しかし、INSERTの場合と同様に、パラメータ化されたクエリを使用する必要があります。

 update=c.prepareStatement ("UPDATE inventory set stockAmount ? WHERE productID = ?"); 
     update.setInt(1, amount); 
     update.setString(2, productID); 
     update.execute(); 

amountが整数ではなく文字列であるため、また、query.setInt(4, amount);を使用する必要があります。

+0

大変ありがとうございました! これは仕事をしているようですが、在庫量を常に私が使っている人物に変更しています。だから私はそれに加減算を実行する方法を理解する必要があります。 –

+0

'set stockAmount = stockAmount +?'これを追加するには – Barmar

+0

'set stockAmount = stockAmount - ?'を引いてください。これはおそらく注文に適しています。 – Barmar

関連する問題