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

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

ただいまの
回答率

90.53%

  • Java

    13751questions

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

  • Eclipse

    1656questions

    Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

h2データベースの値の出力方法

受付中

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 928

shintanakama

score 2

プログラミング初心者です。初めて質問します。失礼な点がありましたら申し訳ございません。Macを使って、h2データベースにある値を出力するjavaプログラミングをしているのですが、うまくいきません。h2dデータベースのテーブル作成を出来ておりテーブルの表も表示されるのですが、実行するとテーブルが見つかりませんとなります。初歩的な問題だと思いますが自分で解決できず困っおります。ご教授いただけると助かります

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

org.h2.jdbc.JdbcSQLException: テーブル "EMPLOYEE" が見つかりません
Table "EMPLOYEE" not found; SQL statement:
SELECT ID,NAME,AGE FROM EMPLOYEE [42102-196]
at org.h2.message.DbException.getJdbcSQLException(DbException.java:345)
at org.h2.message.DbException.get(DbException.java:179)
at org.h2.message.DbException.get(DbException.java:155)
at org.h2.command.Parser.readTableOrView(Parser.java:5552)
at org.h2.command.Parser.readTableFilter(Parser.java:1266)
at org.h2.command.Parser.parseSelectSimpleFromPart(Parser.java:1946)
at org.h2.command.Parser.parseSelectSimple(Parser.java:2095)
at org.h2.command.Parser.parseSelectSub(Parser.java:1940)
at org.h2.command.Parser.parseSelectUnion(Parser.java:1755)
at org.h2.command.Parser.parseSelect(Parser.java:1743)
at org.h2.command.Parser.parsePrepared(Parser.java:449)
at org.h2.command.Parser.parse(Parser.java:321)
at org.h2.command.Parser.parse(Parser.java:293)
at org.h2.command.Parser.prepareCommand(Parser.java:258)
at org.h2.engine.Session.prepareLocal(Session.java:578)
at org.h2.engine.Session.prepareCommand(Session.java:519)
at org.h2.jdbc.JdbcConnection.prepareCommand(JdbcConnection.java:1204)
at org.h2.jdbc.JdbcPreparedStatement.<init>(JdbcPreparedStatement.java:73)
at org.h2.jdbc.JdbcConnection.prepareStatement(JdbcConnection.java:288)
at example.SelectEmployeeSample.main(SelectEmployeeSample.java:30)

該当のソースコード

```ここに言語を入力
ここにご自身が実行したソースコードを書いてください
package example;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

/**

  • @author nakamashinta
  •   */
    public class SelectEmployeeSample {
    public static void main(String[] args)  {

Connection conn = null;
try {
//JDBCドライバを読み込み
Class.forName("org.h2.Driver");//JDBCドライバの名前
//データベース接続
conn = DriverManager.getConnection("jdbc:h2:file:application:/data/example","sa","");//接続先DB、ユーザ名、パスワード

//SELECT文を準備
String sql = "SELECT ID,NAME,AGE FROM EMPLOYEE";
PreparedStatement pStmt = conn.prepareStatement(sql);//準備したSQLをDBに届けるprepareStatementインスタンスを取得

//SELECTを実行し、結果表(ResultSet)に取得
ResultSet rs = pStmt.executeQuery();//ResultSetインスタンスにSELECT文の結果が格納される
//結果表に格納されたレコードの内容を表示
while(rs.next()) {
String id = rs.getString("ID");
String name = rs.getString("NAME");
int age = rs.getInt("AGE");
//取得したデータを出力
System.out.println("ID:" + id);
System.out.println("名前:" + name);
System.out.println("年齢: " + age + "¥n");
}
} catch(SQLException e) {
e.printStackTrace(); //接続やSQL処理の失敗時の処理、必要に応じて
} catch(ClassNotFoundException e) {
e.printStackTrace();  //JDBCドライバが見つからない時の処理、必要に応じて
} finally {
//データベース切断
if(conn != null) {
try {
conn.close();
} catch(SQLException e) {
e.printStackTrace(); //切断失敗時の処理、必要に応じて
}
}
}
}
}

試したこと

課題に対してアプローチしたことを記載してください
プログラミング入門書に記載のコードを入力しておりますが、入門書をwindows向け、私はMacで、データベース接続の部分を変更したりしているのですが上手く行きません。h2インストールファイルはアプリケーションフォルダに保存しております。eclipseビルドパスや、libフォルダにh2-1.4.196.jarを貼り付けたりもしておりますが上手く行きません。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

+1

H2DBのテーブルを作成したときのファイルパスがあっていないかと思います。

なお特に接続方法にてファイルが存在しているかチェックしていない場合は、特に何も作成していないデータベースを作成しつつ接続するため、「接続はうまくいっている(ように見えるが実は空のデータベースを作成している)が、テーブルは未定義のため、テーブルが見つからない」状態になります。

これを回避するオプションもあります。

http://www.h2database.com/html/features.html#database_only_if_exists

例:String url = "jdbc:h2:/data/sample;IFEXISTS=TRUE";

;IFEXISTS=TRUEをつけることで、データベースのファイルが存在したときのみ接続でき、存在しなかった場合は例外がスローされます。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/09/10 13:36

    返信ありがとうございます。またURLの記載もありがとうございます。H2のファイルパスをもう一度指定し直し、データベースも作成し直しましたが上手く行きませんでした。(h2ファイルパス:jdbc:h2:application:/data/example、javaはjdbc:h2:application:/data/example","sa",""、もしくは、jdbc:h2:file:C:/data/example、javaはjdbc:h2:file:C:/data/example","sa","" で作成、ユーザ名はsa、パスワードなし)テーブルEMPLOYEEが見つかりませんとエラーになります。自分でもファイルパスにミスはないか色々やって見ますが、もし上記で間違いがあれば教えていただけると助かります。

    キャンセル

  • 2017/09/11 15:09

    H2DBでテーブルを作成した手順についてですが、サービスで起動したものをコンソールで開いた時のH2DB接続のURLと、JavaのコードからH2DBへ接続したときのURLは、両方とも全く同じでしょうか?この値が異なる場合は、実際には別のデータベースへ接続しています。特に~(チルダ)から始まるURLだった場合は、管理コンソールでの接続URLを具体的なファイルパスに変更しましょう。

    キャンセル

  • 2017/09/11 22:16

    全く同じだと思います。最終的に下記のように記載しました。エラー内容は、『org.h2.jdbc.JdbcSQLException: テーブル "EMPLOYEE" が見つかりません』です。
    https://gyazo.com/6a72ceed05477e87fb0d2c84d2ea4910
    https://gyazo.com/edfb68a2316916400332ecd2385cc32d
    //JDBCドライバを読み込み
    Class.forName("org.h2.Driver");//JDBCドライバの名前
    //データベース接続
    conn = DriverManager.getConnection( "jdbc:h2:Application:/data/example","sa","");//接続先DB、ユーザ名、パスワード

    キャンセル

  • 2017/09/11 22:18

    お忙しい中返信していただき本当にありがとうございます。何かお気づきな点がございましたら教えていただけると助かります。

    キャンセル

  • 2017/09/12 00:24

    ちょっと気になるのは、撮っていただいた画像のURLを見ると
    jdbc:h2:Application と先頭のAが全角になっていることでしょうか。

    キャンセル

  • 2017/09/12 23:50

    返信ありがとうございます。applicationの方でも試しましたが、上手くいきませんでした。他の方法を考えてみます。

    キャンセル

  • 2017/09/14 01:05

    一度 http://www.h2database.com/html/features.html#connection_modes の公式サイトにならった接続子を使うのがよいでしょうか。applicationの記述は不要で、jdbc:h2:file:を使ってファイルパスを指定するとうまくいくでしょうか(少なくともこちらでは検証済みです)

    キャンセル

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

  • ただいまの回答率 90.53%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Java

    13751questions

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

  • Eclipse

    1656questions

    Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。