gpt4 book ai didi

java - 如何解决连接工厂从createConnection返回null的问题

转载 作者:行者123 更新时间:2023-12-01 12:29:49 27 4
gpt4 key购买 nike

我正在尝试连接到 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>

DAO 实现

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 extends JdbcTemplate implements IQueryDAO{
@Resource BasicDataSource dataSource;

@Override
public PortRecord findPortRecord(String msisdn, String pac){
String sql = "select * from tbl_entry where msisdn = ? and pac_code = ?";
PortRecord portRecord = queryForObject(sql, new Object[]{msisdn, pac}, new BeanPropertyRowMapper<PortRecord>(PortRecord.class));
return portRecord;
}

public void setDataSource(BasicDataSource dataSource) {
this.dataSource = dataSource;
}

public BasicDataSource getDataSource() {
return dataSource;
}
}

堆栈跟踪

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)

更新我已经针对我构建的 mysql 数据库进行了测试,它工作正常,只是似乎不适用于 Oracle。唯一发生变化的是 jdbc.properties 文件。

mysql

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

我需要对 Oracle 做一些不同的事情才能使其正常工作吗?

最佳答案

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

您用来连接 Oracle 的 classes12.zip JDBC 驱动程序非常旧,并且适用于 Java 1.2 客户端。 Spring 或 Commons DBCP 可能依赖于更现代的 JDBC 版本来工作,因此您应该使用更现代的 odbc6.jarojdbc7.jar(对于 Java 6)和 7,尽管这种关联有些松散并且它们在很大程度上可以互换)。

关于java - 如何解决连接工厂从createConnection返回null的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26023970/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com