とっておきの手土産を教えて

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できるのか、
知っている方がおられましたら、ぜひ教えて頂きたいです。

A 回答 (1件)

始めまして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')
と書き換えてあげれば大丈夫だと思います
試してみてください
    • good
    • 0
この回答へのお礼

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

お礼日時:2001/10/22 10:35

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報