spring3.1 mybatis3.1 오류좀 봐주시면 감사하겠습니다.

18,583 views
Skip to first unread message

흰둥와와

unread,
Dec 11, 2012, 3:06:56 AM12/11/12
to ks...@googlegroups.com
spring3.1 /mybatis3.1 환경으로 환경 구축중에 아래와 같은 오류가 해결이 되지않아 여기에 글을 올립니다.ㅠㅠ
간단하게 sysdate 가져오는건데.. 어디가 잘못되었는지 도무지 모르겟네요..
오류메시지만 보았을때 xml에 쿼리에 문제가 있는건데...
원천적인 에러는 다른곳에 있는 것 같다고 생각이 듭니다만...구글링해도 뭐해도 찾을 수 없는 원인..도와주시면 감사하겠습니다.


[ERROR] (TestController.java) - nested exception is org.apache.ibatis.exceptions.PersistenceException: 
### Error querying database.  Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (ORA-00923: FROM 키워드가 필요한 위치에 없습니다.
)
### The error may exist in file [D:\#bonoyiPlayGround\spring3\web\WEB-INF\classes\com\spring3\service\mapper\TestMapper.xml]
### The error may involve com.spring3.service.mapper.TestMapper.getDate
### The error occurred while executing a query
### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (ORA-00923: FROM 키워드가 필요한 위치에 없습니다.
)
org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException: 
### Error querying database.  Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (ORA-00923: FROM 키워드가 필요한 위치에 없습니다.
)
### The error may exist in file [D:\#bonoyiPlayGround\spring3\web\WEB-INF\classes\com\spring3\service\mapper\TestMapper.xml]
### The error may involve com.spring3.service.mapper.TestMapper.getDate
### The error occurred while executing a query
### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (ORA-00923: FROM 키워드가 필요한 위치에 없습니다.
)
at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:73)
at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:365)
at $Proxy6.selectOne(Unknown Source)
at org.mybatis.spring.SqlSessionTemplate.selectOne(SqlSessionTemplate.java:160)
at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:95)
at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:40)
at $Proxy9.getDate(Unknown Source)
at com.spring3.service.dao.TestDao.getDate(TestDao.java:21)
at com.spring3.controller.TestController.list(TestController.java:24)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:176)
at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:436)
at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:424)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:923)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:852)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:778)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Unknown Source)
Caused by: org.apache.ibatis.exceptions.PersistenceException: 
### Error querying database.  Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (ORA-00923: FROM 키워드가 필요한 위치에 없습니다.
)
### The error may exist in file [D:\#bonoyiPlayGround\spring3\web\WEB-INF\classes\com\spring3\service\mapper\TestMapper.xml]
### The error may involve com.spring3.service.mapper.TestMapper.getDate
### The error occurred while executing a query
### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (ORA-00923: FROM 키워드가 필요한 위치에 없습니다.
)
at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:23)
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:104)
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:95)
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:59)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:355)
... 36 more
Caused by: org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (ORA-00923: FROM 키워드가 필요한 위치에 없습니다.
)
at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:80)
at org.mybatis.spring.transaction.SpringManagedTransaction.openConnection(SpringManagedTransaction.java:80)
at org.mybatis.spring.transaction.SpringManagedTransaction.getConnection(SpringManagedTransaction.java:66)
at org.apache.ibatis.executor.BaseExecutor.getConnection(BaseExecutor.java:279)
at org.apache.ibatis.executor.SimpleExecutor.prepareStatement(SimpleExecutor.java:69)
at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:56)
at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:267)
at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:141)
at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:105)
at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:81)
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:101)
... 43 more
Caused by: org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (ORA-00923: FROM 키워드가 필요한 위치에 없습니다.
)
at org.apache.commons.dbcp.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:1549)
at org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1388)
at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044)
at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:111)
at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:77)
... 53 more
Caused by: java.sql.SQLSyntaxErrorException: ORA-00923: FROM 키워드가 필요한 위치에 없습니다.

at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:439)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:395)
at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:802)
at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:436)
at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:186)
at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:521)
at oracle.jdbc.driver.T4CStatement.doOall8(T4CStatement.java:194)
at oracle.jdbc.driver.T4CStatement.executeForDescribe(T4CStatement.java:853)
at oracle.jdbc.driver.OracleStatement.executeMaybeDescribe(OracleStatement.java:1145)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1259)
at oracle.jdbc.driver.OracleStatement.executeQuery(OracleStatement.java:1469)
at oracle.jdbc.driver.OracleStatementWrapper.executeQuery(OracleStatementWrapper.java:389)
at org.apache.commons.dbcp.DelegatingStatement.executeQuery(DelegatingStatement.java:208)
at org.apache.commons.dbcp.PoolableConnectionFactory.validateConnection(PoolableConnectionFactory.java:658)
at org.apache.commons.dbcp.BasicDataSource.validateConnectionFactory(BasicDataSource.java:1558)
at org.apache.commons.dbcp.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:1545)
... 57 more



이에 대한 application-context.xml 설정은 아래와 같아요~
<?xml version="1.0" encoding="UTF-8"?>

<!-- properties -->
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>/WEB-INF/config.properties</value>
</list>
</property>
</bean>

<!-- mapper scanner -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.spring3.service.mapper" />
</bean>
<bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg ref="sqlSessionFactory" />
</bean>
<!-- sql session factory -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="mapperLocations" value="classpath*:com/spring3/service/mapper/*.xml" />
</bean>

<!-- data source -->
<bean id="dataSource"  class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="${db.driver}" />
<property name="url" value="${db.url}" />
<property name="username" value="${db.userid}" />
<property name="password" value="${db.passwd}" />
<property name="maxActive" value="100"/>
<property name="maxWait" value="10"/>
<property name="maxIdle" value="5"/>
<property name="defaultAutoCommit" value="true"/>
<property name="validationQuery" value="select 1"/>
<property name="validationQueryTimeout" value="60"/>
</bean>
<context:annotation-config />
<context:component-scan base-package="com"/>
<!--  freemarkerConfig   -->
    <bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
        <property name="templateLoaderPath">
        <value>${freemarker.templateLoaderPath}</value>
        </property>
        <property name="freemarkerSettings">
            <props>
                <prop key="default_encoding">utf-8</prop>
                <prop key="template_update_delay">1</prop>
                <prop key="number_format">#.#######</prop>
                <prop key="date_format">yyyy-MM-dd</prop>
                <prop key="time_format">a hh:mm:ss</prop>
                <prop key="datetime_format">yyyy-MM-dd HH:mm:ss</prop>
            </props>
        </property>

        <property name="freemarkerVariables">
            <props>
<prop key="HOME">/spring3</prop>
<prop key="TITLE">Spring3</prop>
            </props>
        </property>
    </bean>

<!-- view resolver -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
   <property name="order" value="2" />
        <property name="cache"><value>true</value></property>
        <property name="contentType"><value>text/html; charset=utf-8</value></property>
        <property name="exposeSpringMacroHelpers"><value>true</value></property>
</bean>
 
</beans>



================================================================================================
web.xml은 아래와 같습니다.

<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 

<display-name>spring3</display-name>
<welcome-file-list>
<welcome-file>test.jsp</welcome-file>
</welcome-file-list>
<!-- log4j -->
<context-param>
<param-name>webAppRootKey</param-name>
<param-value>spring3.root</param-value>
</context-param>
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>/WEB-INF/log4j.properties</param-value>
</context-param>

<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>
<!-- spring servlet -->
<servlet>
<servlet-name>spring3</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>spring3</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>

<!-- char encoding -->
<filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>


================================================================================================
TestMapper.xml


<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<mapper namespace="com.spring3.service.mapper.TestMapper">
 
  <select id="getDate" resultType="string">
select sysdate from dual
</select>

 </mapper>


=========================
TestMapper.java


public interface TestMapper {

public String getDate();

}

=======================
TestDao.java

@Service
public class TestDao {

@Autowired 
private TestMapper mapper;
public String getDate(){
return mapper.getDate();
}
}

TestController.java

@Controller
public class TestController {

@Autowired TestDao testDao;
private Logger LOG = Logger.getLogger(TestController.class);
@RequestMapping(value = "list", method=RequestMethod.GET)
public ModelAndView list() {
ModelAndView mav = new ModelAndView();
try{
String date = testDao.getDate();
String sContentFileName = "list.ftl";
mav.addObject("date", date);
mav.addObject("contentFileName", sContentFileName);

}catch(Exception e){
LOG.error(e.getMessage(), e);
}

mav.setViewName("main.ftl");

return mav;
}
/**
* @param testDao the testDao to set
*/
public void setTestDao(TestDao testDao) {
this.testDao = testDao;
}

}


최영목

unread,
Dec 11, 2012, 3:09:57 AM12/11/12
to ks...@googlegroups.com
경험상 select 절에 쉼표를 안찍거나 잘못 찍었을 때 자주 볼 수 있는 에러입니다^^

Thank you, Steve (1955-2011)
나의 iPhone에서 보냄

2012. 12. 11. 오후 5:07 "흰둥와와" <bon...@gmail.com> 작성:

--
Google 그룹스 'Korea Spring User Group' 그룹에 가입했으므로 본 메일이 전송되었습니다.
웹에서 이 토론을 보려면 https://groups.google.com/d/msg/ksug/-/OjobelGRTyUJ을(를) 방문하세요.
이 그룹에 게시하려면 ks...@googlegroups.com(으)로 이메일을 보내세요.
그룹에서 탈퇴하려면 ksug+uns...@googlegroups.com로 이메일을 보내주세요.
더 많은 옵션을 보려면 http://groups.google.com/group/ksug?hl=ko에서 그룹을 방문하세요.

송창섭

unread,
Dec 11, 2012, 3:11:24 AM12/11/12
to ks...@googlegroups.com
resultType이 String이라 나는 에러 같습니다.

sysdate는 Date타입 아닌가요...?? 


2012/12/11 최영목 <davi...@nextree.co.kr>



--
I will raise up for myself a faithful priest, who will do according to what is in my heart and mind. I will firmly establish his house, and he will minister before my anointed one always.




기술개발팀 과장   창 섭

ADDR  : 대전광역시 동구 용운동 432번지 덕림빌딩 6층
TEL    : 042)710-1787
MOB    : 010-2947-1273
FAX     : 042)710-1780

네이트온 : zen...@nate.com
블로그 : microweb.tistory.com
홈페이지 : html5korea.org
트위터 : @soscs21
페이스북 : facebook.com/soscs


ilhyun seo

unread,
Dec 11, 2012, 3:12:41 AM12/11/12
to ks...@googlegroups.com
<property name="validationQuery" value="select 1"/>

이 부분에 FROM 절이 없어서 오류가 나는 것 같습니다.

select 1 = > select 1 from dual 로 수정하면 될 것 같습니다.. 

2012/12/11 송창섭 <so...@u-jin.cc>

박세종

unread,
Dec 11, 2012, 3:12:52 AM12/11/12
to ks...@googlegroups.com
일단 from 이 없다고 나오는걸 보니 mybatis와 스프링의 연동에서는 문제가 없어 보이며 정상적으로 xml을 읽는것 같습니다.
한글이 xml문장안에 들어가있으면 인코딩때문에 파싱이 제대로 안되었던 적이 몇번 있었습니다. 이부분도 체크 해보세요

HyeonAh Lee

unread,
Dec 11, 2012, 3:20:15 AM12/11/12
to ks...@googlegroups.com
헉...설정부분에 원인이 있었군요 ㅠㅠ 왜 그부분을 미처못보았을까요;; -//- 도움감사드립니다...ㅎ  
*^^*


2012년 12월 11일 오후 5:12, 박세종 <stevep...@gmail.com>님의 말:
일단 from 이 없다고 나오는걸 보니 mybatis와 스프링의 연동에서는 문제가 없어 보이며 정상적으로 xml을 읽는것 같습니다.
한글이 xml문장안에 들어가있으면 인코딩때문에 파싱이 제대로 안되었던 적이 몇번 있었습니다. 이부분도 체크 해보세요

--
Google 그룹스 'Korea Spring User Group' 그룹에 가입했으므로 본 메일이 전송되었습니다.
Reply all
Reply to author
Forward
0 new messages