こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

JDBCを使ってdate型へのINSERTはできますか?

JDBCを使ってOracleへ接続し、DBへデータを挿入したいのですが、
日付型のデータがどうしてもうまく挿入できません。

jsp + Servlet + Bean で開発しています。

使っているテーブルは
CREATE TABLE USERS (
    USERID     VARCHAR2(10) NOT NULL,
    PASSWORD  VARCHAR2(10) NOT NULL,
    NAME      VARCHAR2(50) NULL,
    SEX       VARCHAR2(5)  NULL,
    BIRTHDAY   DATE       NULL,
    PRIMARY KEY (USERID, PASSWORD)
)
という風な型で、定義しています。

DBへのINSERT処理は、Beanで行っています。

以下のINSERT文を実行したのですが、うまくINSERTできませんでした。
String sqlQuery =
"INSERT INTO USERS (USERID, PASSWORD, NAME, SEX, BIRTHDAY)"
+ "VALUES ('use', 'pass', 'ナマエ', '女性', '1980/06/05')"
int numOfUpdate = statement.executeUpdate(sqlQuery);

ちなみに、この中のdate型で定義している「BIRTHDAY」を除いたINSERT文
String sqlQuery =
"INSERT INTO USERS (USERID, PASSWORD, NAME, SEX)"
+ "VALUES ('use', 'pass', 'ナマエ', '女性')"
int numOfUpdate = statement.executeUpdate(sqlQuery);
だとうまくINSERTできます。
sql*plusを使って直に書くと、両方うまくINSERTできました。

●その後に、「BIRTHDAY」をdate型からVARCHAR2(10)へ定義し直し、
 DBを作り直して実行した所、うまくINSERTできるようになりました。

なぜ「date型」だとINSERTできず、「VARCHAR2型」だとINSERTできるのか、
知っている方がおられましたら、ぜひ教えて頂きたいです。

投稿日時 - 2001-10-19 19:53:27

QNo.154075

すぐに回答ほしいです

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

始めましてDoubleです
"INSERT INTO USERS (USERID, PASSWORD, NAME, SEX, BIRTHDAY)"
+ "VALUES ('use', 'pass', 'ナマエ', '女性', '1980/06/05')"
この書き方だと'1980/06/05'の部分はテキストデータです
したがって
to_date('1980/06/05','YYYY/MM/DD')
と書き換えてあげれば大丈夫だと思います
試してみてください

投稿日時 - 2001-10-19 20:11:52

お礼

わかりやすい御回答ありがとうございました。
日付の部分を書き直した所、うまくINSERTできました。
あのままではテキストデータになってしまうのですね!
本当に助かりました!

投稿日時 - 2001-10-22 10:35:00

ANo.1

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問