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

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

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

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

Q&A

解決済

2回答

1736閲覧

サーブレットからmysql

kokok

総合スコア145

MySQL

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

0グッド

0クリップ

投稿2019/05/08 05:28

編集2019/05/09 01:12

java

1コード

'package sample1;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/Hello")
public class Hello extends HttpServlet {
private static final long serialVersionUID = 1L;

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html; charset=utf-8"); PrintWriter out = response.getWriter(); out.println("<html>"); out.println("<body>"); Connection conn = null; String url ="jdbc:mysql://localhost/training"; String user = "root"; String password ="ryota"; try{ Class.forName("com.mysql.jdbc.Driver").newInstance(); conn = DriverManager.getConnection(url, user, password); Statement stmt =conn.createStatement(); String sql ="SELECT * FROM user"; ResultSet rs = stmt.executeQuery(sql); while(rs.next()){ ````````````ここに言語を入力 int id = rs.getInt("id"); String name = rs.getString("name"); int age = rs.getInt("age"); out.println(id + name + age ); out.println("\n"); } rs.close(); stmt.close(); }catch(ClassNotFoundException e){ out.println("lassNotFoundException:"+ e.getMessage()); }catch(SQLException e){ out.println("SQLException:" + e.getMessage()); }catch(Exception e){ out.println("Exception:" + e.getMessage()); } finally{ try{ if(conn !=null){ conn.close();} }catch (SQLException e){ out.println("SQLException:" + e.getMessage()); } } //out.println("</html>"); out.println("</body>"); out.println("</html>"); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); }

}'

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

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

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

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

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

m.ts10806

2019/05/08 05:33

何かしら参考にした記事、自身で試したコードはあるのでしょうか。
kokok

2019/05/08 05:42

package sample1; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @WebServlet("/Hello") public class Hello extends HttpServlet { private static final long serialVersionUID = 1L; public Hello() { super(); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.getWriter().append("HELLO WORLD!"); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } } jdbcドライバのダウンロードを完了しました データベースの結果をwebに表示させたいのですが まず、データベースとの接続の記述をどこに書けばいいのか調べても分かりませんでした。
m.ts10806

2019/05/08 05:45

質問本文に追記してください。(コードはマークダウンをご利用ください) どこにも接続記述を書かれていないほぼまっさらなコードなので「試した」とは言えないような…。 Java MySQLとかで調べたらわかることなので回答にはしませんが、ドライバー記述など必要な記述はあるものの、「ここに書かなければならない」というものはないです。
m.ts10806

2019/05/08 05:57

今回答できる内容で回答しました。 とりあえず失敗してもいいので書こうよ、というところですね。 失敗して覚えることも多々あります。
m.ts10806

2019/05/08 07:12

過去質問が結構未解決のまま放置されています。 https://teratail.com/users/ryo317#question なるべくきちんと1つずつ解決されたほうが良いでしょう。(解決する気がない質問者だと見なされれば回答が得られにくくなります)
m.ts10806

2019/05/08 07:51

>マークダウン 色々な箇所に説明があるのでそれを読んで試してもらえれば良かったのですが、 難しければコード部分を選択して<code>ボタンを押すだけで良いです。
m.ts10806

2019/05/09 00:51

既に回答がついた質問は慎重に編集してください。 PCから投稿されているのでしたら画面右側に「プレビュー」が表示されています。 投稿前に必ず「おかしいところはないか」確認して調整してから投稿してください。
kokok

2019/05/09 00:55

左側のコードではインデントがあるのですが、右側のプレビューのコードはなくなってしまってしまっています。 右側もインデントがある表示にできるのでしょうか?
m.ts10806

2019/05/09 00:58

それはマークダウンのcodeに入っていないから。 なぜマークダウンを使うかはインデント含めてそのままコードを提示できて1クリックでコピペできるから。 その部分はもっと他の質問とか回答を見てみてください。
kokok

2019/05/09 01:07

マークダウンがどうしてもわかりません。
m.ts10806

2019/05/09 01:10 編集

分からないではわかりません。 質問投稿画面左下にもMarkdown説明のタブがあって開くと「どのように打つとどのような表示になるのか」という説明もあります。(入力例と表示例まである。) ヘルプにもあります。 https://teratail.com/help#about-markdown あとは使って慣れてください。
guest

回答2

0

接続するデータベースの登録方法はいくつかあります。

  1. サーブレットやその他のクラスから直接コードに接続情報を書いて接続する(=提示していただいた書き方です)
  2. META-INFの中に context.xml を作成してその中に接続情報を書いて、Javaクラスから参照する
  3. 実行しているTomcatの中にある server.xml ないしは context.xmlに接続情報を書いて、Javaクラスから参照する

一番手軽で、サーバの設定をいじらずに済むのが 2 の方法です。

以下に手順よくまとまっているblogがありますので、参考にされると良いでしょう。

https://garafu.blogspot.com/2016/05/how-to-connect-mysql.html

投稿2019/05/08 22:26

A-pZ

総合スコア12011

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

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

0

ベストアンサー

「Java MySQL」で調べたら大抵の紹介記事はベタで使いたいタイミングで書いています。
まずは紹介記事に倣い、使いたいタイミングでベタで書いてください。

「どこに書くと効率が良くなるか」を考えるのはベタで使えるようになってからです。
そのうちDAOとかDTOとかの概念を取り込んでいくことになるでしょうけど、それはまだ先の段階です。
フレームワークを利用するとなるとまた変わってくるので、それはそのときに学べば良いと思います。

投稿2019/05/08 05:56

m.ts10806

総合スコア80850

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

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

kokok

2019/05/08 07:06

ありがとうございます。とりあえず書いてみます package sample1; import java.io.IOException; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; import java.sql.*; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @WebServlet("/Hello") public class Hello extends HttpServlet { private static final long serialVersionUID = 1L; public Hello() { super(); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html; charset=utf-8"); PrintWriter out = response.getWriter(); Connection conn = null; String url ="jdbc:mysql://localhost/training"; String user = "ryota"; String password ="ryota"; try{ Class.forName("com.mysql.jdbc.Driver").newInstance(); conn = DriverManager.getConnection(url,user,password); Statement stmt =conn.createStatement(); String sql ="SELECT * FROM user"; ResultSet rs = stmt.executeQuery(sql); } すいません、質問が多いですが executeQueryのメソッドはselect文の結果が入るといことこでしょうか? あと、コードはマークダウン機能が調べても分かりませんでした。どのようなものなのでしょうか?
m.ts10806

2019/05/08 07:10

別でも書きましたがコードは質問本文に追記してください。 マークダウンについてはteratailのヘルプをご確認いただければと。 https://teratail.com/help#about-markdown 過去質問で何度か指摘うけられてるみたいですね(私もしてますね) 質問は編集できます。 マークダウンのcode機能を利用することできちんとインデントもつけられて実際に質問者さんが組んだコードと同じものが提示でき、ワンクリックでコピーできるため、回答者側にも有用な形でコードを提示することができるものです。
kokok

2019/05/08 07:19

丁寧にありがとうございます executeQueryのメソッドはselect文の結果のテーブルができるという認識で間違いないでしょうか?
m.ts10806

2019/05/08 07:22

ドキュメントに書いてありますね。 返却値はResultSet https://docs.oracle.com/javase/jp/8/docs/api/java/sql/ResultSet.html 「テーブルができる」というのは解釈としてはおかしいです。 そもそも「データベース」「テーブル」等、概念や用語をきちんと扱えていないように思います。そちらをおさえるのが先です。 というかそれよりも先に質問編集してコード追記してください。マークダウン利用して。
kokok

2019/05/08 07:52

ドキュメントに書いてありますね。 返却値はResultSet Q:sql文の結果が入ってるというイメージ間違えでしょうか?理解できていなくて申し訳ないです
m.ts10806

2019/05/08 07:56

「自身が何となく理解して要約した言葉」よりも実際のドキュメントで利用されている用語や表現を使われたほうがトラブルがないです。executeQuery()の結果は他のなんでもなくResultSetです。 ResultSetが何者かは提示したドキュメントに詳細に記載されています。
kokok

2019/05/08 08:46

すいません、徐々に理解していきます
m.ts10806

2019/05/08 08:49

>追記されたコード そのコードで今起きている問題は何でしょうか?DBから取得した情報を出力する処理が書かれていないようです。 DBへの接続がエラーなく完了していて、実際にuserテーブルというテーブルが存在して各カラムが確実に存在し、データもあるのでしたらあとは出力処理を書くだけと思います。 どのように出力するかはあくまで見た目(html)の問題で仕様なので自身で決めてください。
m.ts10806

2019/05/08 08:49

あ、インデントはきちんとそろえてくださいね。 IDE使っているならコードフォーマット機能はあると思いますし。
kokok

2019/05/09 00:44

コードフォーマット機能というのは、エクリプスのjavaファイル右クリック→ソース→フォーマット で できるということでしょうか?
m.ts10806

2019/05/09 00:48

質問者さんがEclipse使われているのを今知らされたわけですけど、 まず、やってみては。 Eclipse使っててこのインデントはかなりまずいとは思います。(読みにくいと思いません?)
m.ts10806

2019/05/09 00:49

なぜ質問本文まで丸々消してしまうのか・・・ いっそのこと質問テンプレート使われては。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問