在prepareStatement上获取错误

时间:2014-05-03 05:49:12

标签: java prepared-statement

我试图将条目更新到表中,但我一直收到此错误::

  

java.sql.SQLException:语法错误:12月停止解析(id104)

MS Access Table Design:

enter image description here

PreparedStatement ps = con.prepareStatement("UPDATE Leave_Table SET Jan=?,Feb=?,Mar=?,Apr=?,May=?,Jun=?,Jul=?,Aug=?,Sep=?,Oct=?,Nov=?,Dec=? WHERE LeaveType=?");

            ps.setInt(1,Integer.parseInt(JanuaryTF.getText()));
            ps.setInt(2,Integer.parseInt(FebruaryTF.getText()));
            ps.setInt(3,Integer.parseInt(MarchTF.getText()));
            ps.setInt(4,Integer.parseInt(AprilTF.getText()));
            ps.setInt(5,Integer.parseInt(MayTF.getText()));
        ps.setInt(6,Integer.parseInt(JuneTF.getText()));
            ps.setInt(7,Integer.parseInt(JulyTF.getText()));
            ps.setInt(8,Integer.parseInt(AugustTF.getText()));
            ps.setInt(9,Integer.parseInt(SeptemberTF.getText()));
    ps.setInt(10,Integer.parseInt(OctoberTF.getText()));
            ps.setInt(11,Integer.parseInt(NovemberTF.getText()));
            ps.setInt(12,Integer.parseInt(DecemberTF.getText()));
    ps.setString(13,String.valueOf(leavetype.getSelectedItem()));

ps.execute();

根据堆栈跟踪错误似乎是在prepareStatement但我似乎没有得到它。

堆栈跟踪:

java.sql.SQLException: Syntax error: Stopped parse at Dec(id104)
    at com.hxtt.global.SQLState.SQLException(Unknown Source)
    at com.hxtt.a.b.a(Unknown Source)
    at com.hxtt.a.b.a(Unknown Source)
    at com.hxtt.a.b.g(Unknown Source)
    at com.hxtt.sql.bx.o(Unknown Source)
    at com.hxtt.sql.bx.a(Unknown Source)
    at com.hxtt.sql.d1.<init>(Unknown Source)
    at com.hxtt.sql.bx.a(Unknown Source)
    at com.hxtt.sql.bx.prepareStatement(Unknown Source)
    at com.hxtt.sql.bx.prepareStatement(Unknown Source)
    at com.hxtt.sql.bx.prepareStatement(Unknown Source)
    at leave.LeaveSetting.actionPerformed(LeaveSetting.java:231)
    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:2713)
    at java.awt.Component.dispatchEvent(Component.java:4687)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:707)
    at java.awt.EventQueue.access$000(EventQueue.java:101)
    at java.awt.EventQueue$3.run(EventQueue.java:666)
    at java.awt.EventQueue$3.run(EventQueue.java:664)
    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:680)
    at java.awt.EventQueue$4.run(EventQueue.java:678)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:677)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:90)

更新:使用jdbc-odbc网桥可以正常运行查询,但不能使用hxtt纯Java驱动程序4.0进行MS Access。

2 个答案:

答案 0 :(得分:1)

始终使用一些逻辑且有意义的列名。不要太短,以至于你无法区分它。

SETWHERE和每个逗号之前加上空格。尝试将所有内容放入单个字符串中。

"UPDATE Leave_Table SET J=?, F=?, M=?, A=?, M=?, J=?, Ju=?, Au=?, Se=?, O=?, N=?, D=? WHERE LeaveType=?"

- 编辑 -

  

错误是:java.sql.SQLException:语法错误:12月停止解析(id104)

没有列名D。尝试使用Dec代替D

"UPDATE Leave_Table SET J=?, F=?, M=?, A=?, M=?, J=?, Ju=?, Au=?, Se=?, O=?, N=?, Dec=? WHERE LeaveType=?"

答案 1 :(得分:0)

你忘了把空格做如下,

PreparedStatement ps = con.prepareStatement("UPDATE Leave_Table" +
                    " SET J=?,F=?,M=?,A=?,M=?,J=?,Ju=?,Au=?,Se=?,O=?,N=?,D=?" +
                    " WHERE LeaveType=?");