本帖最后由 zqmlf2000 于 2009-07-23 15:59:41 编辑

解决方案 »

  1.   

    你的xml中的sql部分可能有些不应该的中文全角空白或其它全角字符
      

  2.   

    谢谢fxyxxxxx,insert into mocha_duty_t_data  (duty_id) values(dutyID); 
    我把后面的";"号去了,现在还是报错:
    org.springframework.jdbc.BadSqlGrammarException: SqlMapClient operation; bad SQL grammar []; nested exception is com.ibatis.common.jdbc.exception.NestedSQLException:   
    --- The error occurred in com/mocha/duty/ibatise/maps/Duty.xml.  
    --- The error occurred while applying a parameter map.  
    --- Check the addDuty-InlineParameterMap.  
    --- Check the statement (update failed).  
    --- Cause: java.sql.SQLException: ORA-00984: 列在此处不允许com.ibatis.common.jdbc.exception.NestedSQLException:   
    --- The error occurred in com/mocha/duty/ibatise/maps/Duty.xml.  
    --- The error occurred while applying a parameter map.  
    --- Check the addDuty-InlineParameterMap.  
    --- Check the statement (update failed).  
    --- Cause: java.sql.SQLException: ORA-00984: 列在此处不允许 at com.ibatis.sqlmap.engine.mapping.statement.MappedStatement.executeUpdate(MappedStatement.java:107)
    at com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.insert(SqlMapExecutorDelegate.java:393)
    at com.ibatis.sqlmap.engine.impl.SqlMapSessionImpl.insert(SqlMapSessionImpl.java:82)
    at com.ibatis.sqlmap.engine.impl.SqlMapClientImpl.insert(SqlMapClientImpl.java:58)
    at org.springframework.orm.ibatis.SqlMapClientTemplate$9.doInSqlMapClient(SqlMapClientTemplate.java:319)
    at org.springframework.orm.ibatis.SqlMapClientTemplate.execute(SqlMapClientTemplate.java:165)
    at org.springframework.orm.ibatis.SqlMapClientTemplate.insert(SqlMapClientTemplate.java:317)
    at com.mocha.duty.daoImpl.DutyDaoImpl.addDuty(DutyDaoImpl.java:25)
    at com.mocha.duty.serviceImpl.DutyServiceImpl.addDuty(DutyServiceImpl.java:46)
    at com.mocha.duty.action.DutyDidAction.addDuty(DutyDidAction.java:88)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:585)
    at org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:274)
    at org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:194)
    at org.springframework.web.struts.DelegatingActionProxy.execute(DelegatingActionProxy.java:106)
    at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:419)
    at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224)
    at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
    at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
    at com.mocha.duty.filter.EncodingFilter.doFilter(EncodingFilter.java:34)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:186)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214)
    at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
    at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:198)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:152)
    at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137)
    at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:118)
    at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
    at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929)
    at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705)
    at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577)
    at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)
    at java.lang.Thread.run(Thread.java:595)
    Caused by: java.sql.SQLException: ORA-00984: 列在此处不允许 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:745)
    at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:219)
    at oracle.jdbc.driver.T4CPreparedStatement.executeForRows(T4CPreparedStatement.java:970)
    at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1190)
    at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3370)
    at oracle.jdbc.driver.OraclePreparedStatement.execute(OraclePreparedStatement.java:3476)
    at org.apache.commons.dbcp.DelegatingPreparedStatement.execute(DelegatingPreparedStatement.java:168)
    at com.ibatis.sqlmap.engine.execution.SqlExecutor.executeUpdate(SqlExecutor.java:80)
    at com.ibatis.sqlmap.engine.mapping.statement.MappedStatement.sqlExecuteUpdate(MappedStatement.java:216)
    at com.ibatis.sqlmap.engine.mapping.statement.MappedStatement.executeUpdate(MappedStatement.java:94)
    ... 49 more
      

  3.   

    The error occurred in com/mocha/duty/ibatise/maps/Duty.xml.  
    --- The error occurred while applying a parameter map.  
    参数匹配时 出错。<insert id="addDuty"  parameterClass="com.mocha.duty.vo.DutyVO">
         <selectKey keyProperty="dutyID" resultClass="java.lang.Integer">
             SELECT MOCHA_TODO_Q_DUTY.NEXTVAL AS id FROM DUAL
         </selectKey>
         insert into mocha_duty_t_data  (duty_id) values(dutyID); 
      </insert>
    楼主 你这里是把 查询出的ID 插入 mocha_duty_t_data表? 
    这个表只有一个字段吗? values(dutyID);
      

  4.   

    <insert id="addDuty"  parameterClass="com.mocha.duty.vo.DutyVO">
        <selectKey keyProperty="dutyID" resultClass="java.lang.Integer">
            SELECT MOCHA_TODO_Q_DUTY.NEXTVAL AS id FROM DUAL
        </selectKey>
        insert into mocha_duty_t_data  (duty_id) values(#dutyID:INTEGER#);
      </insert> 另外:可能不要 resultClass="java.lang.Integer"
      

  5.   

    已经告诉你无效的字符了,XML配置错误。应该起动都会报错。  <insert id="addDuty"  parameterClass="com.mocha.duty.vo.DutyVO">
         <selectKey keyProperty="dutyID" resultClass="java.lang.Integer">
             SELECT MOCHA_TODO_Q_DUTY.NEXTVAL AS id FROM DUAL
         </selectKey>
         insert into mocha_duty_t_data  (duty_id) values(dutyID); 
      </insert>

    </sqlMap>
     和>去掉
      

  6.   


    package com.java91.lesson01.dao;import java.util.List;
    import java.util.Map;import com.java91.lesson01.bean.Student;public interface StudentDao {
     void addStudent(Student s);  List getStudentBySex(String sexpa);
     void deleteStudent(String sno);
     
     void updateStudent(Student s);    
     Student getStudentBySno(String snoPara);
     List queryStudent(Map map);  }
    package com.java91.lesson01.bean;import javax.sql.DataSource;import com.java91.common.Framework;
    public class Student { private String sno;//学号
    private String sname;//姓名
    private int age;
    private String sex;//姓别
    private int grade;
    public Student(String sno,String sname,int age,String sex,int grade) {
    this.sno=sno;
    this.sname=sname;
    this.age=age;
    this.sex=sex;
    this.grade=grade;
    }

    public Student(){

    }
    public String toString() {

    return this.sno+","+this.sname+","+this.age+","+this.sex+","+this.grade;

    }

    public int getAge() {
    return age;
    }
    public void setAge(int age) {
    this.age = age;
    }
    public int getGrade() {
    return grade;
    }
    public void setGrade(int grade) {
    this.grade = grade;
    }
    public String getSex() {
    return sex;
    }
    public void setSex(String sex) {
    this.sex = sex;
    }
    public String getSname() {
    return sname;
    }
    public void setSname(String sname) {
    this.sname = sname;
    }
    public String getSno() {
    return sno;
    }
    public void setSno(String sno) {
    this.sno = sno;
    } }
    <?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>
    <!-- 
      <transactionManager type="JDBC" commitRequired="false">
        <dataSource type="SIMPLE">
          <property name="JDBC.Driver" value="com.mysql.jdbc.Driver"/>
          <property name="JDBC.ConnectionURL" value="jdbc:mysql://localhost:3306/mytest"/>
          <property name="JDBC.Username" value="root"/>
          <property name="JDBC.Password" value="root"/>
        </dataSource>
      </transactionManager>
      -->
      <settings cacheModelsEnabled="false" lazyLoadingEnabled="true" 
      enhancementEnabled="true" useStatementNamespaces="true" />
    <!--  
      <sqlMap resource="sqlmapCommon.xml"/>-->
       <sqlMap resource="SqlMapecsideAuto.xml"/>
      
    </sqlMapConfig>
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN" "http://www.ibatis.com/dtd/sql-map-2.dtd">
    <sqlMap namespace="common"><resultMap id="StudentResult" class="com.java91.lesson01.bean.Student">
    <result property="sno" column="sno" />
    <result property="sname" column="sname" />
    <result property="age" column="age" />
    <result property="sex"  column="sex" />
    <result property="grade"  column="grade" />
    </resultMap>
    <select id="getStudent" resultMap="StudentResult" parameterClass="string">
         select *
         from student
         where sno = #value#
    </select> 
        
        
    <delete id="deleteStudent" parameterClass="string">
    delete from Student where sno = #value#
    </delete>    
        
    <update id="updateStudent" parameterClass="com.java91.lesson01.bean.Student">
    update Student
    set 
       sno = #sno#  
       <isNotNull property="sname">,SNAME = #sname#</isNotNull>
       <isNotNull property="age">,AGE = #age#</isNotNull>
       <isNotNull property="sex">,SEX = #sex#</isNotNull>
       <isNotNull property="grade">,GRADE = #grade#</isNotNull>
    where sno = #sno#
    </update><insert id="insertStudent" parameterClass="com.java91.lesson01.bean.Student">
    insert into Student(
     <isNotNull property="sno">SNO</isNotNull>
     <isNotNull property="sname">, SNAME</isNotNull>
     <isNotNull property="age">, AGE</isNotNull>
     <isNotNull property="sex">, SEX</isNotNull>    
     <isNotNull property="grade">, GRADE</isNotNull>)
     values (
     <isNotNull property="sno">#sno#</isNotNull>
     <isNotNull property="sname">,#sname#</isNotNull>
     <isNotNull property="age">,#age#</isNotNull>
     <isNotNull property="sex">,#sex#</isNotNull>
     <isNotNull property="grade">,#grade#</isNotNull>)
    </insert>  <select id="queryStudent" resultMap="common.StudentResult">
       select * from Student
    <dynamic prepend="where">
    <isNotEmpty prepend="and" property="SNO">
    SNO = #SNO#
    </isNotEmpty>
    <isNotEmpty prepend="and" property="SNAME">
    SNAME = #SNAME#
    </isNotEmpty> 
    <isNotEmpty prepend="and" property="SEX">
    SEX = #SEX#
    </isNotEmpty>
    </dynamic>

    <dynamic prepend="order by">
    <isNotEmpty property="sortString">
    $sortString$
    </isNotEmpty>
    <isEmpty property="sortString">
    SNO
    </isEmpty>
    </dynamic>
    </select>
    <select id="countStudent" resultClass="int">
    select * from Student
    <dynamic prepend="where">
    <isNotEmpty prepend="and" property="SNO">
    SNO = #SNO#
    </isNotEmpty>
    <isNotEmpty prepend="and" property="SNAME">
    SNAME = #SNAME#
    </isNotEmpty>
    <isNotEmpty prepend="and" property="SEX">
    SEX = #SEX#
    </isNotEmpty>
    </dynamic>
    </select>  <select id="queryAjaxStudents" parameterClass="com.java91.common.dao.FormatMap" resultClass="java.util.HashMap">
    select * from Student
    <dynamic prepend="where">
    <isNotEmpty prepend="and" property="sno">
    sno = #sno#
    </isNotEmpty>
    <isNotEmpty prepend="and" property="sname">
    sname = #sname#
    </isNotEmpty> 
    </dynamic>
    <dynamic prepend="order by">
    <isNotEmpty property="sortString">
    $sortString$
    </isNotEmpty>
    <isEmpty property="sortString">
    sno
    </isEmpty>
    </dynamic>
    <dynamic prepend="">
    <isNotEmpty property="dynamicString">
    $dynamicString$
    </isNotEmpty>
    </dynamic>
    </select>


    <select id="countAjaxStudents" resultClass="int">
    select count(sno) from from Student
    <dynamic prepend="where">
    <isNotEmpty prepend="and" property="sno">
    sno = #sno#
    </isNotEmpty>
    <isNotEmpty prepend="and" property="sname">
    sname = #sname#
    </isNotEmpty> 
    </dynamic>
    <dynamic prepend="">
    <isNotEmpty property="dynamicString">
    $dynamicString$
    </isNotEmpty>
    </dynamic>
    </select> 
       
    <!-- SNAME like  #SNAME#
    %$SNAME$%
    <select id="dynamicGetAccountList"  cacheModel="account-cache"  resultMap="account-result" > 
    select * from ACCOUNT 
    <isGreaterThan prepend="and" property="id" compareValue="0"> 
    where ACC_ID = #id# 
    </isGreaterThan> 
    </select>上面的例子中,根据参数bean“id”属性的不同情况,可创建两个可能的语句。
    如果参数“id”大于0,将创建下面的语句: select * from ACCOUNT where ACC_ID = ? 
    如果“id”参数小于等于0,将创建下面的语句: select * from ACCOUNT
    动态配置SQL,根据传入的参数类/MAP的:
    1、某属性是否存在
    2、某属性的值是否为空或NULL。
    3、某属性的值的大小。
    一元判定节点有:
    <isPropertyAvailable prepend="" property="sname">:  参数类中是否有name这个属性,只要该类有该属性就成立,不用再判断其具体的值。
    <isNotPropertyAvailable prepend="" property="name">: 

    <isNull property="name"> :属性name的值是否为NULL
    <isNotNull property="name"> :


    <isEmpty property="name"> :参数类的属性name是否为null或"".
    <isNotEmpty property="name">:
    二元判定有两个判定参数,一是属性名,而是判定值,如
    <isGreaterThan prepend="AND" property="age"compareValue="18">  :参数类的age属性值大于18则满足条件
    <isGreaterEqual prepend="AND" property="age"compareValue="18">  :参数类的age属性值大于 或等于 18则满足条件
    <isLessThan prepend="AND" property="age"compareValue="18">  :参数类的age属性值小于
    <isLessEqual prepend="AND" property="age"compareValue="18">  :参数类的age属性值小于或等于

    <isEqual prepend="AND" property="age"compareValue="18">:参数类的属性age是否等于18。
    <isNotEqual prepend="AND" property="age"compareValue="18">:




    <isNotNull prepend="and" property="age">
    <![CDATA[
         age >= #age#*0.8 and age <= #age#*1.2
     ]]>
    </isNotNull>

    <isNotEmpty prepend="and" property="createtime_to">
    createtime between #createtime_from# and #createtime_to#+1
    </isNotEmpty>
    <isNotNull property="beginDate">
      <![CDATA[
        and createTime >= #beginDate# 
    ]]>
    </isNotNull>

    <isNotNull property="endDate">
    <![CDATA[
    and createTime <= #endDate# 
    ]]>
    </isNotNull>
    upper(englishname) LIKE upper(#englishname#) --></sqlMap>