我在在线用户日志业务层(service)中写sql语句时发现控制台报错。
我的需求是写一个根据在线用户查所有条数
于是我的sql语句就是
String hql= SELECT COUNT(*) FROM user_list WHERE online_user = '0'
在数据库中执行是ok的
但是在后台运行起来就报这个错误
unexpected token: 1 near line 1, column 14 [SELECT count(1) FROM XXX
处理方法:
1、看到报错我找到了相应位置,检查下语句是否有问题,发现在数据库中是没有问题的。
2、String hql 替换成String sql同样报错,发现和这个没有关系
网上查找的资料:
任何程序都需要对数据进行查询和修改。而数据一般存储在数据库中,所以就要从数据库中取数据。
从数据库中取出数据以后,这些数据要以什么方式存储,以便在各个方法或者说处理过程中传输是必定遇到的问题,如果是简单的小量数据,那么可能拿到数据就直接进行修改,然后返送回数据库。
在处理过程中,从数据库提取的数据,经常会遇到这种情况:有一些数据是组成某种信息体的部分,如果将其放在一起显得结构更为严谨,如用户的姓名,年龄,性别等组成了个人资料。通常在大系统中,将数据组织成个人资料的形式会更好,更有利传输以及逻辑设计,也更易于理解,那么我们就会把从数据库提取的相对独立的信息组成一个类。
这时又面临一个问题。那就是,当这个类中的信息修改完后,再分离地对这些信息存储会显得比较麻烦。而且思路又从统一整体变的破碎。
那有没有什么工具,可以替我们处理这些繁琐的操作,使得从数据库提取的数据自动地组织成某个对象,然后我们对对象进行修改之后,直接对对象进行保存就可以对应地修改数据库中的数据呢。有,hibernate做的就是这件事。
最简单的情况下,hibernate把数据表的数据段映射到类的属性上,那么这个数据表的定义本身就对应于一个类的定义,而每一个数据行将映射成该类的一个对象。
从数据库提取的数据会自动按你设置的映射要求封装成特定的对象。之后你就可以通过对对象进行操作来修改数据库中的数据。这时候你面对的不是信息的碎片,而是一个形象鲜明的对象。
所以hibernate就是通过将数据表和实体类之间的映射,使得对对象的修改对应数据行的修改,使得程序更符合面向对象思维,并简化工作,使逻辑结构更清晰。
hibernate:是一个采用ORM机制持久层的开源框架;核心思想:ORM是将表与表之间的操作,映射成对象和对象之间的操作,这样简化了持久层的代码,减轻了程序员的负担
3、所以查询语句(select)from后面接的不是表名称,而是java bean数据对象名。
String hql="FROM UserList WHERE onlineUser = '1'";
发现成功了。
所以以后如果在使用hibernate时,在写select语句要记住from后面接的不是表名称,而是映像名