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忽略文件勾选为了灰色

基于mybatis设计简单OA系统问题3的更多相关文章

  1. 基于mybatis设计简单OA系统问题1

    全类名与全路径 全类名是某个文件在项目中的位置,格式为包名.类名 路径分为相对路径和绝对路径. 绝对路径是指这个文件在操作系统中的位置, 相对路径通过这个文件的上一级  ./  或下一级/ 来指定文件 ...

  2. 基于mybatis设计简单OA系统问题2

    1.<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> <fm ...

  3. 基于mybatis设计简单信息管理系统---jsp页面

    1.在设计编辑界面的时候需要有一个下拉的列表页,想要他指定到指定的值: <select id="categoryId" name="categoryId" ...

  4. 基于mybatis设计简单信息管理系统2

    1.空指针异常 public class CanvasServlet extends HttpServlet { private CanvasService canvasService; privat ...

  5. 基于mybatis设计简单信息管理系统1

    驼峰式命名法 骆驼式命名法就是当变量名或函数名是由一个或多个单词连结在一起,而构成的唯一识别字时,第一个单词以小写字母开始:第二个单词的首字母大写或每一个单词的首字母都采用大写字母,例如:myFirs ...

  6. 基于角色访问控制的OA系统的设计与实现

    摘要:随着电子政务的快速发展和全面普及,办公自动化(OA)系统的安全性显得越来越重要.对基于Web 的B/S 结构的OA 系统结构和安全需求进行了分析,为了增强用户身份鉴别和授权控制的安全性,分析了基 ...

  7. 可视化工作流程设计开发OA系统,一两个程序员就搞定!

    随着信息化的发展,越来越多的公司老板要求实现企业审批流程化.一个公司在初期,人员少,流程简单,员工也会经常不按工作流程来走,甚至有些跨部门的工作因为关系原因,没有走工作流程就实施,导致后期出现问题或者 ...

  8. 嵌入式系统及应用课程设计——基于STM32的温湿度监测系统

    大三上学期期末总结,嗯,没错上学期,写在新学期开始,hhh. 上学期学了一门嵌入式系统及应用的课程,期末的课程设计题目是基于STM32的温湿度监测系统. 记得刚开始做课程设计的时候,听说先设计画出原理 ...

  9. 基于Redis的限流系统的设计

    本文讲述基于Redis的限流系统的设计,主要会谈及限流系统中限流策略这个功能的设计:在实现方面,算法使用的是令牌桶算法来,访问Redis使用lua脚本.   1.概念 In computer netw ...

随机推荐

  1. java内存区域与内存溢出

    JVM的内存区域划分: jvm的内存区域分为5部分:程序计数器,虚拟机栈,本地方法栈,堆跟方法区. 程序计数器,虚拟机栈,本地方法栈三部分是线程私有的,堆跟方法区是公共的. 1.程序计数器 是一块较小 ...

  2. windows2008利用serv-u14.0.0.6架设FTP服务器的方法

    这几天在公司的服务器上安装serv-u,想把它做成可以传输文件的ftp服务器,结果遇到了很多问题,试了serv-u的好几个版本,结果都不行,最终只有serv-u14安装成功. 安装过程很简单,安装后除 ...

  3. 用Java 8 Lambda表达式实现设计模式:命令模式

    在这篇博客里,我将说明如何在使用 Java 8 Lambda表达式 的函数式编程方式 时实现 命令 设计模式 .命令模式的目标是将请求封装成一个对象,从对客户端的不同类型请求,例如队列或日志请求参数化 ...

  4. ASP.NET那点不为人知的事(一)

    http://www.cnblogs.com/OceanEyes/archive/2012/08/13/aspnetEssential-1.html#_label0 我们上网时,在浏览器地址输入网址: ...

  5. (转)Java实现Web Service过程中处理SOAP Header的问题

    网上有篇文章,大致这么说的(如下文),最后我采用的wsimport  -XadditionalHeaders的方式. StrikeIron offers two authentication meth ...

  6. jdk安装完为什么会有两个JRE?

    jdk安装完为什么会有两个JRE? 之所以需要两套 jre ,是因为可以分担工作:当用户只需要执行 java 的程序时,那么 c:\program files\java\jre 下的 jre 就 ok ...

  7. Functional language(函数式编程语言)初步了解

    对于函数式语言并不太了解,查询了百度.博客.知乎等做了以下总结. What 函数式语言(functional language)一类程序设计语言,是一种非冯·诺伊曼式的程序设计语言.函数式语言主要成分 ...

  8. jQuery遍历节点

    html代码 <div> <p>武汉长乐教育</p> <span>在哪才能真正学习会PHP技术?</span> <a href=&qu ...

  9. Sass基础(二)

    五.嵌套 在Sass中,嵌套有三种方式:选择器嵌套.属性嵌套.伪类嵌套 1.选择器嵌套 2.属性嵌套 3.伪类嵌套 六.混合宏 当样式变得越来越复杂,需要重复使用大段的样式时,使用变量就无法达到目的了 ...

  10. MySQL(三) 完整性约束

    一.介绍 约束条件与数据类型的宽度意义,都是可选参数. 作用:用于保证数据的完整性和一致性. 主要分为: PRIMARY KEY (PK) 标识该字段为该表的主键,可以唯一的标识记录 FOREIGN ...