Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.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 如何解析createConnection返回的空连接工厂_Java_Spring_Jdbc_Apache Commons Dbcp - Fatal编程技术网

Java 如何解析createConnection返回的空连接工厂

Java 如何解析createConnection返回的空连接工厂,java,spring,jdbc,apache-commons-dbcp,Java,Spring,Jdbc,Apache Commons Dbcp,我正在尝试连接到oracle数据库并将结果映射到POJO。然而,我得到的错误 java.lang.IllegalStateException: Connection factory returned null from createConnection 我有其他spring项目,从未遇到过这个问题,所以不知道如何解决它。我在下面包括了我的配置和类 Servlet xml片段 <bean id="dataSource" class="org.apache.commons.dbcp.Basi

我正在尝试连接到oracle数据库并将结果映射到POJO。然而,我得到的错误

java.lang.IllegalStateException: Connection factory returned null from createConnection
我有其他spring项目,从未遇到过这个问题,所以不知道如何解决它。我在下面包括了我的配置和类

Servlet xml片段

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
    destroy-method="close">
    <property name="driverClassName" value="${mnp.driverClassName}" />
    <property name="url" value="${mnp.url}" />
    <property name="username" value="${mnp.username}" />
    <property name="password" value="${mnp.password}" />
</bean>
更新 我已经对我构建的mysql数据库进行了测试,它运行正常,但对oracle似乎不起作用。唯一改变的是jdbc.properties文件

mysql

神谕

mnp.driverClassName=oracle.jdbc.OracleDriver
mnp.url=jdbc:oracle:thin:mnpui@172.31.125.37:1523
mnp.username=XXX
mnp.password=XXX
我是否需要对oracle做一些不同的事情才能使其正常工作

  • 不要扩展
    JdbcTemplate
    将其封装在dao中
  • 为什么要注入一个从未传递到
    JdbcTemplate
    的数据源
  • 您应该针对
    数据源
    而不是
    基本CDATA源
    进行编程
  • 还要确保您实际使用的是spring配置中配置的数据源。您的帖子和初始dao中的信息太少,无法确定这一点。

    (重新发布原始评论作为答案,因为它似乎已经解决了这个问题)


    用于连接到Oracle的
    classes12.zip
    JDBC驱动程序非常旧,是为Java1.2客户机设计的。Spring或Commons DBCP可能依赖于更现代的JDBC版本来工作,因此您应该使用更现代的
    odbc6.jar
    ojdbc7.jar
    (分别适用于Java 6和7,尽管这种关联有点松散,而且基本上是可互换的)。

    感谢您的提示,我已经按照你的建议整理好了,但还是撞到了非法州,只是你的司机明显出了点问题。从您使用的classes12jar文件的更新/注释来看,这个文件非常旧,它是针对java1.2/1.3的。您想访问Oracle网站并下载最新版本的驱动程序。您是否也提供了Oracle JDBC驱动程序JAR?是的,我添加了classes12 JAR文件,该文件是从数据库服务器上的Oracle安装中获取的。我在类路径上有classes12和connectorj,所以在将war发布到使用oracle的生产服务器之前,我可以对mysql db进行测试。尝试从Oracle的网站(例如,
    ojdbc6.jar
    )获取一个更新的JDBC驱动程序,看看这是否能改善情况。@skaffman谢谢,我已经在沮丧中注销了今晚的应用程序,所以明天将尝试使用一套新的驱动程序eyes@skaffman我用ojdbc6替换了classes12,它解决了这个问题。您是否愿意将此建议作为答案发布,我将接受。@sksffmsn谢谢,我已使用jav 1.6和ojdbc6构建,现在一切都运行良好。
    java.lang.IllegalStateException: Connection factory returned null from createConnection
        org.apache.commons.dbcp.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:584)
        org.apache.commons.dbcp.BasicDataSource.validateConnectionFactory(BasicDataSource.java:1556)
        org.apache.commons.dbcp.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:1545)
        org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1388)
        org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044)
        org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:111)
        org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:77)
        org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:573)
        org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:637)
        org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:666)
        org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:674)
        org.springframework.jdbc.core.JdbcTemplate.queryForObject(JdbcTemplate.java:729)
        cdjh.ops.mnpui.daos.QueryDAO.findPortRecord(QueryDAO.java:41)
        cdjh.ops.mnpui.services.QueryService.findPortRecord(QueryService.java:33)
        cdjh.ops.mnpui.controllers.QueryController.showPortRecord(QueryController.java:58)
        sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        java.lang.reflect.Method.invoke(Method.java:597)
        org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:176)
        org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:439)
        org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:427)
        org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:925)
        org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:856)
        org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:915)
        org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:811)
        javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
        org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:796)
        javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
    
    mnp.driverClassName=com.mysql.jdbc.Driver
    mnp.url=jdbc:mysql://db4free.net:3306/mnpui
    mnp.username=XXX
    mnp.password=XXX
    
    mnp.driverClassName=oracle.jdbc.OracleDriver
    mnp.url=jdbc:oracle:thin:mnpui@172.31.125.37:1523
    mnp.username=XXX
    mnp.password=XXX
    
    
    package cdjh.ops.mnpui.daos;
    
    import java.util.ArrayList;
    
    import javax.annotation.Resource;
    
    import org.apache.commons.dbcp.BasicDataSource;
    import org.springframework.jdbc.core.BeanPropertyRowMapper;
    import org.springframework.jdbc.core.JdbcTemplate;
    import org.springframework.stereotype.Repository;
    
    import cdjh.ops.mnpui.pojos.PacEntry;
    import cdjh.ops.mnpui.pojos.PortEntry;
    import cdjh.ops.mnpui.pojos.PortRecord;
    
    @Repository
    public class QueryDAO implements IQueryDAO{
    
        private final JdbcTemplate jdbcTemplate;
    
        @Autowired
        public QueryDao(DataSource dataSource) {
            this.jdbcTemplate=new JdbcTemplate(dataSource);
        }
    
    
        @Override
        public PortRecord findPortRecord(String msisdn, String pac){
            String sql = "select * from tbl_entry where msisdn = ? and pac_code = ?";
            PortRecord portRecord = this.jdbcTemplate.queryForObject(sql, new Object[]{msisdn, pac}, new BeanPropertyRowMapper(PortRecord.class));
            return portRecord;
        }
    }