论坛首页 入门技术论坛

有熟悉ibatis的请进

浏览 4559 次
该帖已经被评为新手帖
作者 正文
   发表时间:2006-12-08  
以下是我的SQLmap文件 
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMap
PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN"
"http://www.ibatis.com/dtd/sql-map-2.dtd">
<sqlMap namespace="MangeRight">
    <typeAlias alias="manageright" type="com.newyl.model.businessobject.ManageRight" />

<resultMap id="manageRightResult" class="manageright">
<result property="recordId" column="record_id" />
<result property="userName" column="user_name" jdbcType="VARCHAR" />
<result property="password" column="user_password" />
<result property="userRight" column="user_right" jdbcType="VARCHAR" />
<result property="department" column="department"/>
<result property="roleId" column="role_id" jdbcType="VARCHAR" />
<result property="loginName" column="login_name" jdbcType="VARCHAR" />
</resultMap>

<select id="getUserByName" parameterClass="manageright" resultMap="manageRightResult">

select record_id ,
user_name ,
user_password ,
user_right,
department ,
                role_id ,
login_name from tf_manager_right where user_name = #userName#;

</select>

<select id="getUserByLoginName" resultMap="manageRightResult">
select record_id ,
user_name ,
user_password ,
user_right,
department ,
                role_id ,
login_name from tf_manager_right
</select>
</sqlMap>

以下是测试方法:
  public void getDatas() {
    com.ibatis.sqlmap.client.SqlMapClient sqlMap = null;
try {
   java.io.Reader reader = Resources.
       getResourceAsReader("SqlMapConfig.xml");
   sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);
   List list = sqlMap.queryForList("getUserByLoginName",null);
   System.out.println("list.length" + list.size());
  ManageRight user = new ManageRight();
  user.setUserName("hjk");
  user = (ManageRight)sqlMap.queryForObject("getUserByName", user);
   if(user!=null) {
     System.out.println(user.getDepartment());
   }
} catch (Exception e) {
e.printStackTrace();
}finally{
   try{
     sqlMap.endTransaction();
   }catch(Exception ex){

   }
}
  }

   发表时间:2006-12-08  
List list = sqlMap.queryForList("getUserByLoginName",null);

这个可以得到记录数, 说明数据库连接没有问题。。

user = (ManageRight)sqlMap.queryForObject("getUserByName", user);
这个就怎么都有问题, 不过我是改成传类还是传String进去, 都会得到如下错误:
com.ibatis.common.jdbc.exception.NestedSQLException:  
--- The error occurred in manageRight.xml. 
--- The error occurred while applying a parameter map. 
--- Check the getUserByName-InlineParameterMap. 
--- Check the statement (query failed). 
--- Cause: java.sql.SQLException: ORA-00911: invalid character

Caused by: java.sql.SQLException: ORA-00911: invalid character


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.queryForObject(SqlMapExecutorDelegate.java:561)

at com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.queryForObject(SqlMapExecutorDelegate.java:536)

at com.ibatis.sqlmap.engine.impl.SqlMapSessionImpl.queryForObject(SqlMapSessionImpl.java:93)

at com.ibatis.sqlmap.engine.impl.SqlMapClientImpl.queryForObject(SqlMapClientImpl.java:70)

at com.newyl.view.GetData.getDatas(GetData.java:35)

at com.newyl.view.GetData.main(GetData.java:52)
等等

以下是我的JavaBean:
public class ManageRight implements Serializable {
private int  recordId;
private String userName;
private String password;
private String userRight;
private String department;
private String roleId;
private String loginName;

   set.....
   get.....
}

有哪位知道请告知。 郁闷啊
0 请登录后投票
   发表时间:2006-12-08  
去掉#userName#后边的";"试试
0 请登录后投票
   发表时间:2006-12-08  
Caused by: java.sql.SQLException: ORA-00911: invalid character

非法字符!
0 请登录后投票
   发表时间:2006-12-08  
谢谢楼上, 去掉;是可以了。。

但是有个疑问就是。
    <update id="updateProvider" parameterClass="Provider">
    <![CDATA[
        update provider SET
            providerNO = #providerNO#,
            providerName = #providerName#,
            providerShortName = #providerShortName#,
            approveDocID = #approveDocID#,
            reqPerson = #reqPerson#,
            reqDate = #reqDate#,
            reqCompany = #reqCompany#,   
        where providerNO = #providerNO#;
    ]]>
    </update>
我朋友他们公司做的开发也加了“;”, 为什么他们的可以呢???
我也试了将sql语句包含在<![CDATA[里, 再加上";"也还是不行。。
很奇怪喔。。
0 请登录后投票
   发表时间:2006-12-08  
这可能跟具体的DBMS的JDBC驱动实现有关吧,没太注意过,他们用的也是Oracle么?
0 请登录后投票
   发表时间:2006-12-08  
他们用的DB2, 我们用的ORACLE
但是我们在pl/sql里执行SQL语句时加上";"也不会出错啊。
0 请登录后投票
   发表时间:2006-12-08  
; 只有在command模式下才会有作用 其他模式下都是无意义的
至于说报不报错
估计和驱动有关吧   不太清楚
0 请登录后投票
   发表时间:2006-12-15  
直接写jdbc代码有;号也会出错
数据库也是oracle,jdbc driver为oracle官方下载的
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics