字段 "shape" 的类型为 st_geometry, 但表达式的类型为 geometry
时间: 2024-05-12 07:13:38 浏览: 10
在PostgreSQL中,`geometry`和`st_geometry`是两种不同的数据类型。`geometry`是PostGIS的默认几何数据类型,而`st_geometry`是PostGIS的扩展类型,它支持更多的几何类型和操作。
如果你的表中的几何字段的数据类型为`st_geometry`,则你需要确保你的表达式也返回`st_geometry`类型。如果你的表达式返回`geometry`类型,则需要使用`ST_GeomFromText()`等函数将其转换为`st_geometry`类型,例如:
```sql
SELECT ST_Intersects(mytable.geom, ST_GeomFromText('POINT(1 2)', mytable.geom)) FROM mytable;
```
这个例子中,`ST_GeomFromText()`将文本表示的几何对象转换为`st_geometry`类型,以便与表中的`st_geometry`字段进行比较。
相关问题
st_geometry.so库文件 arm架构
要获取arm架构的st_geometry.so库文件,你需要先确定你的设备的CPU架构类型。可以通过在终端中运行以下命令来查看:
```
adb shell getprop ro.product.cpu.abi
```
如果输出结果中包含arm,则你的设备使用的是arm架构。
然后,你可以从安装了Oracle Spatial and Graph的Oracle数据库中获取该库文件。库文件的默认路径为$ORACLE_HOME/lib,其中$ORACLE_HOME是Oracle数据库的安装路径。
你可以使用以下命令将库文件从Oracle数据库中复制到你的设备中:
```
adb pull $ORACLE_HOME/lib/st_geometry.so /path/to/local/folder
```
注意,你需要使用你的Oracle数据库的实际安装路径替换$ORACLE_HOME,并将/path/to/local/folder替换为本地文件夹的路径,用于保存复制的库文件。
达梦数据库带"sysgeo"."ST_GEOMETRY"jpa,用java.sql.Struct接收赋值
您可以使用以下代码来使用Java的java.sql.Struct类型接收赋值达梦数据库中"sysgeo"."ST_GEOMETRY"类型数据:
```java
// 假设您已经建立数据库连接并获取了Connection对象 conn
// 创建一个CallableStatement对象
CallableStatement stmt = conn.prepareCall("{? = call sysgeo.ST_GEOMETRY_TYPE(?)}");
// 设置输入参数
stmt.setLong(2, id); // 将ST_GEOMETRY对象的ID设置为参数值
// 注册输出参数
stmt.registerOutParameter(1, Types.STRUCT, "SYS.ST_GEOMETRY_TYPE"); // 注册输出参数,类型为STRUCT
// 执行存储过程
stmt.execute();
// 获取输出参数
Struct struct = (Struct) stmt.getObject(1);
// 将输出参数转换为ST_GEOMETRY对象
ST_Geometry stGeometry = new ST_Geometry(struct);
// 关闭Statement对象
stmt.close();
```
注意:上述代码中的ST_Geometry类是您自己定义的类,用于封装"sysgeo"."ST_GEOMETRY"类型的数据。您需要根据"sysgeo"."ST_GEOMETRY"类型的结构定义ST_Geometry类的属性、方法等。