- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ORA-01858: 数値を指定する箇所に数値以外の文字が指定されています)
ORA-01858エラーが発生しました。数値以外の文字が指定されています。
このQ&Aのポイント
- 開発言語は、JavaとOracle10g Express Editionを使用しています。スケジュールを登録する画面で、日付のインサートが失敗しています。
- SQL/PLUSで実行すれば正常に動作することが確認されています。
- スケジュール情報をデータベースに新規保存する際に、日付を文字列表現に変換していますが、その処理で問題が発生しています。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
パラメータをセットされたSQLは以下のようになってしまいます。 insert into schedule values(1, 1, '予定1', '予定1です', 'TO_DATE(''2009-06-01 10:00'',''YYYY/MM/DD HH24:MI:SS'')' , 'TO_DATE(''2009-06-01 12:00'',''YYYY/MM/DD HH24:MI:SS'')', 'A社', '予定1のコメントです。',1); つまりTO_DATE(・・・)が文字列として扱われてしまいます。 ですのでNo1の方の方法の「PreparedStatement#setTimestamp」を利用するか、 String sql = "insert into " + SCHEDULE_TABLE_NAME + " (id, user_id,subject,content, start_time, end_time, place, comment1, is_publish) values(?,?,?,?,?,TO_DATE(?,'YYYY/MM/DD HH24:MI:SS'),TO_DATE(?,'YYYY/MM/DD HH24:MI:SS'),?,?)"; にして、toString関数でsd.formatの値を返せばいけるような気がします。
その他の回答 (1)
- Yanch
- ベストアンサー率50% (114/225)
回答No.1
java.sql.Timestamp と PreparedStatement#setTimestamp(int parameterIndex, Timestamp x); を組み合わせて使ってみるとどうですか。
お礼
sh_hiroseさんに教えていただいたとおり、うまくいきました。 ありがとうございました。また、ご質問などがありましたら、 そのときはよろしくお願いします。本当に助かりました。 ありがとうございました。