質問するログイン新規登録

Q&A

解決済

2回答

23214閲覧

DAOのメソッドでSQL文を用いてInsertしたいがエラーになってしまう

Sfidante

総合スコア90

INSERT

INSERTとは、行を追加する、コンピュータのデータベース言語SQLにおけるデータ操作言語(DML)ステートメントの1つである

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Java

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

サーブレット

サーブレット(Servlets)とはウェブやアプリケーションサーバー上に動くプログラムのことであり、ウェブブラウザや他のHTTPクライエントとデータベースやHTTPサーバー上のアプリケーションの中間層としての働きをします。

0グッド

0クリップ

投稿2015/04/22 01:50

編集2015/04/22 02:01

0

0

こんにちは。
プログラミング初心者で色々試しましたがわからないので
質問をさせていただきました。

どういった状況化と言いますと、
値をMySQLへInsertしたいのですが、
うまくInsertできない状況です。

下記に関係のあると思われるコードを記載致しますので、
ご教授願います。

こちらがサーブレットで、
サーブレットでgetParameterやgetAttributeした値をDAOの
Insertするメソッドへ飛ばしています。

lang

1dao.connect(); 2 beans = new JavaBeans(); 3 // セッションスコープより自分のペアIDを取得してbeansに格納 4 beans.setOffer_send_id((int)ses.getAttribute("MY_PAIR_ID")); 5 // フォームで来たオファーした人のpairIDを取得してbeanに格納 6 beans.setOffer_rec_id(Integer.parseInt(request.getParameter("pairid"))); 7 // フォームできたコメントをoffercommentと名付けて取得 8 String offercomment = request.getParameter("comment"); 9 // もしoffercommentがnullだった場合空白を入れる 10 if(offercomment == null){ 11 offercomment = ""; 12 } 13 // コメントをbeansに格納 14 else{ 15 beans.setComment(request.getParameter("comment")); 16 } 17 // フォームできたテンプレートの有無を取得し、beansに格納 18 beans.setCommentCheck(Boolean.valueOf(request.getParameter("commentCheck"))); 19 // 時間はSQLで直接取得 20 // beansの中身を使いofferにインサート 21 dao.insertOffer(beans); 22 dao.close(); 23 //break;

因に値は全て正確に取得できており、
DAOのメソッドにも引数として渡せております。

そして、こちらがDAOのInsertメソッドです。

lang

1public void insertOffer(JavaBeans beans) throws Exception { 2 String sql = "INSERT INTO offer (offerSendID , offerRecID , comment) VALUES(?, ?, ?)"; 3 PreparedStatement ps = co.prepareStatement(sql); 4 ps.setInt(1, beans.getOffer_send_id()); 5 ps.setInt(2, beans.getOffer_rec_id()); 6 ps.setString(3, beans.getComment()); 7 System.out.println(beans.getOffer_send_id()); 8 System.out.println(beans.getOffer_rec_id()); 9 System.out.println(beans.getComment()); 10 ps.executeUpdate(); 11 }

ここでSystem.out.printlnでも、値はしっかりと取得できていました。
あとは、データベースにInsertするだけなのですが、
原因がわからずうまくいきません。

説明が下手で申し訳ありません。
また、初歩的な質問ですがよろしく御願い致します。

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

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

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

guest

回答2

0

ベストアンサー

情報の追加、ありがとうございます。

ご推察の通り、offerSendID , offerRecID , commentについて、テーブル側の定義とJavaBeansの型のミスマッチが発生していて、int型をString型に変換できていないのではないかと思います。
それぞれの定義を見直してみてください。

投稿2015/04/22 02:49

argius

総合スコア9398

Sfidante

2015/04/22 10:07

ご連絡ありがとうございます。 DAOにおいてSystem.out.printlnをすると、次のように表示されます。 1(int) 4(int) 初めまして。本日の更新で肉会候補として紹介されたのでオファー致しました。もしよろしければ、みんなで美味しいお肉を食べに行きませんか?よろしくお願い致します。(String) となってしまいます。 この場合、String型がうまくJavaBeansに格納できずにエラーが出てしまっているのでしょうか? 色々と変えたりしているのですが、 どうもうまくいきません。 甘えているようで申し訳ないのですが、 ご教授の程よろしく御願い致します。
Sfidante

2015/04/22 10:28

すみません、break;し忘れており 違うところでのエラーが表示されている状態でした。 本当にアホですみません。 協力して頂いた皆様ありがとうございました。
guest

0

せっかくinsertOfferは例外を投げているんだから、try、ctachで例外を拾ってみてはいかがでしょうか?
その例外のエラーメッセージを見れば何かわかるかもしれません。
それでも、わからない場合には、エラーメッセージをこちらに載せてみてはどうでしょうか?
何か回答を得られるかもしれません。

投稿2015/04/22 02:43

編集2015/04/22 02:44
orange0190

総合スコア1698

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.25%

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

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

質問する

関連した質問