同一条SQL语句,myBatis查出来的数据和Navicat查出来的数据不同

通过日志打印的mybatis执行的SQL语句,原原本本复制到数据库,可以查出来很多条数据,但是mybatis要么查不到,要么少数据。
1.已尝试过写死传入参数,证明不是参数问题
2.尝试过select *,无效
3.尝试过查询的数据不小于resultMap里面的数据,也无效
4.写一个POJO类(是叫DTO吧?)来接收数据,也无效
5.SQL语句很简单,而且是通过复制到数据库,以及属性名都是通过复制,不存在写错。

走投无路了。。

以下是代码段以及日志:
日志:

 2018-07-02 14:05:00,244 DEBUG [org.mybatis.spring.SqlSessionUtils] - Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5f2b1d49]
2018-07-02 14:05:00,244 DEBUG [org.mybatis.spring.SqlSessionUtils] - Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5f2b1d49] from current transaction
2018-07-02 14:05:00,244 DEBUG [com.talk915.liveManagement.webapp.dao.group.VideoRecordDao.getDataByRoomIdforquery] - ==>  Preparing: select v.VideoStream videoStream,v.FileSize fileSize,v.Quality quality,v.UserType userType from vod_videorecord v where trim(v.RoomID) = ? 
2018-07-02 14:05:00,244 DEBUG [com.talk915.liveManagement.webapp.dao.group.VideoRecordDao.getDataByRoomIdforquery] - ==> Parameters: 9(Integer)
2018-07-02 14:05:00,316 DEBUG [com.talk915.liveManagement.webapp.dao.group.VideoRecordDao.getDataByRoomIdforquery] - <==      Total: 17
2018-07-02 14:05:00,316 DEBUG [org.mybatis.spring.SqlSessionUtils] - Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5f2b1d49]
2018-07-02 14:05:00,316 DEBUG [org.mybatis.spring.SqlSessionUtils] - Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5f2b1d49] from current transaction
2018-07-02 14:05:00,316 DEBUG [com.talk915.liveManagement.webapp.dao.group.VideoRecordDao.getDataByRoomIdforquery] - ==>  Preparing: select v.VideoStream videoStream,v.FileSize fileSize,v.Quality quality,v.UserType userType from vod_videorecord v where trim(v.RoomID) = ? 
2018-07-02 14:05:00,316 DEBUG [com.talk915.liveManagement.webapp.dao.group.VideoRecordDao.getDataByRoomIdforquery] - ==> Parameters: 3(Integer)
2018-07-02 14:05:00,393 DEBUG [com.talk915.liveManagement.webapp.dao.group.VideoRecordDao.getDataByRoomIdforquery] - <==      Total: 1143
2018-07-02 14:05:00,394 DEBUG [org.mybatis.spring.SqlSessionUtils] - Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5f2b1d49]
2018-07-02 14:05:00,394 DEBUG [org.mybatis.spring.SqlSessionUtils] - Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5f2b1d49] from current transaction
2018-07-02 14:05:00,394 DEBUG [com.talk915.liveManagement.webapp.dao.group.VideoRecordDao.getDataByRoomIdforquery] - ==>  Preparing: select v.VideoStream videoStream,v.FileSize fileSize,v.Quality quality,v.UserType userType from vod_videorecord v where trim(v.RoomID) = ? 
2018-07-02 14:05:00,394 DEBUG [com.talk915.liveManagement.webapp.dao.group.VideoRecordDao.getDataByRoomIdforquery] - ==> Parameters: 2(Integer)
2018-07-02 14:05:00,472 DEBUG [com.talk915.liveManagement.webapp.dao.group.VideoRecordDao.getDataByRoomIdforquery] - <==      Total: 36
2018-07-02 14:05:00,472 DEBUG [org.mybatis.spring.SqlSessionUtils] - Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5f2b1d49]
2018-07-02 14:05:00,472 DEBUG [org.mybatis.spring.SqlSessionUtils] - Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5f2b1d49] from current transaction
2018-07-02 14:05:00,472 DEBUG [com.talk915.liveManagement.webapp.dao.group.VideoRecordDao.getDataByRoomIdforquery] - ==>  Preparing: select v.VideoStream videoStream,v.FileSize fileSize,v.Quality quality,v.UserType userType from vod_videorecord v where trim(v.RoomID) = ? 
2018-07-02 14:05:00,472 DEBUG [com.talk915.liveManagement.webapp.dao.group.VideoRecordDao.getDataByRoomIdforquery] - ==> Parameters: 1(Integer)
2018-07-02 14:05:00,546 DEBUG [com.talk915.liveManagement.webapp.dao.group.VideoRecordDao.getDataByRoomIdforquery] - <==      Total: 575

以最后一条查询语句为例
: select v.VideoStream videoStream,v.FileSize fileSize,v.Quality quality,v.UserType userType from vod_videorecord v where trim(v.RoomID) = ?

参数:1
返回条数:575条
数据库数据: 594条

这是差的少的情况,差的多了,直接差了几百,一千条数据都是..

数据库数据:
图片说明

mapper里面代码段:
图片说明

0

8个回答

这种情况,一般是数据库链接搞错导致。请认真检查数据库链接。

0
tjhdaxia
tjhdaxia 回复qq_25502529: trim(v.RoomID) 去掉 trim试一下;
11 个月之前 回复
qq_25502529
吴大宝藏男孩 谢谢回答,求教一下,数据库连接错误的话,不是应该所有数据都查不出来吗? 刚才已经确认连接就是本地的数据库,也是正确的数据库表
11 个月之前 回复

数据库连接错误问题 或者使用的框架里滤掉了某些特殊数据

0

没遇到过,不过一般单词查询数据大于50条都用分页查询了把。你这样一次查询几百条数据感觉有点不合适。拙见。

0
qq_25502529
吴大宝藏男孩 好吧,谢谢了..
11 个月之前 回复
Lei_Da_Gou
Lei_Da_Gou 那就不知道了。
11 个月之前 回复
Lei_Da_Gou
Lei_Da_Gou 应该是这里的问题。
11 个月之前 回复
qq_25502529
吴大宝藏男孩 回复Lei_Da_Gou: 确认过了,不是这个问题
11 个月之前 回复
Lei_Da_Gou
Lei_Da_Gou 回复qq_25502529: 你看下是不是因为你的表没有主键,然后查询的结果有又很多重复的,到时返回到List中的时候重复的记录被过滤掉了。
11 个月之前 回复
qq_25502529
吴大宝藏男孩 谢谢回答,因为查出来的数据有问题,所以取消掉分页,简化SQL语句.. 想确定问题所在,不过还是没有查出来原因,很绝望
11 个月之前 回复

有可能是数据格式的问题,parameterType是java.lang.Integer,改成java.lang.String试一下

0
qq_25502529
吴大宝藏男孩 谢谢回答,不过 “parameterType”不是传入参数的 数据格式吗? 我传进来的就是Integer类型的呀[苦笑]
11 个月之前 回复

建议反向的思路查问题:先正面面对已知缺少数据的问题,然后如下思路去查看看
1.明确相同条件下两种方式获取数据并保存,分析其中每次执行查询是否都一样(缺少的数据也是一样的不?)
2.对比缺少的数据内容是否有规律

比如大概看了下截图其中fiseSize代码声明对应是INTERGE类型,数据库中有未赋值的记录,是否无法自动映射到结果集可能?

0
qq_25502529
吴大宝藏男孩 回复weixin_30367359: 谢谢回答,没有重复.. [苦笑]
11 个月之前 回复
weixin_30367359
Easygoing_ben 回复qq_25502529: 用Navicat 查询下按照这个videoStream 看看这个是否有重复,类似select v.VideoStream,count(1) from .... where ... group by v.VideoStream
11 个月之前 回复
qq_25502529
吴大宝藏男孩 谢谢回答,关于第一个回答,fileSize有值的记录,同样无法获取的情况,且每次能获取的数据都是一样的。关于第二个回答,能取到的数据都是前x条,刚才仔细对比了一下,没有什么特殊之处(可能是我没发现)
11 个月之前 回复

把resultMap的type改成java.util.Map试试

0
qq_25502529
吴大宝藏男孩 试过了,不行
11 个月之前 回复

原因:
mybaties映射时使用主键判断唯一性,如果查询出来的数据集在映射文件配置中没有设置主键或者主键存在相同的情况下,MyBaties之映射其中一条

解决方法:
给查询出来的结果加上主键字段,在MyBaties的映射文件中也进行配置

0
qq_25502529
吴大宝藏男孩 谢谢回答,不过我最早的resultMap就是有主键Id,查的时候也加上主键了,就是当时查不出来想要的结果,才一步步简化SQL语句.. 所以应该不是这个问题,不过还是受教了,谢谢
11 个月之前 回复

解决了,确实是数据库链接导致的.. 我链接的是xx1数据库,查的表是xx2数据库的表,因为其他的查询都有加上xx2.[表名],忽略了造成这种错误的可能性。谢谢大家。

0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
Mybatis程序中执行和单独执行同一条SQL出现结果不一致(部分数据没有查询出来)
1.mapper文件如下所示:                                                                                                                                              
使用mybatis查出数据与mysql查出来的不一致(order by)
最近在练习easyui的时候做到datagrid的时候 用到点击字段进行 降序,升序 的时候发现无论怎么点 数据都不会变,开始以为是easyui-datagrid中配置错了,改了半天也没有发现.  然后去看了下mybatis发出的sql和查询结果.查出来才发现 不是easyui的错,而是查询出来的结果都一样.然后又去mysql中查了一下.发现mysql中查出来没有问题然后我就懵了,都是一样的sql...
java异常-一条sql在Navicat里能查出数据,但是mybatis查不出来
1、xml里把#换成$接收参数,不预编译(比如in查询时,拼装好的ids) 2、可能是映射出错。(resultMap错了或者resultType错了) resultMap可以连续写多个。 3、参数错了,多了符号。比如 需要 id= '87adbdd21e61267ee01' 前端给的id是 '87adbdd21e61267ee01'   所以查询就变成了id= ''87adbdd21e6...
记一次‘mybatis关联查询mysql数据库结果比用sql语句直接查询数据库结果记录条数少的’ 原因排查
技术背景: 项目做读写分离开发,在公司原有的技术架构基础上,数据库实现主从复制,用mybatis来完成只读操作,从而实现读写分离的目的。 遇到问题: mybatis关联查询mysql数据库结果比用sql语句直接查询数据库结果记录条数少 原因排查: 1.首先,用 * 替换了数据库字段名; 2.其次,查询的结果集resultType 替换为 resultMap 结果映射; 处理结果: 还是没有解...
sql语句可以查出来,但是mybatis查不出来,用的是mysql数据库
问题:mybatis查出来的时候,browsingVolume数据为null,但是数据库中却是有数据的原由:数据库的字段名称和参数不对应
Navicat中可以查出数据,但是mybatis查不出来
     今天在写代码的时候突然发现以下的问题:真是让我很是奇怪,就是为什么数据库中有数据,而且我是把控制台打印的sql复制到Navicat中去执行的,所以应该不会存在问题,那么是什么原因,导致代码中查不出来数据呢?     因为是公司的项目,所以我试了下其它的功能发现查询都是有数据的,但是发现那些查询条件不是中文,所以我就开始想,是不是配置文件中没有配置utf-8。 idea控制台打印的sq...
mysql 查询数据不一样的现象
使用mysql数据库,数据一个表大概在400万条左右,有id主键,将一部分select id from detail group by billno, iosort,barcode having count(*)>1 的数据写到表test的id字段,使用下列两个查询语句结果不一样,求问了领导,说是可能内存溢出,使用了left join或者 inner join正常 test表记录数在193万条左
mybatis 一对一查询 出现一条数据总结
mybatis 一对一查询 出现一条数据只查询出来一条数据,而且查询出来的数据与数据库查询出来的数据无法匹配
同样的sql在java项目中查出来是空(mybatis)
在页面上  在执行SQL 前的最后一部将SQL 打印出来看看 一定是页面拼接出现了一些问题 这些问题很可能是单引号  双引号之类的差别 如果是接口调用的时候,参数上不能加引号http://localhost:8080/项目/api/method/oneLevel?type=0eec69acb6314cb685949bc8e64146ab...
MyBaties查询出来的数据比数据库的少
原因:mybaties映射时使用主键判断唯一性,如果查询出来的数据集在映射文件配置中没有设置主键或者主键存在相同的情况下,MyBaties之映射其中一条解决方法:给查询出来的结果加上主键字段,在MyBaties的映射文件中也进行配置...
sql语句能查询出来,mybatis未查询出结果问题解决
1.将mybatis 的sql语句放到数据库中执行,能执行成功,但是运行mybatis的语句就查询不出结果。原因可能是,mybatis连接数据库的配置未添加“?characterEncoding=utf8”,使用中文查询时,传递到数据库就成乱码了,因此匹配不到对应的查询结果。...
一条sql语句查出多个表的数据
select (select count(1) from a) as a,(select count(1) from b) as b
Mybatis中一对多查询只有一条数据问题
Mybatis的mapper.xml中一对多查询结果的问题 问题描述:只能查询出一条数据 xml文件的配置 //&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&amp;gt; &amp;lt;!DOCTYPE mapper PUBLIC &quot;-//mybatis.org//DTD Mapper 3.0//EN&quot; &quot;http://mybatis.org/dtd/mybatis...
关于mysql数据库时间 和查询出来的时间不一致问题
你是不是mysql数据库时间和web程序查出来的时间永远相差几个小时? 你是不是把web程序所有时区都试了?各种cst us等等? 还把数据库各个时区都试了? 原来 还需要把web程序的链接信息serverTimezone=Asia/Shanghai这样设置
深坑——Mybatis联合查询只能查询一条数据
1、原因    如果两表联查,主表和明细表的主键都是id的话,明细表的多条只能查询出来第一条。2、解决办法    https://blog.csdn.net/LoveCarpenter/article/details/60958710     点击打开链接...
Mybatis一对多或多对多只能查出一条数据解决策略
&amp;lt;resultMap id=&quot;menuModelMap&quot; type=&quot;com.yyzq.springboot.model.MenuModel&quot; &amp;gt; &amp;lt;id column=&quot;id&quot; property=&quot;id&quot; jdbcType=&quot;BIGINT&quot; /&amp;gt; &amp;lt;result column=&quot;menuname&quot; prope
奇怪!同一条sql语句在数据库和代码中执行结果不同?!当然是人错了 ……
sql语句就是它:      select count(1) from syscolumns where [id]=object_id( 'tablecommon' )       判断数据库中是否存在表tablecommon,本想让在数据库中查到的值返回到程序里,值却总不是想要的:     程序里返回 -1     sql里返回大于0的值(意为存在该表)
关于使用mybatis发送sql查询结果不准确问题
    有时候会有这么个问题,在数据库能正确查询的语句放到mybatis中查询结果却不一样,把mybatis的发送的sql语句丢到数据库中能出现正确的结果。这种原因的可能性之一就是传递的参数是字符串,并且在mybatis的xml中使用了#{} 这种占位符的形式接收参数,#{}占位符会对接收的string类型自动添加双引号,导致传递的参数到数据库中会变成“参数值”,从而导致结果不正确。笔者还有一次传...
Mybatis 级联查询多条数据,只出最后一条数据问题
在mybatis中查询动态代理,List&amp;lt;T&amp;gt;的id使用配置文件&amp;lt;resultMap&amp;gt;下的&amp;lt;id&amp;gt;也就是主键查询结果为相同时每条数据都会被覆盖(以上为错误主键)解决方法就是使用关系连接表的id作为主键(id)...
Mybatis通过一条SQL查出关联的对象
Mybatis通过一条SQL查出关联的对象 以往在做对象的查询时如果需要把关联的对象一起查出来是通过resultMap的子查询来进行的,这种用法可以参考我之前写的一篇文章http://elim.iteye.com/blog/1337009。通过子查询来进行的关联对象的查询时,Mybatis会重新发起一次数据库请求,这在有的时候性能方面不是特别的好,我们期望可以用一条SQL语句就把主体对象以及关联
jpa+mysql:查询出的记录居然都是同一个entity
在jpa的函数中,我用createNativeQuery执行了一个查询语句,这个查询语句用到了union,并且用到了left join,查询出结果后,却发现记录数目正确,但每条记录居然数据完全一样,进行跟踪,对其执行的查询语句放mysql中进行查询,结果正确,各条记录是各条记录,但是jpa映射到entity后,就变成数目相同的同一条记录了。 后来才发现,因为用union,用left join,在
SQL将查出来的某一条数据置顶
 第一种方法 CASE WHEN beginTime IS NULL       THEN 0 ELSE 1 END SELECT    LEFT(endTime, 10) AS validDate,   beginTime,   endTime,   COUNT(0) AS ticketNum,   ticketType,   ticketState  FROM   t_ticket  WH...
mybatis查不出数据,而在sql中可以实现(数据类型超出范围)
最近遇到,系统页面某一分页没有数据,其他分页没有问题。 控制台显示查询部分数据,而数据库可以显示全部数据 这显示不是映射问题,应该是数据问题。 通过逐一排查,果然,int类型数据超出范围,而且不只一个字段, 过程有点坑,不过找到原因,还是很开心的。
一起ORACLE数据库中数据查询结果不一致问题的排查过程
一、问题描述 在某软件开发项目中,需要在ORACLE数据库中建立十张类型相同的员工信息表tb_employeeinfo0~tb_employeeinfo9,并建立向这十张表中插入数据的存储过程。ORACLE数据库安装在Linux操作系统下。 为了操作上的方便性,开发人员在PL/SQL Developer软件(ORACLE数据库开发软件)上实现了建表和建存储过程的操作。之后,开发人员利用SQL语句
数据库中能查数据,mybatis中查询为空的原因及解决方法
今日编写项目时,发现了mybatis查询操作时部分属性为空值,部分属性查询出来了。    数据库中存在值,也能查询出来。 原因:mapper.xml文件中,查询属性时,命名规范:查询时的属性必须对应java实体类中的属性。因为我的工程师mybatis的逆向工程生成,有的语句为自己手写。所以对应不上。 解决方法: 1.逆向工程中会生成一个resultMap的集合。这个集合是映射了数据库...
sql查询出来的一列多行数据拼接起来
select distinct stuff((select ','+QuestionCategoryName from QuestionCategory t where   QuestionCategoryID in (select QuestionCategoryID from QuestionCategoryRelation where QuestionID=p.QuestionID) 
mybatis ${}导致mysql数据库按照SQL语句执行的和程序执行的结果不一致
今天遇到一个问题,某段执行SQL的程序在我这里运行正常,但是到了到了我同事那里就不正常。我俩连的不是同一个数据库地址,但是数据库的内容是一致的。后来把xml文件里面处理参数的${}换成#{}就正常了,虽然问题解决了但是原因还是不知道。...
mybatis mysql 执行同一条sql 结果不一样!
根据日期条件查询,去掉date_format函数,数据显示正常,原因还不清楚
记录mybatis的一个报错:查询一条的SQL,有多个返回结果。
比如我查询username为liaotian0的单个结果,但是此刻有两条结果,会报错。 看具体情况来解决。
Mybatis中SQL执行结果与MYSQL中执行结果不同的DEBUG
Mybatis中SQL执行结果与MYSQL中执行结果不同的DEBUG 问题描述 在一个SSM架构的J2EE项目开发过程中,发现同一条语句的执行结果与直接在数据库中执行的结果不同: SQL语句(.xml文件): &amp;lt;select id=&quot;queryMapName&quot; resultType=&quot;String&quot;&amp;gt; select name from metadata where me...
oracle 用一条sql语句,查询同一个表用同一个字段的条件查同一个字段的结果
感谢 htl258 Tony 的无私帮助,解决了我数据库的设计缺陷的问题`` oracle数据库 表是这样的 表名:bookuse_book 表字段: DATECREATED DATE 用来记录录入的时间 CONSUMPTION NUMBER 用来记金额 ...
【问题解决】Mybatis一对多/多对多查询时只查出了一条数据
问题描述: 如果三表(包括了关系表)级联查询,主表和明细表的主键都是id的话,明细表的多条数据只能查询出来第一条/最后一条数据。 三个表,权限表(Permission),权限组表(PermissionGroup),权限组与权限的关系表(PermissionPermissionGroupKey) 实体类就不写上来了。 原出错映射文件: <resultMap id="permissionGro
通过数据查询出来的sql不能被修改解决方案
通常我们用一些工具的时候,有时候查出来的数据,都是只读的,通常不能被我们修改。 不多说了,下面是解决方法。 select * from table for update; 在查询语句后面添加一个 for update语句这样就可以了 这个我没有亲自测试过,我看到大牛这样写的,在这里记录一下,如果不能生效或者你们有其他的解决方案,请在下方评论。
mybatis查询多条记录,只返回最后一条
遇到的问题是,如果封装好的select查询语句直接在mysql中运行的话,正确返回list组数但是,当整合到mybatis里面就只能查询其中一条大牛给的提示:需要说明 select的列不需要和对应的resultMap的元素数量一一对应;mybatis使用association 时必须要保证key和association并列,简单来说就是select后面的列很多都可以省但a.m_id, a.s_id...
PLSQL Developer 不同窗口查询数据不一致
问题:运行一个INSERT SQL语句,显示插入成功,在本窗口也能查到数据,在新打开一个SQL窗口就查不到;需要重启PLSQL Developer才可以看得到 解决方法:preferrence->connection->session mode 设置为dual session,那么不论你commit与否,都可以看到数据。 (本解决方法来自CSDN论坛)
解决mybatis的mapper.xml查询不出数据,结果一直为null问题
解决mybatis的mapper.xml查询不出数据,结果一直为null 1.问题   最近使用ssm框架的时候,遇到一个问题,就是mybatis的mapper.xml查询不出数据,mapper中写的sql语句放在数据库里面去查询是能查询到数据,但是mapper中查询时候,返回的结果为null。 我出现的原因是:   数据库字段和实体类之间的名称不相同,导致查询的数据找不到对应的实体映射,...
Bug:数据库的有数据,但是查出来是0
场景: 公司的业务很多方面不成熟导致的数据库设计的时候字段类型有些不统一,导致以下bug的产生 如图数据库的查询结果如下: 但是我查出来的数据总是0.然后就悲剧了,跟代码发现就是很奇怪的现象:把mybatis中sql在sql server中执行是可以的,但是返回的resultmap中的相应字段是0. 查了半天发现,是类型不对应: 数据库中是decimal类型,在java程序中
一样的sql语句,不一样的结果!
今天用程序写了个增删改查,其他还好,查的时候用到了模糊查询,其中字段包含有中文,尽管sql语句正确,就是查不到东西,后来直接在数据库中去尝试,发现,设置GBK时,sql语句可以查询出来数据,设置成utf8时就查询出空值,所以我就对数据库的字符集相关内容做了查询。以下是转载内容:   MySQL对中文的支持程度还是很有限的,尤其是新手,一旦出现乱码问题,就会头大。下面介绍几种乱码问题的现象原
在同一个sql语句中写不同条件的count数量,和查询半年的数据
select department.depName, sum(case  when (helpInfo.infoClass=1) then 1 else 0 end ) "News" ,sum(case  when (helpInfo.infoClass=2) then 1 else 0 end ) "JianBao" ,COUNT(*) "allUsed",sum(case  when (helpInfo.useWeb=1) then 1 else 0 end ) "useweb" ,sum(case 
使用相同的语法、条件,在SQL Sever能够查询出数据,可是在Hibernate的hql语言为啥就查不出来了呢?
在做项目的时候遇到一个非常奇葩的问题,一下是我的代码: // 验证该文件名是否存在 public boolean verifyAppName(String appName, int customerId, int typesName) { String hql = &quot;from CustomerApplication where typeId = '&quot; + typesName + &quot;' a...
文章热词 设计制作学习 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 数据云计算 云计算数据