--sunfruit
??? Oracle的空間數據庫的操作驅動更新了,新的驅動適用于Oracle8.0或以上,新驅動在對數據庫的操作上面和原有的驅動差別比較大,不過有一點:使用變得簡單了
??? 建立空間數據庫和建立空間索引的步驟就略過了,那些網上有很多例子,而且實現方式上面也沒有變化,下面列出查詢空間數據庫記錄的代碼:
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import oracle.spatial.geometry.JGeometry;
import java.sql.PreparedStatement;
import oracle.sql.STRUCT;
import java.sql.Connection;
/**
?* <p>Title: </p>
?*
?* <p>Description: </p>
?*
?* <p>Copyright: Copyright (c) 2006</p>
?*
?* <p>Company: </p>
?*
?* @author?sunfruit
?* @version 1.0
?*/
public class SdoSelect {
? public SdoSelect() {
? }
? public static void main(String[] args) {
??? String driver = "oracle.jdbc.driver.OracleDriver";
??? String url = "jdbc:oracle:thin:@172.16.75.200:1521:starmap";
??? String uid = "hmbst";
??? String psw = "hmbst";
??? Connection conn = null;
??? PreparedStatement ps=null;
??? try {
????? Class.forName(driver);
????? conn = DriverManager.getConnection(url, uid, psw);
????? JGeometry jGeometry=new JGeometry(41884696,14377039,42884696,14477039,0);
????? STRUCT obj =jGeometry.store(jGeometry,conn);
????? String sql = "SELECT * FROM POISDO p WHERE sdo_filter(p.gshape,?,'querytype=window')='TRUE'";
????? ps = conn.prepareStatement(sql,ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
????? ps.clearParameters();
????? ps.setObject(1, obj);
????? // 插入點地物記錄
????? ResultSet rs=ps.executeQuery();
????? while(rs.next())
????? {
??????? STRUCT st = (oracle.sql.STRUCT)rs.getObject("gshape");
??????? JGeometry j_geom = JGeometry.load(st);
??????? double[] dou=j_geom.getPoint();
??????? String buff="";
??????? for(int i=0;i<dou.length;i++)
??????? {
????????? buff=buff+String.valueOf((int)dou[i])+"?? ";
??????? }
??????? System.out.println(buff);
????? }
??? }
??? catch (Exception ex) {
????? ex.printStackTrace();
??? }
??? finally
??? {
????? if(conn!=null)
????? {
??????? try {
????????? conn.close();
??????? }
??????? catch (SQLException ex) {
????????? ex.printStackTrace();
??????? }
????? }
????? if(ps!=null)
????? {
??????? try {
????????? ps.close();
??????? }
??????? catch (SQLException ex) {
????????? ex.printStackTrace();
??????? }
????? }
??? }
? }
}
表POISDO的結構如下
create table poi (
? id?INTEGER,
??gname?VARCHAR2(256),
??gshape?MDSYS.SDO_GEOMETRY);