Exception in thread "main" com.ibatis.common.jdbc.exception.NestedSQLException



** hie hie hie hie hie是我对ibatis的新人,我遇到了这个错误:我正在使用ibatis oracle oracle驱动程序和java连接到Oracle Databse。要求从Oracle响应中生成CSV。

enter code here
package provider;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Reader;
import java.sql.SQLException;
import java.util.List;
import model.LMPeriod;
import com.ibatis.common.resources.Resources;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.ibatis.sqlmap.client.SqlMapClientBuilder;
public class JavaToIBatis {
public static void main(String[] args) throws SQLException, IOException {
    // TODO Auto-generated method stub
    Reader rd = Resources.getResourceAsReader("SqlMapConfig.xml");
      SqlMapClient smc = SqlMapClientBuilder.buildSqlMapClient(rd);
      /* This would read all records from the Employee table. */
      System.out.println("Going to read records.....");
      List<String> lst = (List<String>)smc.queryForList("LM.testing");
      BufferedWriter bw = new BufferedWriter(new FileWriter("test2.csv"));
      for(String str : lst){
         bw.write(str);
      }
      System.out.println("Records Read Successfully ");
   }
  }
enter code here
 <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN" 
 "http://ibatis.apache.org/dtd/sql-map-2.dtd">
<sqlMap namespace="LM">
<select id="testing" resultClass="java.lang.String">  
SELECT RCE_POST_TO_GL_FISCAL_QUARTER||', '|| RCE_POST_TO_GL_FISCAL_MONTH 
||', '|| FROM FROM XXSCM_BRM_GLRECON_REP
</select>   
</sqlMap>
 enter code here
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE sqlMapConfig PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 
 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-config-2.dtd">
 <sqlMapConfig>
 <settings useStatementNamespaces="true"/>
  <transactionManager type="JDBC">
  <dataSource type="SIMPLE">
 <property name="JDBC.Driver" value="oracle.jdbc.driver.OracleDriver"/>
 <property name="JDBC.ConnectionURL" 
 value="jdbc:oracle:thin:@########:####/dbName"/>
     <property name="JDBC.Username" value="*****"/>
     <property name="JDBC.Password" value="*******"/>
  </dataSource>
 </transactionManager>
 <sqlMap resource="OracleCrud.xml"/> 
 </sqlMapConfig>

错误代码是

enter code here
Going to read records.....
Exception in thread "main" com.ibatis.common.jdbc.exception.NestedSQLException:   
--- The error occurred in OracleCrud.xml.  
--- The error occurred while applying a parameter map.  
 --- Check the LMPeriod.testing-InlineParameterMap.  
--- Check the statement (query failed).  
--- Cause: java.sql.SQLSyntaxErrorException: ORA-00936: missing expression
at com.ibatis.sqlmap.engine.mapping.statement.MappedStatement.executeQueryWithCallback(MappedStatement.java:201)
at com.ibatis.sqlmap.engine.mapping.statement.MappedStatement.executeQueryForList(MappedStatement.java:139)
at com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.queryForList(SqlMapExecutorDelegate.java:567)
at com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.queryForList(SqlMapExecutorDelegate.java:541)
at com.ibatis.sqlmap.engine.impl.SqlMapSessionImpl.queryForList(SqlMapSessionImpl.java:118)
at com.ibatis.sqlmap.engine.impl.SqlMapSessionImpl.queryForList(SqlMapSessionImpl.java:122)
at com.ibatis.sqlmap.engine.impl.SqlMapClientImpl.queryForList(SqlMapClientImpl.java:98)
at provider.JavaToIBatis.main(JavaToIBatis.java:27)
Caused by: java.sql.SQLSyntaxErrorException: ORA-00936: missing expression
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:445)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:396)
at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:879)
at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:450)
at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:192)
at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:531)
at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:207)
at oracle.jdbc.driver.T4CPreparedStatement.executeForDescribe(T4CPreparedStatement.java:884)
at oracle.jdbc.driver.OracleStatement.executeMaybeDescribe(OracleStatement.java:1167)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1289)
at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3584)
at oracle.jdbc.driver.OraclePreparedStatement.execute(OraclePreparedStatement.java:3685)
at oracle.jdbc.driver.OraclePreparedStatementWrapper.execute(OraclePreparedStatementWrapper.java:1376)
at com.ibatis.sqlmap.engine.execution.SqlExecutor.executeQuery(SqlExecutor.java:185)
at com.ibatis.sqlmap.engine.mapping.statement.MappedStatement.sqlExecuteQuery(MappedStatement.java:221)
at com.ibatis.sqlmap.engine.mapping.statement.MappedStatement.executeQueryWithCallback(MappedStatement.java:189)

您误认为2件事。

  1. 您在OracleCrud.xml中给出了两倍。请删除一个。
  2. 您还以第二行给出了额外的半隆[;]。

删除两者,您的OracleCrud.xml看起来像

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN" "ibatis.apache.org/dtd/sql-map-2.dtd">
<sqlMap namespace="LM">
    <select id="testing" resultClass="java.lang.String"> SELECT RCE_POST_TO_GL_FISCAL_QUARTER||', '|| RCE_POST_TO_GL_FISCAL_MONTH ||', '|| FROM XXSCM_BRM_GLRECON_REP </select>
</sqlMap>

用于XML检查,您可以使用XML Beautifier网站:http://xmlbeautifier.com/

最新更新