浏览问题
等待回复
精选文章
申请试用
资源中心
漏洞修复
注册
|
登录
SuperMap技术问答社区
我要
提问
智能客服
首页
/
浏览问题
/
组件GIS
/
问题详情
普通属性表插数据
bocogxc
16EXP
2017年03月08日
我在desktop中新建属性表,我在给数据库插数据时,程序没报错,但是表里面没有数据。
我用for循环插10条数据 recordset.setInt32("smid", i+50); 用这个语句执行的
属性表
1个回答
插了数据要用Recordset.Update 方法 更新一下,如果插入多条数据,用Recordset.Batch 属性实现批量更新
胡林
2
5,985EXP
2017年03月09日
对于属性表,它里面没有地理信息字段,只有smid以及smuserid,我在插入其他字段值的时候程序不报错,但是插不进去。
你好,系统字段是不能操作的,SM开头的就是系统字段,只有SMuserid能够操作
我用Recordset.getGeometry 获取属性表里面的geometry然后在addNew进去就可以了,但是我在插入数据的时候发现会有遗漏,原本应该插入10条数据的,但是只插了8条数据,有时候只插9条数据,代码如下
for (int i = 0; i < 10; i++) {
recordset.addNew(recordset.getGeometry());
recordset.setInt32("SmUserID", i+50);
ecordset.setInt64("roadid", i+50);
recordset.setString("result2", String.valueOf((i+50)));
recordset.setDouble("value", i+50);
recordset.setDateTime("time", getdata("2017/03/07 13:00:11"));
recordset.update();
}
我先测试一下,插数据的时候最好先通过Recordset.IsEOF 属性 判断是否在最后一条记录下面,结合MoveNext方法使用
因为我是给属性表里面插数据,属性表中没有地理数据,所以不存在读行的操作吧
我测试了一下,没有什么问题,你看下我写的代码,我是.net写的
哦,我这边用java写的,感觉插数据的时候不稳定,而且耗时特别长,插10条数据就耗费了1秒,有没有什么可优化的?
数据量大的时候,用Recordset.Batch 属性 批量更新,这样能提高效率,我看你给出的代码,也看不出哪里有问题,不可能存在插数据不稳定的,肯定还是代码哪里有问题
BatchEditor editor = recordset.getBatch();
// 设置批量更新每次提交的记录数目
editor.setMaxRecordCount(10);
editor.begin();
int i=0;
while (!recordset.isEOF()) {
Geometry geometry = recordset.getGeometry();
Map<String,Object> map=new HashMap<String,Object> ();
map.put("roadid", i);
map.put("value", i);
map.put("time", getdata("2017/03/07 13:00:11"));
recordset.addNew(geometry, map);
recordset.moveNext();
i++;
}
// 批量操作统一提交
editor.update();
这个是我按照参考文档的示例代码写的batch代码,但是每次只能插一条数据,
不用movenext,这种情况你自己做断点调试一下,看哪里有问题
你之前不是用的for循环吗,还是用循环试试,你完全按示例代码,也许哪个参数就不对了
你movenext,就把记录移到了最后一行,于是再次判断是否是最后一行的时候,判断为真,就不会再执行里面的语句了,所以只能添加一行记录
recordset.getBatch().setMaxRecordCount(20000);
recordset.getBatch().begin();
for (int i = 20; i < 60000; i++) {
recordset.addNew(recordset.getGeometry());
recordset.setInt32("SmUserID", i);
recordset.setInt64("roadid", i);
recordset.setDouble("value", i);
recordset.setDateTime("time", getdata("2017/03/07 13:00:11"));
}
recordset.getBatch().update();
我换用这个代码就可以了,能插入多条数据了,而且速度也有所提升,但是条数是对上了,可是里面会有重复数据,你遇到过这种情况么、?
重复是随机的还是有规律的
这个代码执行的结果是插入将近6W条数据,在第978条到999条这二十几条数据是每个都多插了一条。
没这个问题啊
这个是我
这个是我把表删完以后,重新插入的数据,这里面也有重复的,总条数的对的
你这个序号字段是什么,SMID才是这个表的主键,应该是SMID自动增长,不是创建的序号这个字段来代替主键的作用
我的代码里面没有给smid赋值,smid是根据recordset.addNew(recordset.getGeometry());这条语句自动生成的,我就只给后面几个字段赋值了,而且用的是i赋值,讲道理应该每个值都只有一个,但是却出现了重复,代码还是我刚刚贴出来的代码
smid本来就是自动增长的,那么SMID应该是1,2,3,4,5这样有顺序的排上去的,怎么你的表smid323115过了又是263115,而且我没在你的代码里看见你是怎么给“序号”这个字段赋值的
不好意思,好像系统有序号这个字段,我忘记了
序号是iDesketop里面自动生成的,不属于表中的字段,在roadid连续的时候smid不连续是不是批量添加的时候出问题了
你组件用的哪个版本,方便的话你直接把你的程序发给我,工程比较大的话你先上传到你的网盘,再把地址链接发给我
对了,你重新建一个空的属性表试一下
或者你直接用组件生成一个属性表再试一试
我用的是8C java版的,我刚试了一下给其他的属性表里面插数据,是连续的,那这个有重复的是什么原因呢?
我猜应该是删除数据的时候破坏了索引,具体的我也不清楚,这种情况不多见,意思是重新建的表就没问题了对吧
对,我在其他的属性表里面插数据的时候是连续的
那这么问题暂时先这样吧
好吧,谢谢你
这样,你把有问题的那个数据集发给我,我能重现问题的话可以报缺陷,我邮箱是hulin@supermap.com
请
登录
或者
注册
后再添加评论。
智能推荐
相关问题
相关文章
推荐教程
如何将已经通过arcgis建好的gdb数据库属性表转化到超图
iDesktop属性表内无法插入新的属性
revit用插件导supermap 不显示模型,属性表没有任何内容
在开发中如何修改数据集为属性表的数据集?
数据库数据源内数据集属性表SMGEOMETRY乱码
数据库数据源内数据集属性表SMGEOMETRY字段类型为什么是Long RAW
如何把数据集的所有字段一次性放到属性表?
矢量数据按照属性表中一列的属性进行分级显示颜色
热门文章
查看更多>
关注我们
超图软件官网
SuperMap Online
地图慧
帮助中心
备案信息
技术资源中心
...