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. td标签里内容不换行

    在一些页面开发中,除自己操作外,引起换行的情况一般有: Ex一.td标签里内容长度过长引起换行: Ex二.div标签(或其他标记)里内容有文本和图片引起换行: 解决方法: 针对例子一用<nobr ...

  2. java基础:JDK环境安装

    根据操作系统位数(32/64,一般64位向下兼容),项目要求版本,下载对应JDK安装包 配置环境变量 JAVA_HOME C:\Program Files\Java\jdk1.7.0_80 PATH ...

  3. Android学习记录帖

    1.OptionMenu的创建过程类图 2. OptionMenu的isActionBarMenu 在PhoneWindow的preparePanel中会根据设定的FEATURE来给变量isActio ...

  4. Unified Service Desk Overview

    As we implement CRM in enterprise, we usually integrate with many other information system such as E ...

  5. SpringCloud的学习记录(2)

    这一章节主要讲如何搭建eureka-client项目. 在我们生成的Demo项目上右键点击New->Module->spring Initializr, 然后next, 填写Group和A ...

  6. Eclipse 如何修改 Web 项目的名称

    Eclipse 切换到  Navigator 视图,能显现出项目下所有的文件便于修改. 1.修改该项目目录下:.project文件 <projectDescription><name ...

  7. Struts2_HelloWorld1

    打开 eclipse,新建 web 项目. 因为可能需要 jstl 表达式,所以添加 jstl需要的jar包. 下载链接:http://pan.baidu.com/s/1hr6mBI0 将jar拷贝至 ...

  8. centos 7中磁盘挂载重启后挂载失效

     在centos 7磁盘挂载成功后,关机重启,挂载磁盘失效,需要重新挂载,不用重新挂载的开机挂载方法如下: 1.先检验要挂载的磁盘是否已被挂载,有的话先卸除 2.修改 /etc/fstab 文件 ,最 ...

  9. 基于FPGA的VGA显示设计(一)

    前言 FPGA主要运用于芯片验证.通信.图像处理.显示VGA接口的显示器是最基本的要求了. 原理 首先需要了解 : (1)VGA接口协议:VGA端子_维基百科 .VGA视频传输标准_百度 引脚1 RE ...

  10. word文档快速转换为PPT演示文稿

    方法一: 访问http://t.im/pdftoppt,点击继续浏览(会跳转至:https://smallpdf.com/cn/pdf-to-ppt): 打开word文档,设置为“横向”,输出为PDF ...