1、  问题:使用mybatis更新数据失败

描述:java.lang.NullPointerException

提交表单

com.duma.entity.User.updateUser     - ==> Parameters: ?¤§???(String), 23(Integer), nv(String), 1232342343(String), 123@qq.com(String), 2018-05-06 13:11:38.16(Timestamp), 6666(String), 1(Integer)

问题可能是因为中文乱码

打印输出可以看出问题是因为页面传回来的数据为乱码,但是在servlet中有设置接收数据的格式,那问题应该是jsp页面提交的数据乱码

原因:未指定具体的提交方式。

 2、问题:java.lang.NumberFormatException: For input string: ""

分析原因应该是类型转换的时候出错,如果输入为空得到的字符串为"",而不是null值,于是在类型转换的时候格式不匹配,修改代码

String ageStr = request.getParameter("age");

Integer age= null;

if(ageStr!=null&&!ageStr.equals("")){

age= Integer.valueOf(ageStr);

}
继续测试提交部分缺省(为空)表达还是错误
java.lang.NullPointerException
at com.duma.dao.UserDao.updateUser(UserDao.java:67)

首先认识事务提交mybatis和MySQL引擎innoDB区别。Mybatis默认不提交,innodb默认自动提交事务。所以,我们在使用的时候需要在mybatis手动commit。

而我已经手动关闭,所以问题应该是SQL语句的问题。查看日志可以看见:

13143 DEBUG [http-bio-8080-exec-9]       com.duma.entity.User.updateUser     - ==>  Preparing: update user SET nickname=?, gender=?, phone=?, email=?, updateTime=?, remark=? where id=?

13144 DEBUG [http-bio-8080-exec-9]       com.duma.entity.User.updateUser     - ==> Parameters: 大慕(String), 女(String), (String), (String), 2018-05-06 15:49:28.294(Timestamp), (String), 1(Integer)

提交数据为空的项在mapper的if判断下,还是成功加入添加到SQL语句

仔细观察可以发现

红色框username值为null,在查询的时候就没有添加,而phone值为””时却添加到了语句中

Google他们之间的区别得到:

空对象: String s = null;

空对象是指定义一个对象s,但是没有给该对象分配空间,即没有实例化该对象,因此,空对象在调用所有对象方法时候都会抛出异常,如s.length(), s.isEmpty()等方法。

空值: String k = "";

空值是指一个字符床对象已经实例化,即系统已经给该变量分配了空间,只是对象的内容为空。

空格: String n = " ";

是指一个字符对象已经实例化,对象的内容为空格。

博客:http://ych0108.iteye.com/blog/2125427

于是修改userMapper的配置

<update id="updateUser">

        update user

        <set>

            <if test="username!=null and username !=''">username=#{username},</if>

            <if test="userpass!=null and userpass!=''">userpass=#{userpass},</if>

            <if test="nickname!=null and nickname!=''">nickname=#{nickname},</if>

            <if test="age!=null and age!=''">age=#{age},</if>

            <if test="gender!=null and gender!=''">gender=#{gender},</if>

            <if test="phone!=null and phone!=''">phone=#{phone},</if>

            <if test="email!=null and email!=''">email=#{email},</if>

            <if test="createTime!=null and createTime!=''">createTime=#{createTime},</if>

            <if test="updateTime!=null and updateTime!=''">updateTime=#{updateTime},</if>

            <if test="lastLogin!=null and lastLogin!=''">lastLogin=#{lastLogin},</if>

            <if test="userStatus!=null and userStatus!=''">userStatus=#{userStatus},</if>

            <if test="remark!=null and remark!=''">remark=#{remark},</if>

        </set>

        where id=#{id}

</update>
继续测试提交缺省(为空)表达,server报错
org.apache.ibatis.exceptions.PersistenceException:
### Error updating database. Cause: java.lang.IllegalArgumentException: invalid comparison: java.util.Date and java.lang.String

Google得到:

原来这是mybatis 3.3.0中对于时间参数进行比较时的一个bug. 如果拿传入的时间类型参数与空字符串''进行对比判断则会引发异常. 所以在上面的代码中去该该判断, 只保留非空判断就正常了

<if test="updateTime!=null">updateTime=#{updateTime},</if>

继续实现这个功能,还是没有update成功

java.lang.NullPointerException空指针异常,异常位置

sqlSession.commit();

修改:

SqlSession Session = getSqlSession();

      row = Session.update("updateUser", user);

      Session.commit();

将调用之后的session对象进行commit,成功更新列表

3、  添加用户成功数据库返回数据乱码

检查发现是页面传回servlet乱码,是未修改post提交方式的编码

4、  思考mybatis多次修改数据库数据变得很慢的原因

1、数据库为了优化性能,有时候不会设置外键,而是通过逻辑关联连接,方便管理

2、自增ID可以设置起始字段,这样可以预留位置。

5、  第二个模块为灰色

原因是

Maven忽略文件勾选为了灰色

最新文章

  1. 【新手】python爬虫遍历贴吧用户
  2. 《InsideUE4》-3-GamePlay架构(二)Level和World
  3. JavaScript代码优化(下载时间和执行速度优化)
  4. BSON与JSON的区别
  5. iOS之RunTime浅谈
  6. JSP的学习(2)——语法知识一
  7. tset
  8. Noip 2014酱油记+简要题解
  9. 每天一个Linux命令(21)--find命令之xargs
  10. Elasticsearch5.0.1安装
  11. vue项目引入bootstrap、jquery
  12. odoo中各视图写法
  13. HTTP协议11-cookie和seesion
  14. python pip 使用时错误: Patal error in launcher:Unable to create process using &#39;&quot;&#39;
  15. Doors Breaking and Repairing CodeForces - 1102C (思维)
  16. iframe传递参数问题
  17. css的优先级 和 权重
  18. iOS sqlite C语言操作
  19. python的多线程和守护线程
  20. oracle创建简单的包

热门文章

  1. 配置python环境使用tushare股票数据
  2. php表单提交时的身份证号码验证
  3. DedeCMS {dede:field name=&#39;array&#39; /}的用法
  4. 温习SQL语句
  5. jQuery的表单验证
  6. Python函数(2)
  7. ECMAScript Regex
  8. Android 极光推送JPush---自定义提示音
  9. ansible使用2-inventory &amp; dynamic inventory
  10. HCNA配置console线路密码password认证