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