2017-02-26 66 views
0

我想更新具有Geometry數據類型的表列中的數據。我有一個GIS webservice,它返回帶有X和Y值的JSON響應。我已經從JSON中檢索這些值以及其他字符串和Int數據類型列所需的其他值。應用程序內的Java代碼工作正常,但我的問題是如何「更新」數據類型爲「幾何」的數據。如何使用preparedstatement更新SQL Server列中的「Geometry」列中的數據

在數據庫中有一些採樣數據,格式爲「0x346C0000010CFFC7C50034B01B41BC2D52FF8F660941」。我不知道如何使用預處理來設置這種格式的X數據。任何見解或建議都將有所幫助。

我知道如何查詢和轉換這些數據後做了一些研究,如下,但不知道我的程序將做什麼。

SELECT Shape.STX as x ,Shape.STY as y from Test 
WHERE ID=14082 

UPDATE

"Insert INTO Test(column1, Column2, Column3, Column4, geom) 
    VALUES (?, ?, ?, ?,ST_GeomFromText(?, 2100));" 

pst.setString(5,"POINT("+lat+" "+log+")"); 

我發現這個解決方案,但現在我不知道什麼是 「2100」 在上面的查詢手段。也許這是錯誤的,我現在沒有設置,但如果我找到更新查詢的任何解決方案,將更新此帖子。與此同時,如果任何人有任何解決方案隨時更新帖子。

+0

找到東西用「STPointFromText」是正確的方向? – user3384231

+0

我可以對「STPointFromText」使用標準JDBC驅動程序嗎?有沒有其他方法可以使用標準JDBC驅動程序,如果我不能使用此方法,它將執行與ST_GeomFromText相同的結果。 – user3384231

回答

1

這裏是你如何插入和檢索空間數據。 HTH。


插入和SQL Server中檢索空間數據:

空間數據主要採用2種的數據類型:

  1. 幾何 - 用於2D上平坦的表面。
  2. 地理 - 適用於全球/圓形表面的3d。

所有空間數據都存儲在x-y座標中。爲了處理空間數據,DML語句使用以字符串形式(在「引號」內)寫入的空間函數,正如它們以WKT(知名文本)格式(例如,已知文本)格式一樣。 'POINT(5 3)'(注意:WKT是用於表示矢量幾何對象的文本標記語言)。以下是一些常見的功能:(有關詳細的說明請參考MSDN):

數據插入

以下功能的INSERT語句中使用。例如

INSERT INTO Tbl1 (mySpatialColumn) Values ('LineString(-1 -2, 6 7))

• '點(INT X INT Y)':0的三維物體或只是一個點。

• '線段形式(X1 Y1,X2 Y2,X ..ÿ..)' enter image description here

• 'CircularString(X1 Y1,X2 Y2,X ..ÿ..)' enter image description here

•'CompoundCurve(x1 y1,x2 y2,x .. y ..)」 enter image description here

• '多邊形(X1 Y1,X2 Y2,X ..ÿ..)' enter image description here

• 'CurvePolygon(X1 Y1,X2 Y2,X ..ÿ..)'

• '多點':多個點的一個集合,例如: '多點((2 3),(7 8 9.5))'

•「MULTILINESTRING((X1 Y1,X .. ..ÿ ),(x1 y1,x .. y ..))':多行,例如:'MultiLineString((1 1,3 5),(-5 3,-8 -2))' enter image description here'MultiPolygon((x1 y1,x .. y ..),(x1 y1,x .. y ..))':多個多邊形的集合。 enter image description here

數據檢索:

以下功能可以在SELECT語句中使用。例如:

SELECT mySpatialCol.ToSting(), mySpatialCol.AsGml() FROM Tbl1; 

•的ToString():顯示的結果相同的格式,即最初插入與參數值(而不是十六進制值)的源函數,例如:colName.ToString()將顯示: LineString(0 0,7 8)。 •.AsGml():以GML/XML格式(而不是返回十六進制或源函數)轉換並返回值,例如:對於線段形式()值 - colName.AsGml()將返回:

<LineString xmlns="www.example.com/gml"><posList>0 0 7 8</posList></LineString> 

注:在SSMS(Management Studio中),您可以查看檢索結果既可以作爲數據本身(這是十六進制值),也可以查看空間結果即形狀/圖(見下例):

enter image description here

+0

感謝Eddie的一些注意事項......但是你是否知道我是否可以使用POINT和普通的SQL Server JDBC驅動程序?或者我需要一些其他jdbc驅動程序的POINT? – user3384231

+0

嗨,您不需要特定的JDBC驅動程序即可使用SQL Server的任何Spatial功能(自Sql Server 2012以來一直存在)。只要可以從Java代碼連接到dbms,就應該可以使用POINT()函數。 AFAIK,它將被SQL引擎(而不是JVM)處理。 –

+0

我正在使用的SQL服務器是2008 .....這就是爲什麼我不能確定我發佈的查詢是否會用我的Java代碼工作。你對我在sql server 2008中需要做什麼有所瞭解嗎? – user3384231