首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >地理工具-使用JDBCDataStore插入新SimpleFeature时是否可以跳过列

问地理工具-使用JDBCDataStore插入新SimpleFeature时是否可以跳过列
EN

Stack Overflow用户
提问于 2021-10-07 20:23:27
回答 1查看 32关注 0票数 0

在我们的应用程序(Java,Geotools 25,PostGIS)中,我们有一些表单,用户可以在其中输入一些数据,这些数据将用于创建新的特征。在数据库(PostGIS)中,列的数量超过了字段的数量,因此一些列将为空。对于这些“空”列中的一些,在数据库中定义了默认值。然而,Geotools似乎总是为这些列插入null。

在代码中,我有一个SimpleFeatureStore,并根据用户输入创建一个SimpleFeature。当我插入新特性(store.addFeatures())时,由Geotools创建的最后一个SQL是一个INSERT INTO语句,它包含所有列的null值,这些列不是“在表单中”,但同样,其中一些列在数据库中具有默认值。由于Geotools显式地将该值设置为null,因此从不使用默认值。

是否有修复或解决方法可以尝试解决此问题,以便在未提供任何值时让DB插入默认值?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-08 13:13:55

DataUtilities类提供了一个defaultValues(SimpleFeatureType )方法,您可以调用该方法来获取在PropertyDescriptor中定义的值(尽管默认情况下该值为空)。您可以为SimpleFeatureType中的任何或所有属性定义默认值。

我会使用一些代码,比如:

代码语言:javascript
复制
SimpleFeatureTypeBuilder sftb = new SimpleFeatureTypeBuilder();
sftb.setName("test");
sftb.add("id", Integer.class);
sftb.defaultValue("String");
sftb.add("desc", String.class);
SimpleFeatureType schema = sftb.buildFeatureType();
SimpleFeatureBuilder sfb = new SimpleFeatureBuilder(schema);
sfb.addAll(DataUtilities.defaultValues(schema));
sfb.set("id", 23);
SimpleFeature f = sfb.buildFeature("test.1");
System.out.println(f);

这会产生如下的特性:

代码语言:javascript
复制
SimpleFeatureImpl:test=[SimpleFeatureImpl.Attribute: id<id id=test.1>=23,
 SimpleFeatureImpl.Attribute: desc<desc id=test.1>=String]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69487418

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档