前提・実現したいこと
eclipse、ローカルサーバーのTomcat、Java(JSP/サーブレット)を使って、H2データベースを参照しテーブルの一覧をWebページに表示させるプログラムを作りました。
Tomcatで実行したときは上手く動くのですが、これをherokuを用いてデプロイすると、以下のエラーが発生しH2データベースに接続出来なくなりました。
発生している問題・エラーメッセージ
org.h2.jdbc.JdbcSQLNonTransientConnectionException: Connection is broken
該当のソースコード
Java
1package dao; 2 3import java.sql.Connection; 4import java.sql.DriverManager; 5import java.sql.PreparedStatement; 6import java.sql.ResultSet; 7import java.sql.SQLException; 8import java.util.ArrayList; 9import java.util.List; 10 11import model.Mutter; 12 13public class MutterDAO { 14 //データベース接続に使用する情報 15 private final String JDBC_URL = "jdbc:h2:tcp://〇〇〇.〇〇.〇/~/docoTsubu"; //〇の部分にはIPアドレスが入っています 16 private final String DB_USER = "sa"; 17 private final String DB_PASS = ""; 18 19 public List<Mutter> findAll(){ 20 List<Mutter> mutterList = new ArrayList<>(); 21 22 //データベース接続 23 try(Connection conn = DriverManager.getConnection(JDBC_URL, DB_USER, DB_PASS)){ 24 //SELECT文の準備 25 String sql = 26 "SELECT ID,NAME,TEXT FROM MUTTER ORDER BY ID DESC"; 27 PreparedStatement pStmt = conn.prepareStatement(sql); 28 29 //SELECTを実行 30 ResultSet rs = pStmt.executeQuery(); 31 32 //SELECT文の結果をArrayListに格納 33 while (rs.next()) { 34 int id = rs.getInt("ID"); 35 String userName = rs.getString("NAME"); 36 String text = rs.getString("TEXT"); 37 Mutter mutter = new Mutter(id, userName, text); 38 mutterList.add(mutter); 39 } 40 }catch(SQLException e) { 41 e.printStackTrace(); 42 return null; 43 } 44 45 return mutterList; 46 } 47 48 public boolean create(Mutter mutter) { 49 //データベース接続 50 try(Connection conn = DriverManager.getConnection(JDBC_URL, DB_USER, DB_PASS)){ 51 //INSERT 文の準備 52 String sql = "INSERT INTO MUTTER(NAME, TEXT) VALUES(?, ?)"; 53 PreparedStatement pStmt = conn.prepareStatement(sql); 54 55 //INSERT文中の?に使用する値を設定し、SQLを完成 56 pStmt.setString(1, mutter.getUserName()); 57 pStmt.setString(2, mutter.getText()); 58 59 //INSERT文を実行(1行のみ追加。追加されたのが1行じゃなかったらfalseを返す) 60 int result = pStmt.executeUpdate(); 61 if(result != 1) { 62 return false; 63 } 64 65 }catch(SQLException e) { 66 e.printStackTrace(); 67 return false; 68 } 69 return true; 70 } 71} 72
試したこと
・Class.forName("org.h2.Driver");
という文をデータベース接続前に置く。
・WebContent/WEB-INF/lib/にh2のJDBCドライバを設置。
補足情報
恥ずかしながらheroku側のデータベース設定は何も行っていません。
herokuがH2データベースに対応していないのか、それともheroku側で何か設定しなければならないのか。どちらが原因か分かりません。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。