Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JNDI InitialContext在简单netbeans项目中不起作用_Java_Exception_Netbeans_Jndi - Fatal编程技术网

Java JNDI InitialContext在简单netbeans项目中不起作用

Java JNDI InitialContext在简单netbeans项目中不起作用,java,exception,netbeans,jndi,Java,Exception,Netbeans,Jndi,警告:Java新功能 我有一个简单的Netbeans项目——我只想学习如何与来自php的DB进行交互,我想我会尝试在我的计算机上运行一个本地的 很多例子都说使用InitialContext()对象来引用数据库资源 在遵循这些示例之后,我得到了以下例外-许多Google内容指向一些.xml文件-我不知道这些文件,甚至不知道它在Netbeans项目中的位置?我现在没有使用Web服务器,所以没有使用Tomcat或类似的东西,只是使用本地Java程序来实现这一点,我怀疑这可能是问题所在。有人能解释一下吗

警告: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);

        }


    }    

}

您是否可以尝试在
InitialContext测试_db_context=new InitialContext()之前添加此选项

System.setProperty(Context.INITIAL_CONTEXT_FACTORY, "org.apache.naming.java.javaURLContextFactory");
System.setProperty(Context.URL_PKG_PREFIXES, "org.apache.naming");
您应该在类路径中包含jar-naming-common-4.1.34和mysql-connector-java-5.1.6

这个例子对我很有用(没有优化,但是很有用!)


一般来说,您应该理解JNDI应该有一个服务器。在您提供的代码片段中,当您进行查找时,您正在使用JNDI技术的_客户端_部分。应该有一个可以从本地客户端连接访问的JNDI服务器。 正确配置后,对lookup的调用应发出与JNDI服务器的连接,并提供获取/绑定该服务器资源的方法

如何正确配置JNDI

通常,您应该提供一个属性文件,该文件将包含此服务器的主机名、端口和一些特定于实现的信息

当您使用应用服务器(如JBoss或WebSphere)时,通常已经提供了JNDI服务器。 我认为这是误解的根源


希望,这会有所帮助

通常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)添加到应用程序的类路径中。

请发布您的异常。这将有助于解释到底发生了什么
Class.forName("com.mysql.jdbc.Driver")
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost/dbname", "user", "password");