質問: result.getString("created"); // System.out.println(str1 + ", " + str2 + ", " + str3 + "," + str4); System.out.println(str2 + ", " + str3); } /*ResultSetオブジェクトを閉じる*/ result.close(); /*Statementオブジェクトを閉じる*/ st.close(); /*Connectionオブジェクトを閉じる*/ con.close(); } catch (SQLException e) { /*エラーメッセージ出力*/ System.out.println("Connection Failed. : " + e.toString()); /*例外を投げちゃうぞ*/ throw new Exception(); } catch (ClassNotFoundException e) { /*エラーメッセージ出力*/ System.out.println("ドライバを読み込めませんでした " + e); } finally { try { if (con != null) { con.close(); } } catch (Exception e) { /*エラーメッセージ出力*/ System.out.println("Exception2! :" + e.toString()); /*例外を投げちゃうぞ*/ throw new Exception(); } } } } コード ```
回答: > > ネットの記事を参考にDAOを使ってためしてみたりしたのですが > > > DAOにしようと思うとワンクッション置くことになるのでまずは「直にSQLを実行してDBからデータを取得する」ことを次の段階とすると良いでしょう。 流れとしては下記。 1. 全て取得する:データを取得する(SELECT文) 2. 絞り込む:データを取得する条件を設定する(WHERE句) 3. JavaからMySQLに接続する/結果を取得する:データの取得(SELECT) **jdbcドライバー部分が古いかもしれません。最新確認してください** 4. 絞込検索のときにプリペアドステートメントを利用する:prepareStatementの使用 という感じです。 あとは任意のデータが取得出来たらそれをもとに実現したい処理を入れていきます。 コード追記を受けて 流れを提示したところでちょっと説明不足があったかもしれませんが、 1,2については**DBに対して直接SQLを実行してください。** SQLはプログラムからすると外部のサービスです。 外部のサービスを利用する際は、いきなりプログラムを経由するのではなく、直接実行してみて実行できるかどうか確かめて、想定通りの結果が得られるパラメータをそのまま利用します。 下記ですが、直接DBに対して実行してみましたか? `SELECT * FROM mydb.users where name = ?,?` 2.で提示したリンクに name = ?,? のような書き方はなかったはずです(コンマで区切っているところ) 提示リンクより引用しますが、複数条件を指定したい場合はANDやORなどでつなぎます > > SELECT * FROM personal WHERE address='Osaka' AND old>=20; > > > マニュアルも確認してください→ SELECT構文 今回はnameで検索したいようですから`,?`は不要です。 `SELECT * FROM mydb.users where name = ?` ただDBに対して実行する場合は`?`ではいけないので適当な値をおいて実行します。 `SELECT * FROM mydb.users where name = '山田太郎'` これが通るか確認してください。 ※今後SELECT以外も使うようになると思いますが、必ず直接DBに実行して想定通りの結果が得られるSQLを使うようにしてください。いきなりプログラムから実行してしまっては問題の切り分けが難しくなります。 次。 ``` String sqlStr = "SELECT * FROM mydb.users where name = ?,?;"; st.setString(1, "山田太郎"); ``` プリペアドステートメントはまずSQLでバインド待ち(`?`)の値をバインドしてからDBに届けます。 このSQL上ではバインド待ちが2つあるのでsetも同じ数必要です。 おそらくでエラーになっているのでは(つまり、セット予定と実際にセットされた値の数が合わない) 私が提示した4番目の記事にも書いてありますね。 > > この例では実際に挿入する値を記述箇所に「?」を使っています。2箇所使っていますので、後からパラメータを2つ指定する必要があります。 > > パラメータはSQL文中に記述された「?」を先頭から順番に1,2,3、・・・と順番に番号が割り当てられています。1番目のメソッドにはパラメータの番号を指定し、2番目の引数にパラメータに設定したい値を記述します。 > > > あとは型を適切に設定してください。 元々のSQLの間違いをなおせばsetは1つで良くなります。 *蛇足確認 これは仕様部分なのですが、nameで検索しようとしていますが、これはあくまで検証のためですよね? 通常ログインといったらユーザIDとPASSを半角英数で入力するので・・。