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

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

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

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

Q&A

1回答

283閲覧

H2データベース、DAO実行について'

meguuuu

総合スコア7

Eclipse

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

0グッド

0クリップ

投稿2025/02/23 01:46

編集2025/02/23 03:24

実現したいこと

H2DATABASEにあるテーブルの中身をEclipse上で取り出したい

発生している問題・分からないこと

すっきりわかるサーブレットJSPの13章にて、ウェブ付録にあるH2DATABASEにデータベースを作成しようとしたところ
(https://sukkiri.jp/books/sukkiri_servlet4/sukkiri_servlet4_appendix/h2-database%e3%81%ab%e3%83%87%e3%83%bc%e3%82%bf%e3%83%99%e3%83%bc%e3%82%b9%e3%82%92%e4%bd%9c%e6%88%90.html?section=13.1.1)

Generic H2(Embedded)を選択し、本書では「jdbc:h2:tcp://localhost/~/example」を指定した場合、
C:¥dataフォルダにあるデータベースexample」作成されます。」とあるのですがこれを実行しても作成されなかったので
Cドライブ直下にDATAフォルダを作成し、jdbc:h2:file:c:/data/exampleとしてパスワード1234を設定するとファイルを作ることができました
そしてこのデータベースに

CREATE TABLE EMPLOYEES (
ID CHAR (6) PRIMARY KEY,
NAME VARCHAR (100) NOT NULL,
AGE INT NOT NULL
);
INSERT INTO EMPLOYEES (ID, NAME, AGE) VALUES ('EMP001', '湊 雄輔', 23);
INSERT INTO EMPLOYEES (ID, NAME, AGE) VALUES ('EMP002', '綾部 めぐみ', 22);

とテーブルを作成、実行すると正しくテーブルが作成されているのを確認できました

その後H2DATABASEのJDBCドライバをダウンロード、webapp/WEB-INF/libフォルダにこのドライバをコピーして配置しました

そしてこれを実行するためにエクリプスで動的webプロジェクトでexampleを作成しました(以下コード)がエラー(おそらく例外?)が発生してしまいました
後に「jdbc:h2:~/example」としてもH2DATABASEに接続することはできましたがこれをエクリプス上で入力したも結局同じようにエラーになってしましました

エラーメッセージ

error

1<eclpse> 2 3Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/juli/logging/LogFactory 4 at org.apache.tomcat.util.compat.Jre16Compat.<clinit>(Jre16Compat.java:33) 5 at org.apache.tomcat.util.compat.JreCompat.<clinit>(JreCompat.java:60) 6 at org.apache.catalina.startup.Tomcat.<clinit>(Tomcat.java:1193) 7Caused by: java.lang.ClassNotFoundException: org.apache.juli.logging.LogFactory 8 at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) 9 at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) 10 at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:526) 11 ... 3 more 12 13 14<Java Virtul Machine Launcher> 15 16A Java Exception has occured

該当のソースコード

<ECLIPSE> 動的webプロジェクト"example" package example; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; public class SelectEmployees { public static void main(String[] args) { // TODO 自動生成されたメソッド・スタブ try { Class.forName("org.h2.Driver"); } catch (ClassNotFoundException e) { throw new IllegalStateException( "JDCドライバを読み込めませんでした"); } try (Connection conn = DriverManager.getConnection( "jdbc:h2:file:c:/data/example", "sa", "1234")) { String sql = "SELECT ID,NAME,AGE FROM EMPLOYEES"; PreparedStatement pSmt = conn.prepareStatement(sql); ResultSet rs=pSmt.executeQuery(); 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("ID"+age); System.out.println("ID"+name); } }catch(SQLException e) { e.printStackTrace(); } } } <H2DATABASE> ”EMPLOYEES” DROP TABLE IF EXISTS TEST; CREATE TABLE TEST(ID INT PRIMARY KEY, NAME VARCHAR(255)); INSERT INTO TEST VALUES(1, 'Hello'); INSERT INTO TEST VALUES(2, 'World'); SELECT * FROM TEST ORDER BY ID; UPDATE TEST SET NAME='Hi' WHERE ID=1; DELETE FROM TEST WHERE ID=2;

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

もともと本書では「【13章 13.1.1】で使用するexampleデータベースを作成するには、JDBC URLはjdbc:h2:~/exampleを指定してください
※ データベースがH2コンソールを操作したユーザのホームディレクトリに作成されます。」とあったのですがこjdbc:h2:~/exampleを入力しても
Database ~/examplenot found, either pre-create it or allow remote database creation (not recommended in secure environments) [90149-200] 90149/90149 (ヘルプ)
(細かいエラーまでは忘れました、この後エラーが出なくなったので)
と表示されていたがこの後上記のように、jdbc:h2:file:c:/data/exampleを作成、そしてサーバに項目を変える?)とjdbc:h2:~/exampleと入力してもエラーにはならなくなりました

補足

<環境>
エクリプス
Version: 2024-12 (4.34.0)
Build id: 20241128-0757

openjdk version "12.0.2" 2019-07-16
OpenJDK Runtime Environment (build 12.0.2+10)
OpenJDK 64-Bit Server VM (build 12.0.2+10, mixed mode, sharing)

TomCat10 java21

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

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

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

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

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

meguuuu

2025/02/23 01:47

なぜか取り消し線(横線)が引いてしまっていますが、気にしないでください
TakaiY

2025/02/23 02:39 編集

> なぜか取り消し線(横線)が引いてしまっています これはmark downの仕様で ~ と ~ に挟まれた部分を打ち消し線付きで表示するからです。 「」で囲まれている jdbc:h2:~/exampleの部分を `(バッククオート)で囲む `jdbc:h2:/example` と意図通りに表示されると思います。 質問は編集できますので、直してみてください。
meguuuu

2025/02/23 03:25

コメントありがとうございます。質問を修正したのでご確認よろしくお願いいたします。
dodox86

2025/02/23 06:22

初めてのご質問でしょうから仕方無いかもしれませんが、結局のところ、質問が何なのか読んだ者にはちょっと分かりづらいようです。 色々試したことは記載されていますが、文としては報告だけになってます。最終的に質問として聞きたいことが何なのか示しましょう。 恐らく「エラーが出力されてしまって要望通りに動かないけどどうしたらよいのでしょうか?」といったところでしょうか。 エラー(例外)が発生する手順としても分からないのですが、「動的Webプロジェクト」でexampleと言う名前のプロジェクトを新規に作成し、SelectEmployees.javaと言うDAOのファイルを作成し、Javaサーブレットとしては別のコードがあって実行したのでしょうか? ご提示のエラー出力内容も、tomcat起動時のログ出力関連のエラーに思え、肝心のH2データベース云々の話ではないように思います。
dodox86

2025/02/23 08:21

質問文を読んでみると、H2データベースとそのJDBCドライバー、DAO云々の前に動的Webプロジェクトで単なるJavaサーブレットが正しく動作しているようにも見えません。 まず、その辺りを確実にしてみることをお勧めします。 > openjdk version "12.0.2" 2019-07-16 > OpenJDK Runtime Environment (build 12.0.2+10) > OpenJDK 64-Bit Server VM (build 12.0.2+10, mixed mode, sharing) > > TomCat10 java21 tomcat10の稼働ではJava21とありますが、そうではない場合はJava12 と言うことでしょうか。設定を正しくすることでそのようなかたちでも不可能ではないと思いますが、お使いの動作環境に疑問が残ります。
meguuuu

2025/02/23 09:47

皆さんアドバイスどうもありがとうございます 帰ったら一度確認してみます
meguuuu

2025/02/24 11:07

JDKとエクリプスを再DLしたら問題なく実行出来ました アドバイスありがとうございました🙇
guest

回答1

0

javaのエラーのところは見ていませんが、リンク先の手順を見ると、囲みの部分に

【13章 13.1.1】で使用するexampleデータベースを作成するは、JDBC URLは「jdbc:h2:~/example」を指定してください
※ データベースがH2コンソールを操作したユーザのホームディレクトリに作成されます。

と書いてありますので、データベースを作成する場所は 「/data/example」 ではなく、 「ホームディレクトリのexample」が正解です。 そこにDBを作ってやってみてください。

文中に「/data/example」とあるのは、例えでの説明です。

例えば「jdbc:h2:file:C:/data/example」を指定した場合、「C:¥data」フォルダにあるデータベース「example」が作成されます。

投稿2025/02/23 02:36

TakaiY

総合スコア14199

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

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

meguuuu

2025/02/24 11:04

回答ありがとうございます。 試したところ問題が解決しました! ベストアンサーに選ばせていただきました。 確かにJDKが古いとは思っていたのでJDKの最新版はDLしていたのですが調べてみるとエクリプスではJDKは必要ないと書かれていたのでインストールはしていない状況でした JDKを最新にして一度エクリプスを再DLしたら問題なく実行出来ました 皆様アドバイスありがとうございました
dodox86

2025/02/25 00:40

@質問者 qtaroabcdさん ベストアンサーに選んだ上で、質問を閉じましょう。(終わらせましょう) コメントの内容がいただいている回答とかみあっていないのが少し気になりますが、EclipseとJDKを再インストールして、いただいた回答に従ってソースコードを修正したら正しく動くようになった、と言うことなのでしょうか。
TakaiY

2025/02/25 01:53

解決したのであれば、自己解決の回答を作るのが適切かと。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.32%

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

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

質問する

関連した質問