前提・実現したいこと
初投稿です。
質問の仕方や内容等ご指摘いただければ幸いです。
やさしいJava 活用編 第6版を使い、Java言語を勉強中です。
データベースを学習していて
ソースファイルはコンパイルできたのですが、クラスファイルはエラーが出て実行できません。
エラーの原因をなぜなのか突き止めて
クラスファイルを実行できるようにしたいです。
ファイルの配置等は教科書通りにしています。
お分かりになられる方いらしゃいましたらご教授ください。
よろしくお願い致します。
ディレクトリ階層
C
┃
┗Program Files
┃
┗━━Java
┃
┣derby.jar
┗jdk-14.0.2
┃
┗━━bin
┗Sample1.class
発生している問題・エラーメッセージ
C:\Program Files\Java\jdk-14.0.2\bin>java Sample1
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/derby/shared/common/security/SystemPermission
at org.apache.derby.iapi.jdbc.AutoloadedDriver.connect(AutoloadedDriver.java:134)
at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:677)
at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:228)
at Sample1.main(Sample1.java:14)
Caused by: java.lang.ClassNotFoundException: org.apache.derby.shared.common.security.SystemPermission
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:602)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
... 4 more
該当のソースコード
import java.sql.*; public class Sample1 { public static void main(String args[]) { try{ //接続の準備 String url = "jdbc:derby:cardb;create=true"; String usr = ""; String pw = ""; //データベースへの接続 Connection cn = DriverManager.getConnection(url, usr, pw); //問い合わせの準備 DatabaseMetaData dm = cn.getMetaData(); ResultSet tb = dm.getTables(null, null, "車表", null); Statement st = cn.createStatement(); String qry1 = "CREATE TABLE 車表(番号 int, 名前 varchar(50))"; String[] qry2 = {"INSERT INTO 車表 VALUES (2, '乗用車')", "INSERT INTO 車表 VALUES (3, 'オープンカー')", "INSERT INTO 車表 VALUES (4, 'トラック')"}; String qry3 = "SELECT * FROM 車表"; if(!tb.next()){ st.executeUpdate(qry1); for(int i=0; i<qry2.length; i++){ st.executeUpdate(qry2[i]); } } //問い合わせ ResultSet rs = st.executeQuery(qry3); //データの取得 ResultSetMetaData rm = rs.getMetaData(); int cnum = rm.getColumnCount(); while(rs.next()){ for(int i=1; i<=cnum; i++){ System.out.print(rm.getColumnName(i) + ":"+ rs.getObject(i) + " "); } System.out.println(""); } //接続のクローズ rs.close(); st.close(); cn.close(); } catch(Exception e){ e.printStackTrace(); } } }
試したこと
NoClassDefFoundErrorの意味を調べました。
Java実行時にクラスファイルやライブラリを読み込むクラスローダが、クラスを見つけられない時に発生するエラーであると認知しました。
CLASSPATHを設定してderby.jarを読み込むようにしているのですが、
それでもクラスファイルを実行できないので困っています。
補足情報(FW/ツールのバージョンなど)
OS:windows10
実行環境:コマンドプロンプト
Open JDk
バージョン:jdk-14.0.2
Apache Derby
バージョン:db-derby-10.15.1.3
ユーザー環境変数:
Path
C:\Program Files\Java\jdk-14.0.2\bin;
CLASSPATH
C:\Program Files\Java\derby.jar;C:\Program Files\Apache Software Foundation\Tomcat 9.0\lib\servlet-api.jar;.;
回答3件
あなたの回答
tips
プレビュー