2016-05-16 145 views
1

我正在学习如何使用以下代码将hibernate与spring集成到Oracle 11g中。但是从几天就陷入了同样的错误。请帮我解决这个问题。我已经尝试了其他解决方案中提到的不同解决方案,以解决相同错误的问题,但没有运气。java.sql.SQLException:调用中的无效参数

欢迎任何相关解决方案。

感谢,

尼莎

spring.xml

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" 
    xmlns:tx="http://www.springframework.org/schema/tx" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd 
     http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd 
     http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd"> 

    <bean id="serverDatasource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
     <property name="driverClassName" > 
      <value>oracle.jdbc.driver.OracleDriver</value> 
     </property> 
     <property name="url" > 
      <value>jdbc:oracle:thin:@10.23.225.22:1521:PRACTICE</value> 
     </property> 
     <!-- <property name="username" value="SCOTT"/> 
     <property name="password" value="tiger"/>--> 
    </bean> 

    <bean id="dataSource" class="org.springframework.jdbc.datasource.UserCredentialsDataSourceAdapter"> 
     <property name="targetDataSource" ref="serverDatasource"/> 
     <property name="username"><value>SCOTT</value></property> 
     <property name="password"><value>tiger</value></property> 
    </bean> 


    <!-- Hibernate 5 SessionFactory bean definition --> 
    <bean id="Hibernate5SessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean"> 
     <property name="dataSource" ref="dataSource"/> 
     <property name="annotatedClasses"> 
      <list> 
       <value>com.springHibernate.model.Person</value> 
      </list> 
     </property> 
     <property name="HibernateProperties"> 
      <props> 
       <prop key="hibernate.dialect">org.hibernate.dialect.Oracle9Dialect</prop> 
       <prop key="hibernate.current_session_context_class">thread</prop> 
       <prop key="hibernate.show_sql">true</prop> 
      </props> 
     </property> 
    </bean> 

    <bean id="personDao" class="com.springHibernate.dao.PersonDaoImpl"> 
     <property name="sessionFactory" ref="Hibernate5SessionFactory"></property> 
    </bean> 
</beans> 

主要方法:SpringHibernateMain

 package com.springHibernate.main; 

     import java.util.List; 
     import org.springframework.context.support.ClassPathXmlApplicationContext; 
     import com.springHibernate.dao.PersonDao; 
     import com.springHibernate.model.Person; 

     public class SpringHibernateMain { 

      public static void main(String[] args) { 

       ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("spring.xml"); 

       PersonDao personDao = context.getBean(PersonDao.class); 

       Person p = new Person(); 

       p.setId(1); 
       p.setName("John"); 
       p.setCountry("United States"); 

       personDao.save(p); 

       List<Person> person = personDao.listPerson(); 

       for(Person p1 : person){ 
        System.out.println("Person List:" + p1); 
       } 

      } 

     } 

堆栈跟踪:

ERROR: Unable obtain JDBC Connection 
java.sql.SQLException: invalid arguments in call 
    at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112) 
    at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:146) 
    at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:208) 
    at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:236) 
    at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:414) 
    at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:165) 
    at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:35) 
    at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:801) 
    at java.sql.DriverManager.getConnection(Unknown Source) 
    at java.sql.DriverManager.getConnection(Unknown Source) 
    at org.springframework.jdbc.datasource.DriverManagerDataSource.getConnectionFromDriverManager(DriverManagerDataSource.java:153) 
    at org.springframework.jdbc.datasource.DriverManagerDataSource.getConnectionFromDriver(DriverManagerDataSource.java:144) 
    at org.springframework.jdbc.datasource.AbstractDriverBasedDataSource.getConnectionFromDriver(AbstractDriverBasedDataSource.java:155) 
    at org.springframework.jdbc.datasource.AbstractDriverBasedDataSource.getConnection(AbstractDriverBasedDataSource.java:130) 
    at org.springframework.jdbc.datasource.UserCredentialsDataSourceAdapter.doGetConnection(UserCredentialsDataSourceAdapter.java:162) 
    at org.springframework.jdbc.datasource.UserCredentialsDataSourceAdapter.getConnection(UserCredentialsDataSourceAdapter.java:145) 
    at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) 
    at org.hibernate.internal.SessionFactoryImpl$3.obtainConnection(SessionFactoryImpl.java:643) 
    at org.hibernate.hql.spi.id.IdTableHelper.executeIdTableCreationStatements(IdTableHelper.java:67) 
    at org.hibernate.hql.spi.id.global.GlobalTemporaryTableBulkIdStrategy.finishPreparation(GlobalTemporaryTableBulkIdStrategy.java:125) 
    at org.hibernate.hql.spi.id.global.GlobalTemporaryTableBulkIdStrategy.finishPreparation(GlobalTemporaryTableBulkIdStrategy.java:42) 
    at org.hibernate.hql.spi.id.AbstractMultiTableBulkIdStrategyImpl.prepare(AbstractMultiTableBulkIdStrategyImpl.java:88) 
    at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:451) 
    at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:465) 
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:708) 
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:724) 
    at org.springframework.orm.hibernate5.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:416) 
    at org.springframework.orm.hibernate5.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:401) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1637) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1574) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:545) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482) 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:753) 
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:839) 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:538) 
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139) 
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83) 
    at com.springHibernate.main.SpringHibernateMain.main(SpringHibernateMain.java:14) 

May 16, 2016 12:59:16 PM org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions 
WARN: SQL Error: 17433, SQLState: null 
May 16, 2016 12:59:16 PM org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions 
ERROR: invalid arguments in call 
Exception in thread "main" org.hibernate.exception.GenericJDBCException: Unable to acquire JDBC Connection 
    at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:47) 
    at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:111) 
    at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:97) 
    at org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl.acquireConnectionIfNeeded(LogicalConnectionManagedImpl.java:87) 
    at org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl.getPhysicalConnection(LogicalConnectionManagedImpl.java:109) 
    at org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl.getConnectionForTransactionManagement(LogicalConnectionManagedImpl.java:227) 
    at org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl.begin(LogicalConnectionManagedImpl.java:234) 
    at org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorImpl$TransactionDriverControlImpl.begin(JdbcResourceLocalTransactionCoordinatorImpl.java:214) 
    at org.hibernate.engine.transaction.internal.TransactionImpl.begin(TransactionImpl.java:52) 
    at org.hibernate.internal.SessionImpl.beginTransaction(SessionImpl.java:1525) 
    at com.springHibernate.dao.PersonDaoImpl.save(PersonDaoImpl.java:25) 
    at com.springHibernate.main.SpringHibernateMain.main(SpringHibernateMain.java:24) 
Caused by: java.sql.SQLException: invalid arguments in call 
    at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112) 
    at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:146) 
    at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:208) 
    at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:236) 
    at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:414) 
    at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:165) 
    at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:35) 
    at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:801) 
    at java.sql.DriverManager.getConnection(Unknown Source) 
    at java.sql.DriverManager.getConnection(Unknown Source) 
    at org.springframework.jdbc.datasource.DriverManagerDataSource.getConnectionFromDriverManager(DriverManagerDataSource.java:153) 
    at org.springframework.jdbc.datasource.DriverManagerDataSource.getConnectionFromDriver(DriverManagerDataSource.java:144) 
    at org.springframework.jdbc.datasource.AbstractDriverBasedDataSource.getConnectionFromDriver(AbstractDriverBasedDataSource.java:155) 
    at org.springframework.jdbc.datasource.AbstractDriverBasedDataSource.getConnection(AbstractDriverBasedDataSource.java:130) 
    at org.springframework.jdbc.datasource.UserCredentialsDataSourceAdapter.doGetConnection(UserCredentialsDataSourceAdapter.java:162) 
    at org.springframework.jdbc.datasource.UserCredentialsDataSourceAdapter.getConnection(UserCredentialsDataSourceAdapter.java:145) 
    at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) 
    at org.hibernate.internal.AbstractSessionImpl$NonContextualJdbcConnectionAccess.obtainConnection(AbstractSessionImpl.java:386) 
    at org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl.acquireConnectionIfNeeded(LogicalConnectionManagedImpl.java:84) 
    ... 8 more 
+0

尝试将您的用户名/密码属性移动到您配置db url的数据源中 – Nadir

+0

我看到您使用的是Oracle 9方言,这可能是问题所在。 – jr593

+0

我已经试过最初只有Nadir,得到同样的错误。 – Nisha

回答

0

解决了这个,最后,只需添加在Hibernate中的zip文件中的lib /所需的文件夹的罐子。直到那时我已经在lib文件夹中添加了所有的jar。

0

相反

PersonDao personDao = context.getBean(PersonDao.class); 

PersonDao personDao = (PersonDao) context.getBean("personDao"); 

所以你的bean的id尝试在spring.xml

+0

我调试了代码,发现错误是在ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(“spring.xml”) 之后执行,并且在执行下一行之前是 PersonDao personDao = context.getBean(PersonDao.class) – Nisha

0

,因为它在堆栈跟踪中提到它是无法获得连接。

invalid arguments in call 
Exception in thread "main" org.hibernate.exception.GenericJDBCException: Unable to acquire JDBC Connection 

在数据源驱动程序的名称应该像下面

  <value>oracle.jdbc.OracleDriver</value> 
+0

Hi Vijendra,我提出了修改建议,但仍面临同样的问题 – Nisha

+0

嗨Nisha你可以分享你的pom.xml文件。我尝试使用spring.xm配置连接到我的数据库,并且能够获得连接。 –

+0

我不使用maven。所以我没有得到一个pom.xml:| – Nisha