
<エラーメッセージの内容>
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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
ORA-01843: 指定した月が無効です。エラー
Oracle
-
Statement ignored というエラー
Oracle
-
日付書式に変換でこまっています!
Oracle
-
-
4
変数が選択リストにありません
Oracle
-
5
CASE文のエラーについて
Oracle
-
6
TO_DATE関数について
Oracle
-
7
ORA-01013のエラーについて経験のある方お願いします。
Oracle
-
8
Oracleでの文字列連結サイズの上限
Oracle
-
9
SELECT INTOで一度に複数の変数へ代入をするにはどのようにすれがよいでしょうか?
PostgreSQL
-
10
PL/SQLでのTO_DATEの時間取得について
その他(プログラミング・Web制作)
-
11
PL/SQLで@ファイル名が反応しません
Oracle
-
12
CLOB型へのINSERT
Oracle
-
13
カーソル0件の時にエラーを発生させる
Oracle
-
14
VB.NETで DataRow()を利用して、値からコードを取得したい。
Visual Basic(VBA)
-
15
正しいSQLなのに「ORA-00936: 式がありません。」となる
Oracle
-
16
Oracle 8i コンマ(,)を含むデータをinsertしたい
その他(データベース)
-
17
SQL、2つのテーブルで条件一致したものだけdeleteする方法は?
Oracle
-
18
SQLPLUSで結果を画面に表示しない
Oracle
-
19
SQLローダーCSV取込で、囲み文字がデータ中に入っている場合について
Oracle
-
20
最大バイト数を調べるSQL文を教えてください
Oracle
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
BOOL値を逆にしたい
-
ORA-01858: 数値を指定する箇所...
-
eclipseでoracle接続時のエラー...
-
getStringの値がNULLの時の処理
-
jsp/Servletの動的に増えるフォ...
-
空白を返す処理
-
入力された文字列の制限
-
(Swing)JTextFieldを半角のみ入...
-
System.err. printlnとSystem.o...
-
EXCEL VBA で、0から?1から?
-
JSPやサーブレットでSystem.out...
-
JSPでImportエラーになります
-
ループ処理の際、最後だけ","を...
-
パソコンキーボードで時分秒を...
-
オブジェクトの中のプロパティ...
-
javaで文字数制限するには?
-
IF関数でEmpty値を設定する方法。
-
eclipseに記述したjavaファイル...
-
Randomメソッドの確率設定
-
C言語のポインターに関する警告
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ORA-01858: 数値を指定する箇所...
-
jsp/Servletの動的に増えるフォ...
-
BOOL値を逆にしたい
-
C# ListBoxのインデックスの値...
-
配列にnullを代入すると、null...
-
例外でBeanUtils.populateが、...
-
getStringの値がNULLの時の処理
-
Java配列でNullPointerExceptio...
-
eclipseでoracle接続時のエラー...
-
C#でラジオボタンとコンボボッ...
-
「null」と「""」は同じ?
-
javaの掲示板について
-
if文を通らない
-
空欄のテキストフィールドの判...
-
boolean型ではなくて
-
入力された文字列の制限
-
mysqlへの接続が出来ません
-
逆コンパイルの見方について(...
-
postgresql接続時
-
JSPでの画面表示の方法
おすすめ情報