• ベストアンサー

「Exception in thread "main" java.lang.NoClassDefFoundError: CUSTOMER」エラー

Oracle9i R2にJDBCで接続してCUSTOMER表のレコード件数を調べる単純なJavaプログラムをつくろうとしています。 以下のソースをOracle端末上で実行すると「Exception in thread "main" java.lang.NoClassDefFoundError: CUSTOMER」というエラーメッセージが表示されます。 環境設定としてCLASSPATHにclasses12.zipのパスを通しました。 ------------------------------------------------- // JDBC APIのインポート import java.sql.*;class CUSTOMER { public static void main (String args[]) throws SQLException, ClassNotFoundException { // JDBC Driverの登録 Class.forName("oracle.jdbc.driver.OracleDriver"); // Oracle9iに接続 Connection conn = DriverManager.getConnection ("jdbc:oracle:thin@192.168.0.10:1521:testdb", "test", "test"); // ステートメントを作成 Statement stmt = conn.createStatement(); // 問い合わせの実行 ResultSet rset = stmt.executeQuery("SELECT COUNT(*) FROM CUSTOMER"); // 問い合わせ結果の表示 while ( rset.next() ) { // 列番号による指定 System.out.println(rset.getInt(1) + "\t" + rset.getString(2)); } // 結果セットをクローズ rset.close(); // ステートメントをクローズ stmt.close(); // 接続をクローズ conn.close(); } } ------------------------------------------------- 何かおわかりの方いらっしゃいましたら教えて下さい。宜しくお願いします。

  • Java
  • 回答数8
  • ありがとう数12

質問者が選んだベストアンサー

  • ベストアンサー
  • potedora
  • ベストアンサー率47% (66/140)
回答No.8

thin@ではなくthin:@です。

rio_grande
質問者

お礼

potedoraさん有難うございました。 そうでした。

その他の回答 (7)

  • itto_
  • ベストアンサー率33% (1/3)
回答No.7

>Connection conn = >DriverManager.getConnection ("jdbc:oracle:thin@192.168.0.10:1521:testdb", "test", "test"); Exceptionのメッセージ通り、この部分がおかしいようです。 IPアドレス及びポート番号、SID、ユーザー、パスワードはあっていますか?

参考URL:
http://www.techscore.com/tech/Java/JDBC/oracle-1.html
回答No.6

三度,#3です. ひとまずNoClassDefFoundErrorの問題はクリアでよかったですね. ソースを見て気づいたことがあります. SQL文ではで"SELECT COUNT(*) ..."としていますね. そうすると,rset.getString(2)ではおかしなことになります. 整数値が入るフィールドから文字列を読み込めないからです. SELECT * FROM CUSTOMER; とすべきではないですか? これがエラーの原因かどうか分かりませんが...

  • potedora
  • ベストアンサー率47% (66/140)
回答No.5

#2です。 CUSTOMER.classがC:\WORKに存在している場合で cd C:\WORK java -classpath C:\WORK CUSTOMER でやってみてください。

回答No.4

#3です.お返事ありがとうございました. Windows環境下ということですが,CLASSPATHの設定はマイコンピュータのプロパティの中にある「環境設定」で行われているんですよね? 憶測ですが,コマンドプロンプトで実行されているのではないかと思います. もしもそうならば,環境設定の変更は一度コマンドプロンプトを終了しないと,反映されません. 試しに,SETと入力して見て下さい. もしも変更が反映されていないならば,一度終了して再度実行してみて下さい.

rio_grande
質問者

お礼

lively-gonさん、ご回答有難うございました。 すみません、コマンドプロンプトを終了させずに実行しようとしておりました。 今、コマンドプロンプトを一度終了し、再度立ち上げて実行したところおっしゃるとおりエラーメッセージが変りました。 引き続き質問して恐縮ですが、無効なOracle URLとはどこの記述が悪いのでしょうか? ------------------------------------------------- Exception in thread "main" java.sql.SQLException: 無効なOracle URLが指定されまし た。 at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134) at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:179) at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:269) at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:188) at java.sql.DriverManager.getConnection(Unknown Source) at java.sql.DriverManager.getConnection(Unknown Source) at CUSTOMER.main(syn_cust.java:17) -------------------------------------------------

回答No.3

こんにちは CLASSPATHの設定はどのようになっていますか? CLASSPATH=x:\yyy\classes12.zip (Windowsの場合) という感じですか? もしもそうだったら CLASSPATH=.;x:\yyy\classes12.zip のように,ピリオドとセミコロンを最初に付けてみて下さい. ピリオドはカレントディレクトリを示しています.

rio_grande
質問者

お礼

lively-gonさん、ご回答有難うございます。 本件はWindows環境です。ご指摘どおり「.;」を最初につけて試してみましたが、結果は同じになってしまいました。。

  • potedora
  • ベストアンサー率47% (66/140)
回答No.2

CUSTOMER.classはできていますか? 実行しているカレントディレクトリに CUSTOMER.classがありますか? CUSTOMER.classがC:\WORKに存在している場合 cd C:\WORK java CUSTOMER として実行してみてください。 ソースに間違いがいくつかあるようですので 違うエラーが出ると思います。

rio_grande
質問者

お礼

potedoraさん、ご回答有難うございます。 CUSTOMER.classはカレントディレクトリ(F:\直下)にございます。javacコマンドでエラーなくコンパイルできました。しかし、java CUSTOMERを入力すると、このメッセージが出ます。 どうしてでしょうか

noname#12599
noname#12599
回答No.1

CUSTOMERというクラスはないのだと思います。 JAVA何か1度も作ったことがないので間違っているとも老いますが・・・。

関連するQ&A

  • DBサーバ上でjdbcによるアクセス方法について

    Oracle JDBC Driverのロードを以下のように行おうとしました。 import java.sql.*; class JavaDataAccess01 { public static void main (String args[]) throws SQLException, ClassNotFoundException { // Oracle JDBC Driverのロード Class.forName("oracle.jdbc.driver.OracleDriver"); // Oracle10gに接続 Connection conn = DriverManager.getConnection ("jdbc:oracle:thin:@localhost:1521:ORCL", "test", "test"); // ステートメントを作成 Statement stmt = conn.createStatement(); // 問合せの実行 ResultSet rset = stmt.executeQuery("select brand_id,value from brand"); // 問合せ結果の表示 while ( rset.next() ) { // 列番号による指定 System.out.println(rset.getInt(1) + "\t" + rset.getString(2)); } // 結果セットをクローズ rset.close(); // ステートメントをクローズ stmt.close(); // 接続をクローズ conn.close(); } } コンパイル後実行すると以下のように例外がでます。 Exception in thread "main" java.lang.ClassNotFoundException: oracle.jdbc.driver. OracleDriver at java.net.URLClassLoader$1.run(URLClassLoader.java:199) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:187) at java.lang.ClassLoader.loadClass(ClassLoader.java:289) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:274) at java.lang.ClassLoader.loadClass(ClassLoader.java:235) at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:302) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:141) at JavaDataAccess01.main(JavaDataAccess01.java:11) ちなみにコンパイルして作成したクラスファイルはJavaDataAccess01です。使用しているDBはoracle10gです。環境設定もCLASSPATHにD:\oracle\product\10.2.0\db_1\jdbc\lib\classes12.zipを追加しているのですがどうにもうまくいきません。どなたか解決方法がわかる方、ご教授お願いします。

  • JavaでのOracle接続について(JDBC)

    はじめまして。 先週よりJavaの勉強を始めていまして 先日からDB接続(Oracle)をやっているのですが、Oracleに接続することが出来ません。色々なサイトからクラスパスが通っていないというエラーのようなのですが、プログラミング経験のある友人に聞いてもさっぱり原因が分かりません。また何度もインストールをやり直して同じです。以下に環境とソースを載せておきますので、もし何か解決のヒントになるような事がありましたら教えて下さい。 ●状況 (1)コンパイルは通るがjavaコマンドで実行をすると”Exception in thread "main" java.lang.ClassNotFoundException: oracle.jdbc.driveOracleDriver”が出てしまう。 (2)C:\oracle\ora92\jdbc\lib\ojdbc14.jarを環境変数→Pathへしっかりと通してあります。(setコマンドでも確認済みです) (3)C:\j2sdk1.4.1_02\jre\lib\extへojdbc14.jarをコピー (4)SQL PLUSからは接続出来る。 ●環境 クライアント:Win2000 DBサーバー:SQLサーバー(別マシンに環境構築) DB:Oralce9.2.0 JDK:1.4.1_02 import java.sql.*; class Employee { public static void main (String args []) throws SQLException,ClassNotFoundException { // Oracle JDBC Driverのロード Class.forName("oracle.jdbc.driver.OracleDriver"); Connection conn = DriverManager.getConnection ("jdbc:oracle:thin:@ホスト名:1521:SID", "ID", "パスワード"); Statement stmt = conn.createStatement (); ResultSet rset = stmt.executeQuery ("SQL"); while (rset.next ()) System.out.println (rset.getString ("ISBN")); rset.close(); conn.close(); } } 以上です。何か足りない情報がありましたら教えて下さい。

  • JDBCで複数のクラスファイルを作成しアクセスしようとしたときに起こる問題点

    Javaとデータベース(oracle)を連動させて、Statementなどを実行して値をとってこようとしています。1つのJavaファイル内にてコンパイル、実行はできたのですが、複数のJavaファイルに切り出したときにコンパイルはできるのですが、実行すると Exception in thread "main" java.lang.NullPointerException at DBAccess.Zenkenkensaku.zenkenkensaku(Zenkenkensaku.java:21) at DBAccess.JavaDataAccess.main(JavaDataAccess.java:19) と出てしまってできません。エラーメッセージを見る限り、ステートメントの作成がうまくできていない感じがするのですが、何がいけなかったのでしょうか、原因がわかりません。よろしくお願いします。下にそのファイルを書きます。 JavaDataAccess.java //DBにアクセスするクラスの切り出し package DBAccess; //JDBC APIをインポート import java.sql.*; //メイン class JavaDataAccess { public static void main (String args[]) throws SQLException, ClassNotFoundException { //接続の呼び出し ConnectClose connectclose1 = new ConnectClose(); connectclose1.Connect(); //全件検索の呼び出し Zenkenkensaku zenkenkensaku1 = new Zenkenkensaku(); zenkenkensaku1.zenkenkensaku(); //接続をクローズする呼び出し ConnectClose connectclose2 = new ConnectClose(); connectclose2.Close(); } } Zenkenkensaku.java //全件検索ファイル //パッケージ package DBAccess; //JDBC APIをインポート import java.sql.*; class Zenkenkensaku { //宣言と初期化 Connection conn = null; Statement stmt = null; ResultSet rset = null; //全件検索の内容 public void zenkenkensaku() throws SQLException { // ステートメントを作成 stmt = conn.createStatement(); //問合せの実行 rset = stmt.executeQuery("select 商品コード, 商品名, 単価 from 商品"); // 問合せ結果の表示 while( rset.next()){ //列番号による指定 System.out.println (rset.getInt(1) + "\t" + rset.getString(2) + "\t" + rset.getInt(3)); } } }

    • ベストアンサー
    • Java
  • Oracle Database 10g Express Editionを使いたい

    と思いDLしてインストールして SQLPLUSで ユーザ:usr1 パスワード:psswd1 でOracleに入り SQL> CREATE TABLE "PROJECT" ( "ID" NUMBER NOT NULL ENABLE, "PJNAME" VARCHAR2(100) NOT NULL ENABLE, CONSTRAINT "PROJECT_PK" PRIMARY KEY ("ID") ENABLE ) / 2 3 4 5 6 表が作成されました。 SQL> describe project; 名前 NULL? 型 ----------------------------------------- -------- ---------------------------- ID NOT NULL NUMBER PJNAME NOT NULL VARCHAR2(100) SQL> とテーブルを作り以下のJavaアプリを作り実行しましたが 動きませんでした。getConnectionの引数の "jdbc:oracle:thin:@localhost:1521:ORCL" の中のORCLの部分に何を入れてよいのか分からなかったので 根拠なしにORCLを使ったのが悪かったと思います。 ORCLの部分には何を入れたらいいのでしょうか? package pack; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class JdbcTest { public static void main(String args[]) throws SQLException,ClassNotFoundException { Class.forName("oracle.jdbc.driver.OracleDriver"); Connection conn=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:ORCL","usr1","psswd1"); Statement stmt = conn.createStatement(); ResultSet rset = stmt.executeQuery("select ip,pjname from project"); while (rset.next()) { System.out.println(rset.getInt(1) + "\t" + rset.getString(2)); } rset.close(); stmt.close(); conn.close(); } } エラー:Exception in thread "main" java.sql.SQLException: Listener refused the connection with the following error: ORA-12505, TNS:listener does not currently know of SID given in connect descriptor The Connection descriptor used by the client was: localhost:1521:ORCL

    • ベストアンサー
    • Java
  • java.lang.NoClassDefFoundErrorというエラーが出ます

    ご質問させて頂きます。 自分のPC(XP)からTelnetで LINUX(Red Hat Linux release 9 (Shrike))に接続しています。 サンプルを参考にして以下のコードを作ってみました。 これは、PostgreSQLで作成したデータベース(aa)の テーブル(test)のデータを表示させようとしています。 import java.sql.*; public class sample1{  public static void main(String [] args){   String driver = "org.postgresql.Driver";   String url = "jdbc:postgresql://192.178.215.230/home/postgres/data/aa";   try{     Class.forName(driver);     Connection con = DriverManager.getConnection(url,"postgres","aaaa");     Statement st = con.createStatement();     ResultSet rs = st.executeQuery("SELECT * FROM test");      System.out.println("shainno shimei ");     while ( rs.next() ){        System.out.println(" "+rs.getInt("shainno")+" "+ rs.getString("shimei"));     }     rs.close();      st.close();      con.close();     }catch (SQLException sqlEx){     System.out.println("SQLERROR: " + sqlEx.toString());   }catch (Exception ex){     ex.printStackTrace();   }  } } これを実行すると、 [postgres@localhost postgres]$ java sample1 以下のようなエラーが出てします。 Exception in thread "main" java.lang.NoClassDefFoundError: sample1 ご教授して頂けたら幸いです。

    • ベストアンサー
    • Java
  • jdbc:oracle:thinでSSLを使用する方法について

    java.sql.SQLException: I/O例外です。: The Network Adapter could not establish the connectionというエラーが発生します。 ソースは以下です、どこが間違っているかわかりません。 import java.sql.*; import java.util.*; public class TestSSL { public static void main(String[] argv) throws Exception { DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver()); Properties prop = new Properties(); prop.setProperty("user", "scott"); prop.setProperty("password", "tiger"); // THIS DOES NOT WORK YET prop.setProperty("oracle.net.ssl_cipher_suites", "(ssl_rsa_export_with_rc4_40_md5, ssl_rsa_export_with_des40_cbc_sha)"); prop.setProperty("oracle.net.ssl_client_authentication", "false"); prop.setProperty("oracle.net.ssl_version", "3.0"); prop.setProperty("oracle.net.encryption_client", "REJECTED"); prop.setProperty("oracle.net.crypto_checksum_client", "REJECTED"); Connection conn = DriverManager.getConnection( "jdbc:oracle:thin:@(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCPS)(HOST = localhost)(PORT = 2484))) (CONNECT_DATA = (SERVICE_NAME = XE)))", prop); Statement stmt = conn.createStatement(); ResultSet rset = stmt.executeQuery( "select 'Hello Thin driver SSL " + "tester '||USER||'!' result from dual"); while(rset.next()) System.out.println(rset.getString(1)); rset.close(); stmt.close(); conn.close(); } } ご教授よろしくお願いします。

  • JDBC Connectionを開放し続ける方法

    JDBC経由でOracleに接続して、接続しっぱなしにしたいのですが、どうすればいいのかよくわかりません。 とりあえず正常終了するようなソースを書いてみました。このソースからconnectionをCloseしないように編集したいのですが、どうすればいいのかわかりません。 やりたいことはJDBCの複数同時Connectionを試したくて、このConnectionを維持したまま、何回かこのプログラムを実行すればいいかなと思っているんですが。 長くなりましたが、よろしくお願いします。 import java.sql.*; class Employee { public static void main (String args []) throws SQLException { // Load the Oracle JDBC driver DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver()); // Connect to the database // You must put a database name after the @ sign in the connection URL. // You can use either the fully specified SQL*net syntax or a short cut // syntax as <host>:<port>:<sid>. The example uses the short cut syntax. Connection conn = DriverManager.getConnection ("jdbc:oracle:thin:@HOST:PORT:SID", "scott", "tiger"); // Create a Statement Statement stmt = conn.createStatement (); // Select the ENAME column from the EMP table ResultSet rset = stmt.executeQuery ("select ENAME from EMP"); // Iterate through the result and print the employee names while (rset.next ()) System.out.println (rset.getString (1)); } }

    • ベストアンサー
    • Java
  • JavaからOracleへの接続が出来たり出来なかったり(改

    いつもお世話になっています。よろしくお願いします。 問題は、同じソースなのに、タイミングによって Oracleに接続出来たり、出来なかったりすることです。 まずは、問題のソースを短くまとめたものを書きたいと思います。 public class Sql private static Statement stmt; private static Connection conn; public static void main(String args[]) { Sql banana = new Sql banana(); banana.openOracle(); // Oracleへ接続するメソッドです。 ・ ・リャクサレテルワァ*:.。..。.:*・゜(n;‘∀)η(略 ・ banana.closeOracle(); // Oracleを切断するメソッドです。 } /** * Oracleへ接続するメソッドです。 */ private void openOracle() throws SQLException, ClassNotFoundException{ Class.forName("oracle.jdbc.driver.OracleDriver"); conn = DriverManager.getConnection("jdbc:oracle:oci8:@sampledb","user5","user5"); stmt = conn.createStatement(); } /** * Oracleを切断するメソッドです。 */ private void closeOracle() throws SQLException, ClassNotFoundException{ stmt.close(); conn.close(); } } 環境としては、 JDK5.0と、 Oracle9i(Client)をインストールしています。 インストールしてから今日まで1週間ですが、このような現象は 初めて起こりました。 JavaからOracleのデータベースを操作するようになって 3日目ですが、今日までうまく接続出来てきました。 処理をメソッドに分けてみたのは、今日が初めてです。 しかし、同じソースで接続できたりできなかったりする というのは、どういう現象なのでしょうか。 同じような現象を経験された方、 Oracle接続にお詳しい方、 どうか、ご教授よろしくお願いします。 プログラミングも、質問させていただくことも初心者ですので、 何か足りない情報などございましたら、ご指摘ください。 よろしくお願いします。

    • ベストアンサー
    • Java
  • java.lang.NoClassDefFoundErrorというエラーが出ます その2

    ご質問させて頂きます。 java.lang.NoClassDefFoundErrorというエラーが出ます http://oshiete1.goo.ne.jp/kotaeru.php3?q=952983 の続きの質問なんですが・・・。 次のような実行時エラーが出ます。 java.lang.ClassNotFoundException: org.postgresql.Driver at java.net.URLClassLoader$1.run(URLClassLoader.java:198) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:186) at java.lang.ClassLoader.loadClass(ClassLoader.java:299) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:265) at java.lang.ClassLoader.loadClass(ClassLoader.java:255) at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:315) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:140) at sample1.main(sample1.java:8) そこで、 >PostgreSQLのODBCドライバをCLASSPATHに含めていますか? >postgresql.jarとかpg72jdbc2.jarといったファイルがどこかにあるはずです. と、回答者の方からアドバイスをして頂きました。 ところが、postgresql.jarとかpg72jdbc2.jarもありませんでした。 ネットで検索をしたところ、「postgresql743.jar」というのがありましたので /usr/javaに格納しました。 /etc/profileに、 export PATH=$PATH:/usr/java export CLASSPATH=$CLASSPATH:/usr/java. と追加しました。 しかし、同じエラーが出てします。 対処方法をご存じでしたら、ご教授して頂けたら幸いです。

    • ベストアンサー
    • Java
  • JavaでOracle9iのデータベースにアクセスしたいのですが

    JavaでOracleのデータベース上のテーブルにアクセスして、 ウェブブラウザで表示したいのですが、 参考として以下の文を入手はしたのですが、 それぞれの文の意味がよく分かりません。 import java.sql.*; public class JDBCExample { public static void main(String args[]) throws SQLException { DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver()); Connection conn= DriverManager.getConnection("jdbc:oracle:thin:@dlsun137:5521:sol1", "scott", "tiger"); Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("select ename, empno, sal from emp"); while(rs.next()){ String name= rs.getString(1); int number = rs.getInt(2); double salary = rs.getDouble(3); System.out.println(name+" "+number+" "+salary); } rs.close(); conn.close(); } } 見た感じ、テーブルそのものを表示する記述ではないような気がするのと、 仮にこのクラスを作ったとして、このクラスだけで望んだ結果を得られるのでしょうか? どなたか、よろしくお願いいたします!

    • ベストアンサー
    • Java

専門家に質問してみよう