<?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="Contact">
    <insert id="insert" parameterClass="com.bonc.POJO.Contact">
        <selectKey resultClass="int" keyProperty="id" type="pre">
         <![CDATA[SELECT STOCKIDSEQUENCE.NEXTVAL AS id FROM DUAL]]>
</selectKey>
insert into contact (firstName,lastName,email) values
(#firstName#, #lastName#, #email#)
    </insert>
    <!--- Showing all data of table -->
    <select id="getAll" resultClass="com.bonc.POJO.Contact">
        select * from contact
    </select>
</sqlMap>
xml文件 <selectKey resultClass="int" keyProperty="id" type="pre">
    <![CDATA[SELECT STOCKIDSEQUENCE.NEXTVAL AS id FROM DUAL]]>
</selectKey>
去了这句话
插入语句改成
insert into contact (id,firstName,lastName,email) values
(#id#,#firstName#, #lastName#, #email#)
则没有问题
初学ibatis
请高人指点

解决方案 »

  1.   

    错误
    insert
    Exception in thread "main" com.ibatis.common.jdbc.exception.NestedSQLException:   
    --- The error occurred in Contact.xml.  
    --- The error occurred while applying a parameter map.  
    --- Check the Contact.insert-SelectKey-InlineParameterMap.  
    --- Check the statement (query failed).  
    --- Cause: java.sql.SQLException: ORA-02289: 序列不存在 at com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.executeQueryWithCallback(GeneralStatement.java:185)
    at com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.executeQueryForObject(GeneralStatement.java:104)
    at com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.executeSelectKey(SqlMapExecutorDelegate.java:472)
    at com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.insert(SqlMapExecutorDelegate.java:442)
    at com.ibatis.sqlmap.engine.impl.SqlMapSessionImpl.insert(SqlMapSessionImpl.java:82)
    at com.ibatis.sqlmap.engine.impl.SqlMapClientImpl.insert(SqlMapClientImpl.java:59)
    at com.bonc.POJO.IbatisExample.main(IbatisExample.java:19)
    Caused by: java.sql.SQLException: ORA-02289: 序列不存在 at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
    at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:331)
    at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:288)
    at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:743)
    at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:216)
    at oracle.jdbc.driver.T4CPreparedStatement.executeForDescribe(T4CPreparedStatement.java:799)
    at oracle.jdbc.driver.OracleStatement.executeMaybeDescribe(OracleStatement.java:1038)
    at oracle.jdbc.driver.T4CPreparedStatement.executeMaybeDescribe(T4CPreparedStatement.java:839)
    at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1133)
    at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3285)
    at oracle.jdbc.driver.OraclePreparedStatement.execute(OraclePreparedStatement.java:3390)
    at com.ibatis.sqlmap.engine.execution.SqlExecutor.executeQuery(SqlExecutor.java:186)
    at com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.sqlExecuteQuery(GeneralStatement.java:205)
    at com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.executeQueryWithCallback(GeneralStatement.java:173)
    ... 6 more
      

  2.   

    type="pre"是什么类型?楼主有没有测试过
    <select ...>
      <![CDATA[SELECT STOCKIDSEQUENCE.NEXTVAL AS id FROM DUAL]]> 
    </select>
      

  3.   

    <selectKey resultClass="Integer" keyProperty="xxxId">
                SELECT SEQ_XXX.CURRVAL AS xxxId from dual
            </selectKey>
    pre 插入前生成
    post插入后生成
    首先确保你已经建立了序列