2012-04-03 61 views
0
String sql = "update `library`.`memebers` set 'STATUS'='" + "1" +"' where mem_id = '"+str+"'"; 

int i = st.executeUpdate(sql); 

錯誤上述獲取在更新語句一個錯誤:在第二線從Java訪問MySQL時

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''status' = '1' where mem_id = '656597'' at line 1 
     at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
     at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) 
     at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) 
     at java.lang.reflect.Constructor.newInstance(Constructor.java:513) 
     at com.mysql.jdbc.Util.handleNewInstance(Util.java:411) 
     at com.mysql.jdbc.Util.getInstance(Util.java:386) 
     at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1052) 
     at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3609) 
     at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3541) 
     at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2002) 
     at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2163) 
     at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2618) 
     at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1749) 
     at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1666) 
     at Frames.Addmembers.jButton1ActionPerformed(Addmembers.java:181) 
     at Frames.Addmembers.access$000(Addmembers.java:21) 
     at Frames.Addmembers$1.actionPerformed(Addmembers.java:83) 
     at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995) 
     at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318) 
     at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387) 
     at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242) 
     at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236) 
     at java.awt.Component.processMouseEvent(Component.java:6263) 
     at javax.swing.JComponent.processMouseEvent(JComponent.java:3267) 
     at java.awt.Component.processEvent(Component.java:6028) 
     at java.awt.Container.processEvent(Container.java:2041) 
     at java.awt.Component.dispatchEventImpl(Component.java:4630) 
     at java.awt.Container.dispatchEventImpl(Container.java:2099) 
     at java.awt.Component.dispatchEvent(Component.java:4460) 
     at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4574) 
     at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238) 
     at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168) 
     at java.awt.Container.dispatchEventImpl(Container.java:2085) 
     at java.awt.Window.dispatchEventImpl(Window.java:2478) 
     at java.awt.Component.dispatchEvent(Component.java:4460) 
     at java.awt.EventQueue.dispatchEvent(EventQueue.java:599) 
     at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269) 
     at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184) 
     at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174) 
     at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169) 
     at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161) 
     at java.awt.EventDispatchThread.run(EventDispatchThread.java:122) 
+1

這是一個SQL問題。我99.9%確定這與Java無關。你應該做的打印出來與您要發送到MySQL – ControlAltDel 2012-04-03 20:48:06

+0

你一定要與實際查詢:library.memebers代替library.members – lkdg 2012-04-04 09:14:33

回答

0

字段名稱用單引號。它應該是沒有引號或內部單引號:``:

String sql = "update library.memebers set `STATUS`='1' where mem_id = '"+str+"'"; 
+0

即使有上述更正,我也沒有收到任何錯誤。但仍然數據庫沒有得到更新。 – Manish 2012-04-03 22:00:02

0

狀態是一個列的名稱,因此,它應該是狀態`status`

實體要麼寫平原,或者他們與``引用。 (反引號,不是單引號)。

除非你使用的列名保留字段名(你不應該這樣做),你不必引用領域。

String sql = "update library.memebers set STATUS = 1 where mem_id = " + Integer.valueOf(str); 

請注意,我刪除了狀態和mem_id周圍的引號。我假設兩者都是整數字段,如果它們是,你不應該引用它們的值。整數字段應該具有整數值,而不是評估爲整數值的字符串。 (但請注意,你會不會想只是盲目地假定一個字符串是一個整數,它連接成一個查詢 - 始終確保它是一個正確的整數第一)

+0

即使與上述更正,我沒有得到任何錯誤。但仍然數據庫沒有得到更新。 – Manish 2012-04-03 21:53:46

+0

@Manish我會確保mem_id匹配表中的東西。正如有人在評論中提出的建議,您可能想要回顯SQL並嘗試手動運行它。 – Corbin 2012-04-03 22:00:36

+0

你能不能幫我這個 字符串SQL OT = 「插入library.books值(」 +出價+」, 「+ BNAME +」, 「+發行+」, 「+作家+」, 「+的Integer.parseInt(價格)+」 ,「+ rack_no +」,「+ Date.valueOf(dop)+」,「+ username; try {int i = st.executeUpdate(sql); if(i == 1) JOptionPane.showMessageDialog 「書增加」, 「SUCESS」,JOptionPane.PLAIN_MESSAGE);} 趕上 (異常前) ; 其他 JOptionPane.showMessageDialog(NULL, 「ERROR」,JOptionPane.ERROR_MESSAGE) 「有些問題在書中加入出錯」 { ex.printStackTrace();} – Manish 2012-04-03 22:21:16