我正在拉我的頭髮,我找不到好的解決方案,我搜索了一些其他主題,但仍然沒有任何想法。 PreparedStatement有問題,尤其是設置日期。我知道,在YYYY-MM-DD中,Date需要日期格式爲YYYY/MM/DD和java.sql.date,但是這些方案中的任何一個都不能正常工作。Oracle SQL PreparedStatement setdate
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 or 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)
有什麼建議嗎?
編輯: 解決
不幸的是不起作用。與YYYY/MM/DD相同。 – 1kka
不要使用「statement.setDate(4,Date.valueOf(studentDate.getText()));」,使用「statement.setString(4,studentDate.getText());」。我們讓Oracle通過TO_DATE執行轉換,所以我們只傳入字符串。 – TenG
解決了,謝謝 – 1kka