繁体   English   中英

如何建立JDBC连接

[英]How to make JDBC connectivity

我正在使用以下类作为我的连接管理器,以通过数据源进行数据库连接。 问题是,当我通过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用于连接性,则可以使此类工作。
  • 我可以使用DataSource通过servlet类实现JDBC connectvity。

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

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

以下是我的context.xml

<Resource auth="Container" 
          driverClassName="oracle.jdbc.OracleDriver" 
          name="jdbc/myoracle" 
          password="password" 
          type="javax.sql.DataSource" 
          url="jdbc:oracle:thin:@10.49.116.42:1521:DBNAME" 
          username="username"/>

我认为您错过了用于数据库连接的主机和端口

连接的示例代码

 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;

}

您可以这样编写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();
        }

我真的不明白您要问的是什么...但是如果您想要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将不同。 希望这可以帮助

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

因此,对我来说问题似乎是由于以下可能性造成的:

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

来自Apache网站的注释:在$ CATALINA_BASE / conf / server.xml或最好是每个Web应用程序上下文XML文件(META-INF / context.xml)中可以指定的元素中输入Tomcat特定的资源配置。 。

  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与mysql数据源

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM