1

次のクラスを接続マネージャーとして使用して、データソースを介して DB 接続を確立しています。問題は、DAOImpl クラスを介してこのクラスを呼び出すと、null が返されることです。

private static DataSource dataSource;
private static Connection connection;

private ConnectionFactory() {
    System.out.println(" ConnPoolFactory cons is called ");
}

public static synchronized Connection getConnection() throws SQLException {

    try {

        if (connection == null) {
            Context ctx = new InitialContext();
            Context envContext = (Context) ctx.lookup("java:/comp/env");


            dataSource = (DataSource) envContext.lookup("jdbc/myoracle");
            connection = dataSource.getConnection();
        } else {
            return connection;
        }

    } catch (NamingException e) {
        e.printStackTrace();
    }
    System.out.println(connection);
    return connection;
    //System.out.println(connection);

} 
  • DriverManagerコネクティビティに使用すると、このクラスを機能させることができます。
  • を使用してサーブレット クラスを介して JDBC 接続を実現できます DataSource

しかし、上記のコードでは、次の例外が発生します。

javax.naming.NoInitialContextException: 環境またはシステム プロパティで、またはアプレット パラメータとして、またはアプリケーション リソース ファイルでクラス名を指定する必要があります:

以下は私のcontext.xmlです

<リソース認証="コンテナ"
          driverClassName="oracle.jdbc.OracleDriver"
          name="jdbc/myoracle"
          パスワード="パスワード"
          type="javax.sql.DataSource"
          url="jdbc:oracle:thin:@10.49.116.42:1521:DBNAME"
          ユーザー名="ユーザー名"/>
4

5 に答える 5

1

あなたはcontext.xmlについて言及しました。したがって、JDBC 接続に Apache Tomcat コンテナを使用していると仮定します。

したがって、私にとって問題は以下の可能性によるものと思われます:

  1. Web アプリケーションの META-INF ディレクトリと $CATALINA_BASE/conf ディレクトリの下の context.xml ファイルで同じ名前の 2 つのリソースが両方とも宣言されている場合、内部バージョンが優先されます。META-INF の下に context.xml があり、CATALINA_BASE/conf server.xml で正しい構成を行っているかどうかを確認してください。その場合は、META-INF の下の context.xml ファイルを更新します。

Apache Web サイトからのメモ: Tomcat 固有のリソース構成は、$CATALINA_BASE/conf/server.xml または、できれば Web アプリケーションごとのコンテキスト XML ファイル (META-INF/context.xml) で指定できる要素に入力されます。 .

  1. リソース名 (コードで言及されているように、jdbc/myoracle) は、Web アプリケーションのデプロイメント記述子で指定された値と一致する必要があることに注意してください。リンクは方法を説明しています: https://tomcat.apache.org/tomcat-5.5-doc/jndi-resources-howto.html

注:リソースが要素で定義されている場合、そのリソースを /WEB-INF/web.xml で定義する必要はありません。ただし、Web アプリケーションのリソース要件を文書化するために、エントリを /WEB-INF/web.xml に保持することをお勧めします。そのため、web.xml の Oracle JDBC エントリを削除してみて、問題が解決するかどうかを最初に評価してください。次に、正しいエントリを入力します。

  1. コンテナーを使用せずに JDBC 接続をテストしたい場合は、RMI レジストリーを使用できます。以下の投稿には、Oracle でテストするために変更できる MYSQL の例があります。javax.naming.NoInitialContextException with mysql DataSource
于 2015-06-30T06:47:07.537 に答える
1

あなたが何を尋ねようとしているのか本当に理解できません...しかし、JDBC接続が必要な場合は、ここに方法があります:
1.使用しているRDBMS用のJDBCドライバーをインストールする必要があります...使用している場合IDEの場合、個別にインストールする必要はありません...
2.ドライバーが保存されている場所をコンピューターに通知する必要があり
ます i>環境変数を設定する必要がありますコントロール パネルの検索環境変数で

その後、Javaコードをデータベースに接続する準備が整いました

try{
Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:port_number/Database name","root","password");

使用しているデータベースのデータベース名、ポート番号、およびパスワードを入力する必要があります。 注:ここでは、データベースは MySql です。他の RDBMS の場合、URL は異なります。お役に立てれば

于 2013-10-13T08:58:48.657 に答える