2

我创建了一个结构来存储空间类型,并创建了一个扫描函数来帮助查询数据库中的行。我在插入这种类型时遇到问题。

我可以使用以下 sql 插入数据;

INSERT INTO 'table' ('spot') VALUES (GeomFromText('POINT(10 10)'));

如果我在database/sql/driver中使用 Value 接口;

类型值接口{}

价值是司机必须能够处理的价值。它要么是 nil,要么是以下类型之一的实例:

整数64

浮动64

布尔

[]字节

除了 Rows.Next 之外的所有地方的字符串 [*]。

时间.时间

并使用此代码;

func (p Point) Value() (driver.Value, error) {
    return "GeomFromText('" + p.ToWKT() + "')", nil
}

我最终得到以下进入数据库的 sql 语句;

INSERT INTO 'table' ('spot') VALUES ('GeomFromText('POINT(10 10)')');

问题是函数GeomFromText用引号引起来。有没有办法避免这种情况?我正在使用 gorm 并试图将原始 sql 查询保持在最低限度。

在数据库端使用的 mysql 类型是一个

4

1 回答 1

1

请查看以下两个网址

架构

-- http://howto-use-mysql-spatial-ext.blogspot.com/

create table Points
(   id int auto_increment primary key,
    name VARCHAR(20) not null, 
    location Point NOT NULL, 
    description VARCHAR(200) not null, 
    SPATIAL INDEX(location),
    key(name)
)engine=MyISAM; -- for use of spatial indexes and avoiding error 1464

-- insert a row, so we can prove Update later will work
INSERT INTO Points (name, location, description) VALUES 
( 'point1' , GeomFromText( ' POINT(31.5 42.2) ' ) , 'some place');

更新声明

-- concept borrowed from http://stackoverflow.com/a/7135890
UPDATE Points 
set location = PointFromText(CONCAT('POINT(',13.33,' ',26.48,')'))
where id=1;

核实

select * from points;

(当您打开值编辑器查看 blob 时,点已更新)

所以,要点是玩concat()更新语句的内部。

于 2015-12-11T23:48:28.213 回答