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

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

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

HerokuはHeroku社が開発と運営を行っているPaaSの名称です。RubyやNode.js、Python、そしてJVMベース(Java、Scala、Clojureなど)の複数のプログラミング言語をサポートしている。

JDBC

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

JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Java

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

Q&A

0回答

469閲覧

Javaサーブレットを使って、heroku postgreSQLのデータを表示する方法について

kaoru2020

総合スコア0

Heroku

HerokuはHeroku社が開発と運営を行っているPaaSの名称です。RubyやNode.js、Python、そしてJVMベース(Java、Scala、Clojureなど)の複数のプログラミング言語をサポートしている。

JDBC

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

JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Java

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

0グッド

0クリップ

投稿2022/01/16 00:42

プログラミング初心者です。

Javaサーブレットを使って、postgreSQLのテーブルに入っているデータ一覧を表示するプログラムを作りました。

ローカル環境では動くのですが、herokuにデプロイするとエラーが発生してうまく動きません。

ネット上で色々と調べてみましたが、どうしても分からなかったので、質問させて頂きました。

解決方法について、何卒アドバイスよろしくお願い致します。

herokuにデプロイしたjavaサーブレットの起動画面
イメージ説明

「データベースの中身を表示ボタン」を押すと起こるエラー画面】500エラー
イメージ説明

index.jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>データベース接続テスト</title> </head> <body> <h1>データベース接続テストを行います</h1> <form action="main" method="get"> <input type="submit" value="データベースの中身を表示"> </form> </body> </html>
show_users.jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="java.util.ArrayList"%> <%@ page import="database.UserBean"%> <% ArrayList<UserBean> beanList = (ArrayList<UserBean>) request.getAttribute("beanList"); %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>ユーザ表示</title> </head> <body> <table> <tbody> <tr> <th>ユーザID</th> <th>名前</th> <th>性別</th> </tr> <% for (UserBean bean : beanList) { %> <tr> <td><%=bean.getId()%></td> <td><%=bean.getName()%></td> <td><%=bean.getSex()%></td> </tr> <% } // endfor %> </tbody> </table> </body> </html>
package database; import java.io.Serializable; public class UserBean implements Serializable { private static final long serialVersionUID = 1L; private int id; private String name; private int sex; UserBean() { } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getSex() { return sex; } public void setSex(int sex) { this.sex = sex; } }
package database; import java.io.IOException; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; import javax.servlet.RequestDispatcher; import javax.servlet.ServletContext; 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("/main") public class Main extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { Connection conn = null; String url = "jdbc:postgres:// ●●●●"; String user = "●●●●"; String password = "●●●●"; // beanList を生成 ArrayList<UserBean> beanList = new ArrayList<UserBean>(); try { // JDBC ドライバを読み込み Class.forName("org.postgresql.Driver"); conn = DriverManager.getConnection(url, user, password); // データベースへ SQL 文を発行 Statement stmt = conn.createStatement(); String sql = "SELECT * FROM sample2"; ResultSet rs = stmt.executeQuery(sql); while (rs.next()) { // bean を生成 UserBean bean = new UserBean(); // SQL リザルトからデータを取得し、bean に保存していく bean.setId(rs.getInt("id")); bean.setName(rs.getString("name")); bean.setSex(rs.getInt("sex")); // データを保存した bean を beanList に追加 beanList.add(bean); } rs.close(); stmt.close(); } catch (ClassNotFoundException e) { // 例外処理 e.printStackTrace(); } catch (SQLException e) { // 例外処理 e.printStackTrace(); } catch (Exception e) { // 例外処理 e.printStackTrace(); } finally { try { if (conn != null) { conn.close(); } } catch (SQLException e) { // 例外処理 e.printStackTrace(); } } // beanList をリクエストにセット request.setAttribute("beanList", beanList); ServletContext context = this.getServletContext(); // フォワード先を指定 RequestDispatcher dispatcher = context.getRequestDispatcher("/database/show_users.jsp"); // フォワード処理 dispatcher.forward(request, response); } }

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

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

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

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

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

hoshi-takanori

2022/01/16 00:50

データベース接続の際の、url や user や password で ●●●● になってる部分が問題だと思います。 ローカルでは url は localhost だったり、user や password は自分で好きに決めたりすると思いますが、heroku では heroku 側で設定した内容が環境変数にセットされるので、それを参照する必要があります。 https://devcenter.heroku.com/ja/articles/connecting-to-relational-databases-on-heroku-with-java#using-the-database_url-in-plain-jdbc
kaoru2020

2022/01/16 01:27

こんなにも早く回答くださって、ありがとうございます! herokuの「Database Credentials」の中に、urlやuser、psswordが書いてありますが、転記ミスしているかもしれないので、確認してみます。
hoshi-takanori

2022/01/16 01:50

それは直接ソースに転記するのではなく、リンク先に書いてあるように環境変数から動的に取得するのが好ましいです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問