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

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

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

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

JDBC

JDBC(Java DataBase Connectivity)は、Javaとリーレーショナルデータベースに接続させる基本的なAPIです。Java上でSQLステートメントを発行することで、データベースの種類に影響を受ないDB操作を可能とします。

Java

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

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

Tomcat

TomcatはApache Software Foundation (ASF)で開発されたオープンソースのWebコンテナです。

Q&A

解決済

2回答

646閲覧

MacでJDBC開発をする際の環境変数の設定とNULLが返ってくる理由が知りたいです。

Yasu47

総合スコア3

MySQL

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

JDBC

JDBC(Java DataBase Connectivity)は、Javaとリーレーショナルデータベースに接続させる基本的なAPIです。Java上でSQLステートメントを発行することで、データベースの種類に影響を受ないDB操作を可能とします。

Java

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

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

Tomcat

TomcatはApache Software Foundation (ASF)で開発されたオープンソースのWebコンテナです。

0グッド

1クリップ

投稿2023/03/01 15:09

編集2023/03/01 17:33

実現したいこと

①Javaの環境変数の設定ができているのか知りたいです
②エラーになっている理由が知りたいです

前提

Macを使って独学でJava、tomcat、MySQLを勉強しています。
Youtube を参考にしてJDBCを学習していたのですが、コンパイルが通っても実行結果が「null」で返ってきます。
環境の設定が間違っているのか、コードが間違っているのかわかりません。
ご教授お願いいたします。
イメージ説明

/Library/apache-tomcat-9.0.72/webapps/dbweb  ├ showname.html  ├ initialize.sql  ├ showname.jsp  │   └ /WEB-INF/classes     └ ShowNameServlet.java
mysql> use sampledb mysql> SELECT * FROM student; +----+--------+-------+ | no | name | score | +----+--------+-------+ | 1 | 菅原 | 60 | | 2 | 桜井 | 100 | | 3 | 田原 | 85 | | 4 | 中川 | 90 | | 5 | 鈴木 | 75 | | 6 | 小林 | 95 | | 7 | 藤原 | 90 | | 8 | 草野 | 85 | | 9 | 常田 | 80 | | 10 | 小橋 | 75 | +----+--------+-------+ 10 rows in set (0.00 sec)

発生している問題・エラーメッセージ

イメージ説明
イメージ説明

該当のソースコード

showname.html

<!DOCTYPE html> <html> <head> <meta charset="utf-8"/> <title>ボタン画面</title> </head> <body> <h2>noが1の生徒名を表示します</h2> <form action="/dbweb/showname" method="post"> <input type="submit" value="実行" /> </form> </body> </html>

ShowNameServlet.java

import java.io.*; import java.sql.*; import javax.servlet.*; import javax.servlet.http.*; import javax.servlet.annotation.*; @WebServlet("/showname") public class ShowNameServlet extends HttpServlet { public void doPost(HttpServletRequest req, HttpServletResponse res) throws IOException, ServletException { final String URL = "jdbc:mysql://localhost/sampledb"; final String USER = "root"; final String PASS = "pass"; String sql = "SELECT name FROM student WHERE no = 1"; Connection con = null; Statement stmt = null; ResultSet rs = null; try{ con = DriverManager.getConnection(URL, USER, PASS); stmt = con.createStatement(); rs = stmt.executeQuery(sql); rs.next(); String name = rs.getString("name"); req.setAttribute("name", name); } catch(Exception e){ e.printStackTrace(); } finally { try{ if(rs != null) rs.close(); if(stmt != null) stmt.close(); if(con != null) con.close(); } catch(Exception e){ e.printStackTrace(); } } RequestDispatcher rd = req.getRequestDispatcher("/showname.jsp"); rd.forward(req, res); } public void doGet(HttpServletRequest req, HttpServletResponse res) throws IOException, ServletException { doPost(req, res); } }

showname.jsp

<%@page contentType="text/html;charset=utf-8" %> <html> <head> <title>表示画面</title> </head> <body> <h2>noが1の生徒名は <%= request.getAttribute("name") %> です </h2> </body> </html>

initialize.sql

DELETE FROM student; INSERT INTO student VALUES(1,'菅原',60); INSERT INTO student VALUES(2,'桜井',100); INSERT INTO student VALUES(3,'田原',85); INSERT INTO student VALUES(4,'中川',90); INSERT INTO student VALUES(5,'鈴木',75); INSERT INTO student VALUES(6,'小林',95); INSERT INTO student VALUES(7,'藤原',90); INSERT INTO student VALUES(8,'草野',85); INSERT INTO student VALUES(9,'常田',80); INSERT INTO student VALUES(10,'小橋',75);

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

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

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

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

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

dameo

2023/03/02 14:27

forwardしているので、request(req)オブジェクトを使って書き換えて問題ありません。 ShowNameServlet でMySQLに問い合わせてる際に例外が出ていませんか? 例外が出ていると、req.setAttribute("name", name);が実行されず、nullになることがありそうです。 他にも環境問題の可能性もありますが、それならforwardだけをするコードで確認すべきです。 forwardする前に値が入っているのかどうかを確認するなど、どこまでうまく動いていてどこから動いていないのか見つけてください。 またデータベースならデータベース、JDBCならJDBC、tomcat+サーブレットならtomcat+サーブレット、jspならjspと1つずつ出来るようになっていった後、それらを組み合わせたものを書いてください。 でないと、自分で切り分けられません。 なお、デバッガが使えるように、統合開発環境を用意した方がいいです。
Yasu47

2023/03/04 06:28

ご指摘ありがとうござます。 一度動きを確認してみます。
guest

回答2

0

自己解決

もう一度勉強しなおします

投稿2023/03/26 07:24

Yasu47

総合スコア3

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

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

0

rs = stmt.executeQuery(sql); rs.next(); String name = rs.getString("name"); req.setAttribute("name", name);

あてずっぽですけど、DBから得られたnameをreq(request)にセットしていいのかしら?
"実行"に対する応答なんだからres(response)にセットするんじゃないの?

投稿2023/03/02 01:56

編集2023/03/02 01:57
episteme

総合スコア16614

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

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

Yasu47

2023/03/02 12:54

ご回答いただいてありがとうございます。 res(response)にしたらコンパイルがエラーになってしまいました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問