我脱掉头发,我找不到合适的解决方案,我已经搜索了其他一些主题,但仍然没有想法。我有PreparedStatement的问题,尤其是设置日期。我知道,oracle Date需要YYYY-MM-DD格式的日期和YYYY-MM-DD格式的java.sql.date,但这些方案中的任何一个都不能正常工作。
String query = "INSERT INTO STUDENTS VALUES (?,?,?,?,?,?,?,?)";
PreparedStatement statement = connection.prepareStatement(query);
statement.setInt(1, Integer.parseInt(studentIndex.getText()));
statement.setString(2, studentName.getText());
statement.setString(3, studentLastName.getText());
statement.setDate(4, Date.valueOf(studentDate.getText()));
statement.setNString(5, studentSex.getText());
statement.setString(6, studentCity.getText());
statement.setString(7, studentMajor.getText());
statement.setString(8, studentSpeciality.getText());
ResultSet result = statement.executeQuery();
在JTextField中启动并编写一些示例日期之后,例如1999-10-20或1999/10/20我有例外
Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException
at java.sql.Date.valueOf(Date.java:143)
at Project$7.actionPerformed(Project.java:166)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2346)
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:6525)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
at java.awt.Component.processEvent(Component.java:6290)
at java.awt.Container.processEvent(Container.java:2234)
at java.awt.Component.dispatchEventImpl(Component.java:4881)
at java.awt.Container.dispatchEventImpl(Container.java:2292)
at java.awt.Component.dispatchEvent(Component.java:4703)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4898)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4533)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4462)
at java.awt.Container.dispatchEventImpl(Container.java:2278)
at java.awt.Window.dispatchEventImpl(Window.java:2750)
at java.awt.Component.dispatchEvent(Component.java:4703)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:751)
at java.awt.EventQueue.access$500(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:702)
at java.awt.EventQueue$3.run(EventQueue.java:696)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:86)
at java.awt.EventQueue$4.run(EventQueue.java:724)
at java.awt.EventQueue$4.run(EventQueue.java:722)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:721)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
有什么想法吗?
编辑: 解决
答案 0 :(得分:0)
尝试使用TO_DATE使用SQL语句显式设置日期格式,例如
String query = "INSERT INTO STUDENTS VALUES (?,?,?,TO_DATE(?,'YYYY-MM-DD'),?,?,?,?)";
然后确保Java变量中的日期格式匹配。如果不同,请根据需要更改TO_DATE中的格式。
答案 1 :(得分:0)