ArcGIS提供的API說明:
上面可以看出來,ArcGIS提供了兩種方式的數據庫連接,一種是直連,一種是服務連接。
連接數據庫代碼:
package test;
import java.net.MalformedURLException;
import java.sql.Blob;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.esri.sde.sdk.client.SeConnection;
import com.esri.sde.sdk.client.SeException;
import com.esri.sde.sdk.client.SeLayer;
import com.esri.sde.sdk.client.SeQuery;
import com.esri.sde.sdk.client.SeRow;
import com.esri.sde.sdk.client.SeShape;
import com.esri.sde.sdk.client.SeSqlConstruct;
import com.esri.sde.sdk.geom.Point;
import db.DBConnectionCreater;
import net.sf.json.JSONArray;
import util.PropertiesUtil;
import entity.TaxiInfoBean;
public class sdetest {
public JSONArray getLocation(){
String server=PropertiesUtil.getProperties("Database", "SDEserver");
String instance=PropertiesUtil.getProperties("Database", "SDEinstance");
String database=PropertiesUtil.getProperties("Database", "SDEdatabase");
String user=PropertiesUtil.getProperties("Database", "SDEuser");
String password=PropertiesUtil.getProperties("Database", "SDEpassword");
SeConnection seconn=null;
SeQuery query=null;
SeRow row=null;
try {
seconn=new SeConnection(server,instance,database,user,password);//第一步,連接數據庫
SeLayer layerzrq = new SeLayer(seconn, "ZDDX_TAXI", "SHAPE");
String layernamezrq = layerzrq.getName();
SeSqlConstruct sqlConstruct = new SeSqlConstruct(layernamezrq);//第二步,生成sql
sqlConstruct.setWhere("class=5 or class=7");//第三步,設置條件
String[] cols = new String[2];
cols[0] = new String("NAME");
// cols[1] = layerzrq.getSpatialColumn();
cols[1] = new String("SHAPE");
query = new SeQuery(seconn,cols,sqlConstruct);//第四步,查詢
query.prepareQuery();
query.execute();
row = query.fetch();//第五步,取值
SeShape shape=null;
double x,y;
while (row!=null) {
// shape = row.getShape(1).
// double x = row.getShape(1).asPoint().generateLabelPoint().getX();//取點座標
// double y = row.getShape(1).asPoint().generateLabelPoint().getY();
double[][][] coor = row.getShape(1).getAllCoords();//對於任意形狀(點,線,面)三種數據,取座標
x = coor[0][0][0];
x = coor[0][0][1];
String name = row.getString(0);
row = query.fetch();
// System.out.println(x+","+y);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally{
try {
query.close();//關閉查詢
seconn.close();//關閉連接
} catch (SeException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return null;
}
}
直連和服務連接的區別主要在於instance這個字符串的不同,如果是5151,那麼就是服務連接,如果是sde:oracle11g:orcl這樣的,就是直連。
可以參考:
ArcGIS Engine 10.1 相關新功能(SDE連接,LAS數據,打包,REST服務訪問)
1,服務連接的方式
http://blog.csdn.net/linghe301/article/details/38980431
示例:
其中Database.properties內容是:
SDEserver=192.168.106.109
SDEinstance=5151
SDEdatabase=orcl
SDEuser=sde
SDEpassword=ltskwebgis
2,直連模式
SDEserver=192.168.106.109
SDEinstance=sde:oracle11g:orcl
SDEdatabase=
SDEuser=sde
SDEpassword=ltskwebgis
從ArcGIS Engin 10開始sde開始默認爲直連模式,這樣連接速度更高效。
直連方式的主要優勢:
A.直連方式較服務連接方式卸載了20%-40%的負載;
B.直連方式降低了服務器端內存的需求;
C.直連方式處理速度更快,在客戶機上執行處理;
D.不需要安裝ArcSDE軟件。