【Java 5】Unknown column 'user_name' in 'field list'


【Java 5】Unknown column 'user_name' in 'field list'

 


背景:

      java.sql.SQLException: Unknown column 'user_name' in 'field list'

     at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2928)
     at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1571)
     at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1666)
     at com.mysql.jdbc.Connection.execSQL(Connection.java:2994)
     at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:936)
     at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1030)
     at com.zzz.util.DbUtil.Logincheck(DbUtil.java:44)
     at com.zzz.servlet.LoginServlet.doGet(LoginServlet.java:34)
     at com.zzz.servlet.LoginServlet.doPost(LoginServlet.java:55)
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:650)
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:731)



  

分析问题:

     这是什么东西?缺少“user_name”,不是不是的。仔细再看,这是:不知道“user_name”在列表中。 根据经验一般就是实体类和数据库的字段名不一致导致的。但是后面将数据库中字段名和类中名字也改成一致了,启动服务,结果还是报一样的错,这时纳闷了,为什么呢?

 

     翻了mybatis 和hibernate API,结果发现持久类的映射文件中的字段顺序必须和数据库中标的字段顺序一致,什么意思呢?数据库表中user_name是第三个字段,则你映射文件中的顺序也必须是第三个,否则Hibernate在映射时找不到,这是一个容易引起犯错误的地方。


  总结分析思路

1,查看mapper中的userName,与user_name


2,查看数据库中的user_name


3,查看实体类中的userName


解决问题;

    后来又看了看“userMapper.xml”,userMapper.xml中的代码:


    id, user_name, password, age

 

发现原因了,在数据库mysql表中第一次建表:

     【Java 5】Unknown column 'user_name' in 'field list'_第1张图片

 

第二次建表:

    【Java 5】Unknown column 'user_name' in 'field list'_第2张图片




小结:

        现在问题解决了回过头来看着,这问题真是太简单了,当初怎么就花了不少时间才解决出来呢?

一开始以为是大小写用“username” ,“userName”和“user_name” 的尝试,最终是数据库中字段,早就应该看“userMapper.xml”里面的字段,可以一下就解决。其实就是持久类的字段和数据库表里的字段不对应。


       思路本来是没有的,问题解决的多了,思路也就越来越多了,debug的速度也就越来越快了。




【Java 5】Unknown column 'user_name' in 'field list'_第3张图片



你可能感兴趣的:($【Java】,$【基础积累】)