1

警告:Javaは初めてです

私は単純なNetbeansプロジェクトを持っています-phpから来るDBとの相互作用について学びたかったのですが、自分のコンピューターで実行されているローカルプロジェクトを試してみようと思いました。

多くの例では、InitialContext()オブジェクトを使用してデータベースリソースを参照すると述べています。

例に従った後、次の例外が発生します-多くのGoogleのものがいくつかの.xmlファイルを指しています-それはNetbeansプロジェクトのどこにあるのか、あるいはどこにあるのかさえわかりませんか?現時点ではWebサーバーを使用していないので、Tomcatなどではなく、これを行うためのローカルJavaプログラムだけで、これが問題である可能性があります。誰かがこれに光を当てることができますか?

Exception thrown javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file:  java.naming.


package learningjava;
import com.mysql.jdbc.jdbc2.optional.*;
import com.mysql.jdbc.Driver;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.naming.*;



public class LearningJava {

    public static void main(String[] args) {

       MysqlDataSource test_db = new MysqlDataSource(); 

       test_db.setServerName("localhost");
       test_db.setDatabaseName("dev");

       try {

            InitialContext test_db_context = new InitialContext();
            test_db_context.bind("jcdb/testdb", test_db);
            MysqlDataSource test_db_datasource = (MysqlDataSource)test_db_context.lookup("testdb");

       } catch (NamingException e) {

           System.out.println("Exception thrown " + e);

       }
        try {

            test_db.getConnection("root","password");

        } catch (SQLException e) {

             System.out.println("Exception thrown " + e);

        }


    }    

}
4

3 に答える 3

2

InitialContext test_db_context = new InitialContext();:の前にこれを追加してみてください

System.setProperty(Context.INITIAL_CONTEXT_FACTORY, "org.apache.naming.java.javaURLContextFactory");
System.setProperty(Context.URL_PKG_PREFIXES, "org.apache.naming");

クラスパスにjarnaming-common-4.1.34とmysql-connector-java-5.1.6を含める必要があります

この例は私にとってはうまくいきます(最適化されていませんが、うまくいきます!)

public static void main(String[] args) throws NamingException {
        // Create initial context
        System.setProperty(Context.INITIAL_CONTEXT_FACTORY, "org.apache.naming.java.javaURLContextFactory");
        System.setProperty(Context.URL_PKG_PREFIXES, "org.apache.naming");

        InitialContext ic = new InitialContext();
        ic.createSubcontext("java:");
        ic.createSubcontext("java:comp");
        ic.createSubcontext("java:comp/env");
        ic.createSubcontext("java:comp/env/jdbc");

         MysqlConnectionPoolDataSource mysqlConnectionPoolDataSource = new MysqlConnectionPoolDataSource();
         mysqlConnectionPoolDataSource.setUser("root");
         mysqlConnectionPoolDataSource.setPassword("root");
         mysqlConnectionPoolDataSource.setURL("jdbc:mysql://localhost:3306/test_my_database");

         ic.bind("java:comp/env/jdbc/test", mysqlConnectionPoolDataSource);

    }
于 2012-07-09T13:30:37.457 に答える
0

一般に、JNDIにはサーバーが必要であることを理解する必要があります。提供したコードスニペットでは、ルックアップを実行するときにJNDIテクノロジの_CLIENT_SIDE_部分を使用しています。ローカルクライアント接続からアクセスできるJNDIサーバーが必要です。正しく設定されると、ルックアップの呼び出しはJNDIサーバーとの接続を発行し、そのサーバーにリソースを取得/バインドする方法を提供する必要があります。

JNDIを正しく構成するにはどうすればよいですか?

通常、このサーバーのホスト名、ポート、および実装固有の情報を含むプロパティファイルを提供する必要があります。

JNDIサーバーは通常、アプリケーションサーバー(JBossやWeb Sphereなど)を使用しているときにすでに提供されています。これが誤解の根源だと思います。

お役に立てれば

于 2012-07-09T13:30:41.977 に答える
0

通常、JNDIはアプリケーションサーバー内で使用されますが、これはあなたの場合ではありません。

必要に応じて、次のコードを使用できます。

Class.forName("com.mysql.jdbc.Driver")
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost/dbname", "user", "password");

また、ここでMySQLドライバーをダウンロードし、対応するJARファイル(mysql-connector-java-5.1.21-bin.jar)をアプリケーションのクラスパスに追加する必要があります。ここでは、その方法について説明します

于 2012-07-09T13:33:55.687 に答える