1

我使用以下类作为我的连接管理器来通过数据源建立数据库连接。问题是当我通过我的 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
  • 我能够通过 servlet 类使用 DataSource.

但是使用上面的代码,我得到以下异常:

javax.naming.NoInitialContextException:需要在环境或系统属性中指定类名,或作为小程序参数,或在应用程序资源文件中:

以下是我的 context.xml

<资源授权="容器"
          driverClassName="oracle.jdbc.OracleDriver"
          名称="jdbc/myoracle"
          密码="密码"
          类型="javax.sql.DataSource"
          url="jdbc:oracle:thin:@10.49.116.42:1521:DBNAME"
          用户名="用户名"/>
4

5 回答 5

1

你这样写 jdbc 连接代码

String url = "jdbc url" + "databaseName;userName;password;";

        try 
        {
            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
            con = DriverManager.getConnection(url);
        } 
        catch (ClassNotFoundException cnfex) 
        {
            cnfex.printStackTrace();
        }
于 2013-10-03T07:38:26.453 回答
1

连接示例代码

 public static Connection Connect(){


    try {

        Class.forName("oracle.jdbc.driver.OracleDriver");

    } catch (ClassNotFoundException e) {

        System.out.println("Where is your Oracle JDBC Driver?");
        e.printStackTrace();
        return null;

    }

    System.out.println("Oracle JDBC Driver Registered!");

    Connection connection = null;

    try {

        connection = DriverManager.getConnection(
                "YOUR JDBC URL", "USERNAME",
                "PASSWORD");

    } catch (SQLException e) {

        System.out.println("Connection Failed! Check output console");
        e.printStackTrace();
        return null;

    }



    return connection;

}
于 2013-10-03T07:11:38.847 回答
1

我想你错过了数据库连接的主机和端口

于 2013-10-03T07:08:11.703 回答
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 回答
1

您提到了 context.xml。因此,假设您使用 Apache Tomcat 容器进行 JDBC 连接。

所以,对我来说,问题似乎是由于以下可能性:

  1. 如果两个具有相同名称的资源都在 web 应用程序的 META-INF 目录和 $CATALINA_BASE/conf 目录下的 context.xml 文件中声明,则内部版本优先。请检查 META-INF 下是否有 context.xml,并且在 CATALINA_BASE/conf server.xml 中进行了正确的配置。如果是这样,请更新 META-INF 下的 context.xml 文件。

来自 Apache 网站的注意事项: 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-INF/web.xml 中的条目以记录 Web 应用程序的资源需求。因此,您可以尝试删除 web.xml 中的 Oracle JDBC 条目并首先评估是否可行。然后输入正确的条目。

  1. 如果你想在不使用容器的情况下测试 JDBC 连接,你可以使用 RMI 注册表。下面的帖子有 MYSQL 的示例,您可以对其进行修改以供 Oracle 测试:javax.naming.NoInitialContextException with mysql DataSource
于 2015-06-30T06:47:07.537 回答