<エラーメッセージの内容>
ORA-01858: 数値を指定する箇所に数値以外の文字が指定されています
開発言語は、java,oracle10g express editionです
スケジュールを登録する画面のところの日付のインサートで失敗します。「→」の部分です。
<以下のSQLをSQL/PLUSで実行するとうまくいきます>
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);
<問題のソースコード>
* スケジュール情報をデータベースに新規保存する
public void create(Schedule schedule) {
String sql =
"insert into "
+ SCHEDULE_TABLE_NAME
+ " (id, user_id,subject,content, start_time, end_time, place, comment1, is_publish) values(?,?,?,?,?,?,?,?,?)";
Connection con = null;
try {
con = createConnection();
con.setAutoCommit(false);
int id = getNextId(con, SCHEDULE_TABLE_NAME);
PreparedStatement stmt = con.prepareStatement(sql);
→stmt.setString(5,toString(schedule.getStartTime()));
→stmt.setString(6, toString(schedule.getEndTime()));
* 日付を文字列表現(yyyy-MM-dd HH:mm)に変換する
private String toString(java.util.Date date) {
SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd HH:mm");
→return "TO_DATE('"+"'"+sd.format(date)+"'"+",'YYYY/MM/DD HH24:MI:SS'"+")";
}
ネット、本などでいろいろ調べましたが、わからなかったので、ヒントになることでもいいので、ご教授よろしくお願いします。
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の値を返せばいけるような気がします。
sh_hiroseさんに教えていただいたとおり、うまくいきました。
ありがとうございました。また、ご質問などがありましたら、
そのときはよろしくお願いします。本当に助かりました。
ありがとうございました。
No.1
- 回答日時:
java.sql.Timestamp と
PreparedStatement#setTimestamp(int parameterIndex, Timestamp x);
を組み合わせて使ってみるとどうですか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- MySQL SQLについて質問です。 SELECT TO_CHAR(TO_DATE('90-10-08.'YY- 4 2022/05/13 20:55
- JavaScript gasについて 1 2022/05/31 21:51
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/01/23 09:24
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 2 2023/01/23 17:13
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/01/23 11:02
- Access(アクセス) エクセルのVBAについて教えてください。 4 2023/01/21 10:21
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 2 2023/05/23 16:28
- Visual Basic(VBA) VBAで日付入力しているのですが 4 2023/03/02 11:25
- MySQL ある時間以内の利用者の抽出について 3 2022/03/26 11:15
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
このQ&Aを見た人はこんなQ&Aも見ています
-
性格の違いは生まれた順番で決まる?長男長女・中間子・末っ子・一人っ子の性格の傾向
同じ環境で生まれ育っても、生まれ順で性格は違うものなのだろうか。家庭教育研究家の田宮由美さんに教えてもらった。
-
TO_DATE関数について
Oracle
-
日付書式に変換でこまっています!
Oracle
-
Statement ignored というエラー
Oracle
-
-
4
ORA-01013のエラーについて経験のある方お願いします。
Oracle
-
5
PL/SQLのコンパイルエラーについて(ignored)
Oracle
-
6
SQLローダーCSV取込で、囲み文字がデータ中に入っている場合について
Oracle
-
7
異なるスキーマからデータを抽出するには?oracl、PL/SQL
Oracle
-
8
SELECTで1件のみ取得するには?
Oracle
-
9
select句副問い合わせ 値の個数が多すぎます
Oracle
-
10
カーソル0件の時にエラーを発生させる
Oracle
-
11
特定条件でWHERE句の条件を変更したい
SQL Server
-
12
Oracle 2つのDate型の値の差を「分」で取得したい
その他(データベース)
-
13
日付型のフィールドに空白を入れる方法を教えてください
その他(データベース)
-
14
GROUP BYを行った後に結合したい。
Oracle
-
15
CASE文のエラーについて
Oracle
-
16
ORA-00959: 表領域'****'は存在しません
Oracle
-
17
Oracleのデータ型、NUMBERについて
その他(データベース)
-
18
DELETE文でFROM句を省略した場合
その他(データベース)
-
19
【PL/SQL】FROM区に変数を使う方法
Oracle
-
20
単一グループのグループ関数ではありません。
Oracle
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
BOOL値を逆にしたい
-
Java配列でNullPointerExceptio...
-
入力された文字列の制限
-
(o==null ? get(i)==null : o.e...
-
空欄のテキストフィールドの判...
-
配列にnullを代入すると、null...
-
eclipseでoracle接続時のエラー...
-
パソコンキーボードで時分秒を...
-
Javaで改行などが出来ないのです。
-
JSPやサーブレットでSystem.out...
-
C言語のポインターに関する警告
-
論理演算子”||”またはの入力方法
-
べき乗
-
<s:iterator>の値をリストで取...
-
格闘ゲームのコマンド判定について
-
テキストボックスに入力された...
-
Ctrl+Zが入力されると終了する...
-
どんな時にIteratorを使うと便...
-
ボタンのイベントで異なるウィ...
-
改行コードの置換が…
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ORA-01858: 数値を指定する箇所...
-
配列にnullを代入すると、null...
-
Java配列でNullPointerExceptio...
-
BOOL値を逆にしたい
-
getStringの値がNULLの時の処理
-
C# ListBoxのインデックスの値...
-
eclipseでoracle接続時のエラー...
-
例外でBeanUtils.populateが、...
-
jsp/Servletの動的に増えるフォ...
-
Stringを返す getText()メソッ...
-
gas カレンダー祭日設定でエラー
-
JSPでの画面表示の方法
-
空欄のテキストフィールドの判...
-
C#でラジオボタンとコンボボッ...
-
JSPで複数のSQL実行につ...
-
逆コンパイルの見方について(...
-
Safari ダウンロード時に日本語...
-
java DAO 日付指定フォーマット...
-
oracle10g java jdbc 大量inser...
-
MySQLのテーブル名を変数に置い...
おすすめ情報