##前提
私は、会社に提出するためにJavaで統計解析を行うアプリケーションの設計と開発を行なっています。
このアプリケーションの中で、現在「ログイン機能」の開発を行なっています。
このログイン機能のサーバーサイドの開発で「H2Database」を利用しており、JDBCを利用してJavaでDBに接続してユーザー情報を検索する過程でエラーが発生しており、困っています。
具体的には、
DBの接続をテストしている段階で、DBに接続できないというエラーが発生しております。
こちらが、DB接続をテストするプログラムです。
Java
1package test; 2 3import dao.AccountDAO; 4import model.Account; 5import model.Login; 6 7public class AccountDAOTest { 8 public static void main(String[] args) { 9 testFindByLogin1(); //ユーザーが見つかる場合のテスト 10 testFindByLogin2(); //見つからない場合のテスト 11 } 12 13 public static void testFindByLogin1() { 14 Login login = new Login("minato", "1234"); 15 AccountDAO dao = new AccountDAO(); 16 Account result = dao.findByLogin(login); 17 if (result != null && 18 result.getUserId().equals("minato") && 19 result.getPass().equals("1234") && 20 result.getMail().equals("minato@gmail.com") && 21 result.getName().equals("湊 雄介") && 22 result.getAge() == 23) { 23 System.out.println("1:成功"); 24 } else { 25 System.out.println("1:失敗"); 26 } 27 } 28 29 public static void testFindByLogin2() { 30 Login login = new Login("minato", "12345"); 31 AccountDAO dao = new AccountDAO(); 32 Account result = dao.findByLogin(login); 33 if (result == null) { 34 System.out.println("2:成功"); 35 } else { 36 System.out.println("2:失敗"); 37 } 38 } 39}
次にこちらがJDBCを利用してDBに接続するプログラムです。
Java
1package dao; 2 3import java.sql.Connection; 4import java.sql.DriverManager; 5import java.sql.PreparedStatement; 6import java.sql.ResultSet; 7import java.sql.SQLException; 8 9import model.Account; 10import model.Login; 11 12public class AccountDAO { 13 //DB接続に使用する情報 14 private final String JDBC_URL = "jdbc:h2:tcp://localhost/~/Acount"; 15 //private final String JDBC_URL = "jdbc:h2:~/Account"; 16 private final String DB_USER = "sa"; 17 private final String DB_PASS = ""; 18 19 public Account findByLogin(Login login) { 20 Account account = null; 21 22 //DBに接続 23 try (Connection conn = DriverManager.getConnection(JDBC_URL, DB_USER, DB_PASS)) { 24 //SELECT文を準備 25 String sql = "SELECT USER_ID, PASS, MAIL, NAME, AGE FROM ACCOUNT WHERE USER_ID = ? AND PASS = ?"; 26 PreparedStatement pStmt = conn.prepareStatement(sql); 27 //他のファイルからloginに格納されたuserIdとpassで、ユーザーを検索する 28 pStmt.setString(1, login.getUserId()); 29 pStmt.setString(2, login.getPass()); 30 31 //実行し、結果を取得 32 ResultSet rs = pStmt.executeQuery(); 33 34 //一致したユーザーが存在した場合、Accountインスタンスを作成 35 if (rs.next()) { 36 String userId = rs.getString("USER_ID"); 37 String pass = rs.getString("PASS"); 38 String mail = rs.getString("MAIL"); 39 String name = rs.getString("NAME"); 40 int age = rs.getInt("AGE"); 41 //Account.javaに、ユーザーの情報を渡す 42 account = new Account(userId, pass, mail, name, age); 43 } 44 } catch (SQLException e) { 45 System.out.println(e); 46 return null; 47 } 48 //nullは、ユーザーが見つかっている場合は変更される 49 return null; 50 } 51}
※LoginとAccountは、フィールドを定義しているgetterのみがあるファイルです。
上記のJDBCプログラムをDB接続テストファイルを通して実行すると、
error
1org.h2.jdbc.JdbcSQLNonTransientConnectionException: Database "/Users/nishidayuki/Acount" not found, either pre-create it or allow remote database creation (not recommended in secure environments) [90149-200] 2 at org.h2.message.DbException.getJdbcSQLException(DbException.java:622) 3 at org.h2.message.DbException.getJdbcSQLException(DbException.java:429) 4 at org.h2.message.DbException.get(DbException.java:205) 5 at org.h2.message.DbException.get(DbException.java:181) 6 at org.h2.engine.Engine.openSession(Engine.java:71) 7 at org.h2.engine.Engine.openSession(Engine.java:192) 8 at org.h2.engine.Engine.createSessionAndValidate(Engine.java:171) 9 at org.h2.engine.Engine.createSession(Engine.java:166) 10 at org.h2.server.TcpServerThread.run(TcpServerThread.java:168) 11 at java.base/java.lang.Thread.run(Thread.java:832) 12 131:失敗 14org.h2.jdbc.JdbcSQLNonTransientConnectionException: Database "/Users/nishidayuki/Acount" not found, either pre-create it or allow remote database creation (not recommended in secure environments) [90149-200] 15 at org.h2.message.DbException.getJdbcSQLException(DbException.java:622) 16 at org.h2.message.DbException.getJdbcSQLException(DbException.java:429) 17 at org.h2.message.DbException.get(DbException.java:205) 18 at org.h2.message.DbException.get(DbException.java:181) 19 at org.h2.engine.Engine.openSession(Engine.java:71) 20 at org.h2.engine.Engine.openSession(Engine.java:192) 21 at org.h2.engine.Engine.createSessionAndValidate(Engine.java:171) 22 at org.h2.engine.Engine.createSession(Engine.java:166) 23 at org.h2.server.TcpServerThread.run(TcpServerThread.java:168) 24 at java.base/java.lang.Thread.run(Thread.java:832) 25 262:成功
SQLExceptionに行って上記のようなエラーが出てしまいます。
##自分が試したこと
・JDBCコネクタはトムキャットのlib中の規定の位置に配置している
・DBは起動している
・H2DatabaseのコンソールのJDBCURLはサーバーモードで
jdbc:h2:tcp://localhost/~/Account
であり、
JavaのDAO内にも同じJDBCURLを記述しているが、データベースが見つからないというエラーが出る。
##教えていただきたいこと
DBに接続できていない原因は何なのかを、教えていただきたいです。