• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ORA-01858: 数値を指定する箇所に数値以外の文字が指定されています)

ORA-01858エラーが発生しました。数値以外の文字が指定されています。

このQ&Aのポイント
  • 開発言語は、JavaとOracle10g Express Editionを使用しています。スケジュールを登録する画面で、日付のインサートが失敗しています。
  • SQL/PLUSで実行すれば正常に動作することが確認されています。
  • スケジュール情報をデータベースに新規保存する際に、日付を文字列表現に変換していますが、その処理で問題が発生しています。

質問者が選んだベストアンサー

  • ベストアンサー
  • sh_hirose
  • ベストアンサー率66% (56/84)
回答No.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の値を返せばいけるような気がします。

fujisawa33
質問者

お礼

sh_hiroseさんに教えていただいたとおり、うまくいきました。 ありがとうございました。また、ご質問などがありましたら、 そのときはよろしくお願いします。本当に助かりました。 ありがとうございました。

その他の回答 (1)

  • Yanch
  • ベストアンサー率50% (114/225)
回答No.1

java.sql.Timestamp と PreparedStatement#setTimestamp(int parameterIndex, Timestamp x); を組み合わせて使ってみるとどうですか。

関連するQ&A