2014-01-28 54 views
-1

我正在嘗試使用java程序編輯sql表。但是,我得到以下異常(包括堆棧跟蹤)。這是一個非常奇怪的例外,從未遇到過。java sql更新中的奇怪異常

com.mysql.jdbc.exceptions.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 '[,20,375,298x28,layout=javax.swing.plaf.basic.BasicTextUI$UpdateHandler,alignmen' at line 1 
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:936) 
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2985) 
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1631) 
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1723) 
at com.mysql.jdbc.Connection.execSQL(Connection.java:3283) 
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1332) 
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1604) 
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1519) 
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1504) 
at transaction.EditClientTrans.clEditTrActionPerformed(EditClientTrans.java:259) 
at transaction.EditClientTrans.access$300(EditClientTrans.java:23) 
at transaction.EditClientTrans$4.actionPerformed(EditClientTrans.java:121) 
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018) 
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341) 
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402) 
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259) 
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252) 
at java.awt.Component.processMouseEvent(Component.java:6505) 
at javax.swing.JComponent.processMouseEvent(JComponent.java:3321) 
at java.awt.Component.processEvent(Component.java:6270) 
at java.awt.Container.processEvent(Container.java:2229) 
at java.awt.Component.dispatchEventImpl(Component.java:4861) 
at java.awt.Container.dispatchEventImpl(Container.java:2287) 
at java.awt.Component.dispatchEvent(Component.java:4687) 
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832) 
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492) 
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422) 
at java.awt.Container.dispatchEventImpl(Container.java:2273) 
at java.awt.Window.dispatchEventImpl(Window.java:2719) 
at java.awt.Component.dispatchEvent(Component.java:4687) 
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:735) 
at java.awt.EventQueue.access$200(EventQueue.java:103) 
at java.awt.EventQueue$3.run(EventQueue.java:694) 
at java.awt.EventQueue$3.run(EventQueue.java:692) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) 
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87) 
at java.awt.EventQueue$4.run(EventQueue.java:708) 
at java.awt.EventQueue$4.run(EventQueue.java:706) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) 
at java.awt.EventQueue.dispatchEvent(EventQueue.java:705) 
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242) 
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161) 
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:154) 
at java.awt.WaitDispatchSupport$2.run(WaitDispatchSupport.java:182) 
at java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:221) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.awt.WaitDispatchSupport.enter(WaitDispatchSupport.java:219) 
at java.awt.Dialog.show(Dialog.java:1082) 
at java.awt.Component.show(Component.java:1651) 
at java.awt.Component.setVisible(Component.java:1603) 
at java.awt.Window.setVisible(Window.java:1014) 
at java.awt.Dialog.setVisible(Dialog.java:1005) 
at transaction.EditClientTrans$5.run(EditClientTrans.java:310) 
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251) 
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:733) 
at java.awt.EventQueue.access$200(EventQueue.java:103) 
at java.awt.EventQueue$3.run(EventQueue.java:694) 
at java.awt.EventQueue$3.run(EventQueue.java:692) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) 
at java.awt.EventQueue.dispatchEvent(EventQueue.java:703) 
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242) 
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161) 
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150) 
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146) 
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138) 
at java.awt.EventDispatchThread.run(EventDispatchThread.java:91) 

下面是代碼:

private void clEditTrActionPerformed(java.awt.event.ActionEvent evt) {           
    try { 
     long bal = amtnum - downp; 
     payoption = (String) payOpt.getSelectedItem(); 
     if(bal==0) 
      pstat = "Fully Paid"; 
     else if((bal>0)&&(bal<amtnum)) 
      pstat = "Partially Paid"; 
     else if(bal==amtnum) 
      pstat = "Unpaid"; 
     String sql = "update kusinanikambal.ctrans " 
       + "set clname = '"+cliName.getText() 
       +"', contdet = '"+cliCNo.getText() 
       +"', date = '"+Date.getText() 
       +"', amt = "+amtnum 
       +", paidamt= "+down 
       +", bal = "+bal 
       +", paymethod = '"+payoption+"'" 
       +", paystat = '"+pstat+"'" 
       + "where transno = "+ transNo.getText(); 
     PreparedStatement pst = conn.prepareStatement(sql); 
     int rs = pst.executeUpdate(); 
     JOptionPane.showMessageDialog(null,"Edit Successful"); 
     super.setVisible(false); 

    } catch (SQLException ex) { 
     JOptionPane.showMessageDialog(null,ex); 
     ex.printStackTrace(); 
    } 
}         
+1

你可以安慰打印出SQL字符串,它已經創建之後?這可能很容易發現語法問題。 – user2684301

+0

你需要一個額外的空間+「在哪裏transno」和其中 –

+0

+「where transno =」+ transNo.getText(); –

回答

2

你附加的Object(在此,某些種類的成分)爲您的查詢,已使用對象的toString方法結果的一部分。由於您沒有提供太多信息,無法分辨哪一個。

你也應該考慮使用PreparedStatements而不是追加查詢String在一起......

+1

+1爲PreparedStatement位,因爲所提供的代碼可以打開SQL注入。如果你不知道這些是什麼,**閱讀它們**。他們是一個巨大的安全漏洞。 – yshavit

+0

在嘗試執行它以查看您嘗試執行的確切SQL之前,先打印'sql'值,然後找出哪個對象導致該問題......然後閱讀準備好的語句。 – Luke