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

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

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

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

Java

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

Q&A

解決済

3回答

2498閲覧

データベースにメールアドレスが登録されているかどうかで値がnullになってしまい困ってます

kentros511

総合スコア122

MySQL

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

Java

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

0グッド

0クリップ

投稿2015/12/18 00:11

編集2015/12/18 01:25

DB名前.java

1public String seldb(String Mail) {/*メールアドレスが登録されているかどうか*/ 2 try{ 3 4 rset=stmt.executeQuery("SELECT mail from staff where mail='"+Mail +"'");/ 5 6 while(rset.next()){ 7 if (Mail == rset.getString(Mail)) {/*一致したら*/ 8 return rset.getString(Mail); 9 } 10 } 11 return "";/*一致しなかった処理*/ 12 13 } catch (Exception e) {/*ここは変更点無し*/ 14 e.printStackTrace(); 15 return null; 16 } 17 18 19 }

※Mailは引数 mailはテーブル名Staffのカラム名

修正したい点 登録されているかどうか確認せずに何でも登録されてしまうので
治したいです

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

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

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

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

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

guest

回答3

0

ベストアンサー

違和感を感じる点を2つ

1.目的のメールアドレスが入っているレコードをDBから取り出しているのに、あらためてそのメールアドレスが一致するか確認しようとしている

目的のメールアドレスの有無を調べたいだけなら、rset.next() を1回だけ判断したらよさそうです

2.getString()の使い方

if (Mail == rset.getString(Mail))

これでは 目的のメールアドレスの列名 を取り出そうとしているので、getString(Mail)の結果は常にnullになってしまうと思います

この場合、正しくは

if (Mail == rset.getString("mail"))

if (Mail == rset.getString(1))

ではないでしょうか?
(といっても、前述の通りこのチェックは無用に思いますが)

ついでにいうと return rset.getString(Mail);return rset.getString("mail"); ですかね

投稿2015/12/18 01:17

編集2015/12/18 01:19
takito

総合スコア3111

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

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

kentros511

2015/12/18 01:26

気づきませんでした ありがとうございます
guest

0

java

1if (Mail == rset.getString(Mail)) {/*一致したら*/

これは必要でしょうか?
rset=stmt.executeQuery("SELECT mail from staff where mail='"+Mail +"'");/
この時点で、mail が 引数(Mail)と同じmail を取得するとなっています。
この場合、select の結果は、Mail と同じ mail か null が返ってきます。
null を返したくないのであれば
"SELECT COALESCE(mail, 'nothing') from staff where mail='"+Mail +"'"
上記の様に変更すれば、mail が null だった場合に「nothing」が
null 以外の場合には、mail のデータが返ってくると思います。

すいませんDB2は使ったことがありませんので、COALESCEで良いかわかりません。

投稿2015/12/18 01:20

trick

総合スコア366

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

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

kentros511

2015/12/18 01:29

すみません  mysqlです  わかりやすく指摘ありがとうございます
trick

2015/12/18 01:55

mysql であれば ifnull ですかね ifnull(mail, 'nothing'); こんな感じでどうでしょうか
guest

0

1.rsetは大域変数で定義されていますか?
定義されないとコンパイルができない
2.stmtは大域変数で定義され、且つ初期化されていますか?
定義されないとnullpointerexceptionが発生する。

投稿2015/12/18 00:45

YiLi

総合スコア96

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

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

kentros511

2015/12/18 01:10

回答ありがとうございます そこはしてあります try{の部分ではメールアドレスが受け渡し成功してます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問