**每个人,因为我是IBatis的新手,我遇到了这个错误:我使用Ibatis oracle驱动程序和java连接到oracle数据库.Requirement是从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)
答案 0 :(得分:0)
你错了两件事。
OracleCrud.xml
中提供了双重FROM。请删除一个。删除后,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美化网站:http://xmlbeautifier.com/