ibatis 问题:Unable to translate SQLException with Error code '0', will now try the

xml文件:
[code="java"]
<!-- 动态插入数据 -->


insert into $tableName$


#colName[]#

values

#colValue[]#



[/code]

里面的colName和colValue都是List型的,都在ColInfo 类里。
service:
[code="java"] public void commonInsert(ColInfo colInfo) {
System.out.println("------------------------------");
System.out.println(colInfo.getColName().size());
System.out.println(colInfo.getColValue().size());
System.out.println("------------------------------");
sqlMapClientTemplate.insert("commonInsert", colInfo);
}
[/code]
可以确定有值输出。
报错:

[quote]org.springframework.jdbc.UncategorizedSQLException: SqlMapClient operation; uncategorized SQLException for SQL []; SQL state [null]; error code [0]; --- The error occurred while applying a parameter map. --- Check the commonInsert-InlineParameterMap. --- Check the parameter mapping for the 'colName[0]' property. --- Cause: java.lang.NullPointerException; nested exception is com.ibatis.common.jdbc.exception.NestedSQLException: --- The error occurred while applying a parameter map. --- Check the commonInsert-InlineParameterMap. --- Check the parameter mapping for the 'colName[0]' property. --- Cause: java.lang.NullPointerException [/quote]

请各位大大看看哪里的错啊?colName传进去的是有值的啊。

抱歉, 刚才笔误, #应该包围[], 应该写成这样 colName#[]#

你传进来的parameterClass是一个实体Bean,但是你取的时候是一个list,当然是报空值了,建议你可以在程序代码里面循环list去逐个插入到相应的数据库表就行。
比如:
[code="java"]
for(ColInfo c:clist) {
//插入数据库的操作saveColInfo();
}
[/code]
然后在xml里面加入一个插入语句就行
[code="java"]

insert into table(...)
values(##, ##, ...)

[/code]
按照这种方式应该可以解决。

SQLMAP 是否存在笔误?





insert into $tableName$



colName[]# ---> #colName[]# 少个#?


values



colValue[]# ---> #colValue[]# 少个#?


SQLMAP 没报错?

要注意两个地方:
1.Java代码中是否设置了属性值
col.setColName(colName);
col.setColValue(colValue);
[code="java"]
public class TestColDao extends BaseTestCase
{
public TestColDao(String name) {
super(name);
}

public void testColDao() {
    ColInfoDao dao=(ColInfoDao)ctx.getBean("colInfoDao");
    ColInfo col = new ColInfo();
    col.setTableName("TEST_COL");
    List colName = new ArrayList();
    colName.add("NAME");
    colName.add("TYPE");
    colName.add("ADDRESS");
    List colValue = new ArrayList();
    colValue.add("hello");
    colValue.add("test");
    colValue.add("beijing");

    col.setColName(colName);
    col.setColValue(colValue);
    Object object = dao.doInsert(col);

}

}
[/code]
2.字段名要使用$$,字段值要使用##
$$是直接用内容代替,##是当做字符串处理
[code="xml"]
<?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">

<typeAlias alias="colInfo"
    type="com.travelsky.angel.model.ColInfo" />
<insert id="commonInsert" parameterClass="colInfo" >
    insert into $tableName$
    <iterate property="colName" open="(" close=")" conjunction=",">
        $colName[]$
    </iterate>
     values
    <iterate property="colValue" open="(" close=")" conjunction=",">
        #colValue[]#
    </iterate>
</insert>


[/code]