<エラーメッセージの内容>
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も見ています
-
新NISA制度は今までと何が変わる?非課税枠の拡大や投資対象の変更などを解説!
少額から投資を行う人のための非課税制度であるNISAが、2024年に改正される。おすすめの銘柄や投資額の目安について教えてもらった。
-
TO_DATE関数について
Oracle
-
日付書式に変換でこまっています!
Oracle
-
ORA-01013のエラーについて経験のある方お願いします。
Oracle
-
-
4
Oracle 2つのDate型の値の差を「分」で取得したい
その他(データベース)
-
5
Statement ignored というエラー
Oracle
-
6
ORA-01843: 指定した月が無効です。エラー
Oracle
-
7
データを削除しても表領域の使用率が減りません
Oracle
-
8
日付型のフィールドに空白を入れる方法を教えてください
その他(データベース)
-
9
Viewにインデックスは張れますか?
Oracle
-
10
異なるスキーマからデータを抽出するには?oracl、PL/SQL
Oracle
-
11
SQLローダーCSV取込で、囲み文字がデータ中に入っている場合について
Oracle
-
12
特定条件でWHERE句の条件を変更したい
SQL Server
-
13
DELETE文でFROM句を省略した場合
その他(データベース)
-
14
「指定されたキャストは有効ではありません。」とエラーが出てしまいます。
Microsoft ASP
-
15
DATE型にNULLをセットするには?
Oracle
-
16
SQLPLUSで結果を画面に表示しない
Oracle
-
17
SQLでSUMなどの関数でデータが無い時に0を返したい。
Oracle
-
18
sqlplusでヘッダーが付かない
Oracle
-
19
visual studio でインデントを自動的に揃えるショートカットキー
その他(プログラミング・Web制作)
-
20
PL/SQLでのSQL文法
その他(データベース)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ORA-01858: 数値を指定する箇所...
-
配列にnullを代入すると、null...
-
Java配列でNullPointerExceptio...
-
BOOL値を逆にしたい
-
getStringの値がNULLの時の処理
-
jsp/Servletの動的に増えるフォ...
-
eclipseでoracle接続時のエラー...
-
Javascript エラーメッセージが...
-
Javaでboolean型を使ってのうる...
-
C#でラジオボタンとコンボボッ...
-
この世で連日正規表現について...
-
java 引数 戻り値のあるメソッド
-
C言語のポインターに関する警告
-
ジャバスクリプトについて。
-
System.err. printlnとSystem.o...
-
1~100までの数字を表示し、か...
-
javaで質問です。 文字列2023/2...
-
ループ処理の際、最後だけ","を...
-
IF関数でEmpty値を設定する方法。
-
[JAVA]try 内の変数を外で!?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ORA-01858: 数値を指定する箇所...
-
Java配列でNullPointerExceptio...
-
BOOL値を逆にしたい
-
配列にnullを代入すると、null...
-
getStringの値がNULLの時の処理
-
eclipseでoracle接続時のエラー...
-
例外でBeanUtils.populateが、...
-
gas カレンダー祭日設定でエラー
-
C#でラジオボタンとコンボボッ...
-
C# ListBoxのインデックスの値...
-
oracle10g java jdbc 大量inser...
-
jsp/Servletの動的に増えるフォ...
-
JSP での exit? (スクリプトか...
-
JSPで複数のSQL実行につ...
-
JavaBeansにDBの値を格納
-
逆コンパイルの見方について(...
-
java DAO 日付指定フォーマット...
-
java 引数 戻り値のあるメソッド
-
HashMapがおかしい
-
日付をyyyyMMddで取得したい。
おすすめ情報