Condividi tramite


Esempio di tipi di dati spaziali

Scaricare il driver JDBC

Questa applicazione di esempio di Microsoft JDBC Driver per SQL Server mostra come creare, inserire e recuperare tipi di dati spaziali (Geometry e Geography).

Il file di codice per questo esempio è denominato SpatialDataTypes.java e si trova nella seguente posizione:

\<installation directory>\sqljdbc_<version>\<language>\samples\datatypes

Requisiti

Per eseguire questa applicazione di esempio, è necessario impostare il classpath in modo da includere il file con estensione jar mssql-jdbc. Per altre informazioni su come impostare il classpath, vedere Uso del driver JDBC.

Nota

Microsoft JDBC Driver per SQL Server fornisce i file di libreria di classi mssql-jdbc da usare a seconda delle impostazioni preferite di Java Runtime Environment (JRE). Per altre informazioni su quale file JAR scegliere, vedere Requisiti di sistema per il driver JDBC.

Esempio

Nell'esempio seguente il codice di esempio crea una tabella denominata SpatialDataTypesTable_JDBC_Sample che contiene le colonne 'Geometry' e 'Geography'.

Nell'esempio vengono prima creati gli oggetti 'Geometry' e 'Geography' da un WKT (Well-Known-Text) che rappresenta un punto. Viene usata una SQLServerPreparedStatement con una query con parametri per eseguire il mapping dei dati a ogni colonna.

Infine, l'esempio inserisce i dati nella tabella e li recupera. I dati vengono visualizzati sotto forma di WKT.

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import com.microsoft.sqlserver.jdbc.Geography;
import com.microsoft.sqlserver.jdbc.Geometry;
import com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement;
import com.microsoft.sqlserver.jdbc.SQLServerResultSet;

public class SpatialDataTypes {

    private static String tableName = "SpatialDataTypesTable_JDBC_Sample";

    public static void main(String[] args) {

        // Create a variable for the connection string.
        String connectionUrl = "jdbc:sqlserver://<server>:<port>;encrypt=true;databaseName=<database>;user=<user>;password=<password>";
        // Establish the connection.
        try (Connection con = DriverManager.getConnection(connectionUrl); Statement stmt = con.createStatement();) {
            dropAndCreateTable(stmt);

            // TODO: Implement Sample code
            String geoWKT = "POINT(3 40 5 6)";
            Geometry geomWKT = Geometry.STGeomFromText(geoWKT, 0);
            Geography geogWKT = Geography.STGeomFromText(geoWKT, 4326);

            try (SQLServerPreparedStatement pstmt = (SQLServerPreparedStatement) con
                    .prepareStatement("insert into " + tableName + " values (?, ?)");) {
                pstmt.setGeometry(1, geomWKT);
                pstmt.setGeography(2, geogWKT);
                pstmt.execute();

                SQLServerResultSet rs = (SQLServerResultSet) stmt.executeQuery("select * from " + tableName);
                rs.next();

                System.out.println("Geometry data: " + rs.getGeometry(1));
                System.out.println("Geography data: " + rs.getGeography(2));
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private static void dropAndCreateTable(Statement stmt) throws SQLException {
        stmt.executeUpdate("if object_id('" + tableName + "','U') is not null" + " drop table " + tableName);

        stmt.executeUpdate("Create table " + tableName + " (c1 geometry, c2 geography)");
    }
}

Vedi anche

Utilizzo dei tipi di dati JDBC