質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

1回答

1601閲覧

データベースのテーブルで、Date型の項目に対し、JavaのDate型の変数をINSERTをしたい。

ystes123

総合スコア2

Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2022/09/28 15:00

実現したいこと

Java言語でSQL作成。
データベース(Oracle)のテーブルで、Date型の項目に対し、
JavaのDate型の変数をINSERTをしたい。

ソースコード(イメージ)

import java.util.Date; : : public static void test1(){ int renban = (連番メソッド); Date date = new Date(); String name = "ABC"; try{ sql = "INSERT INTO TABLE_A ( UKETSUKENO, UKETSUKEDATE, UKETSUKENAME …)"+ "VALUES (" + renban+ ", " + date + ",'" + name + "', '" + …); : : (SQL実行処理) } catch { : : }

発生している問題・エラーメッセージ

上記例や、VALUESのdateの前後にシングルクォーテーションを追加したり、
TO_DATE(date, 'yyyy-mm-dd hh24:MI:ss')やTO_DATE(’date’, 'yyyy-mm-dd hh24:MI:ss')で試したところ、下記のようなエラーが出ます。
(どれがどれに紐づくか覚えてなくてすみません。。。)

 ・ORA-01861: リテラルが書式文字列と一致しません
・ORA-01841: (周)年は-4713と+9999の間の0以外の数字を指定する必要があります

試したこと

date型変数の値をINSERTのVALUE値にすることって可能ですよね?
お手数ですが、記載方法を教えてください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jimbe

2022/09/28 15:42

まず、文字列編集でデータを含む SQL 文を作成することを止めたほうが良いです。PreparedStatement を利用してください。
m.ts10806

2022/09/29 01:25

SQLに直に入れたいなら文字列にフォーマットするしかないでしょうしね。 オブジェクトそのままは突っ込めません。SQLとはいってもパラメータも何もセットしてないなら Javaにとっては単なる文字列ですから。OracleDBに対し直に実行して通るSQLをそのまま投入するならできますが、先に指摘されてるようにSQLインジェクションの脆弱性もあるので値をSQL文字列として突っ込むのは推奨されていません。
guest

回答1

0

ベストアンサー

データベースの DATE は java の java.sql.Date です。java.util.Date ではありません。
8 SQL のデータ型と Java のマッピング

イメージ

PreparedStatement pstmt = con.prepareStatement("INSERT INTO TABLE_A ( UKETSUKENO, UKETSUKEDATE, UKETSUKENAME, …)"+ "VALUES (?, ?, ?, …)"); pstmt.setInt(1, renban); pstmt.setDate(2. new java.sql.Date(date.getTime())); pstmt.setString(3, name); : pstmt.executeUpdate();

投稿2022/09/28 15:45

編集2022/10/01 16:35
jimbe

総合スコア12632

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2022/09/29 01:23 編集

補足みたいなものなのでコメントでぶら下がらせていただきます。 エラーについてはちゃんと以下のようなページがあります。 https://www.shift-the-oracle.com/oerrs/ora-01861.html この時の「書式」はあくまで、「データベースで受け入れ可能な書式」である必要があります。 PreparedStatement.setDate()を使っていたとしても、そもそもがPreparedStatement.setDate()が求めている第2引数がjava.sql.Dateなので、機能的にも使い方を間違っているということになります。 https://docs.oracle.com/javase/jp/8/docs/api/java/sql/PreparedStatement.html#setDate-int-java.sql.Date-
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問