H2 GeoDB和Liquibase:当我读取带有几何的csv文件时出现异常

时间:2015-04-21 12:26:03

标签: java hibernate gis liquibase

您好我正在尝试将带有几何的csv文件读入我的h2数据库但是我从vividsolutions.jts.io.parseException得到一个奇怪的例外:预期的单词但是找到了End-of-Stream。这可能是我失踪的愚蠢行为。 thx提前。

我的csv:

    id,version,aangemaaktdoor,aanmaakdatum,laatstgewijzigddoor,laatstgewijzigdop,code,eigenaar,eigenaar_straat,eigenaar_nummer,eigenaar_bus,eigenaar_postcode,eigenaar_gemeente,straat,nummer,bus,postcode,gemeente,location,operator_id
1,0,Jacob,2013-09-16 19:42:15,Jacob,2014-09-04 05:23:00,ABC123,Dries Mertens,Tiensesteenweg,124,,3010,Leuven,Parkstraat,11,,3000,Leuven,POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10)),1
2,0,Jacob,2013-11-23 11:00:00,Tom,2014-02-06 05:23:00,DEF456,Vincent Kompany,Kasteellaan,7,,1080,Sint-Jans-Molenbeek,Kasteellaan,7,,1080,Sint-Jans-Molenbeek,POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10)),1
3,0,Tom,2013-07-16 14:42:00,Pascal,2014-09-18 14:48:00,KZR478,Jan Vertonghen,Broekstraat,8,,9140,Temse,Hoogkamerstraat,215,,9140,Temse,POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10)),1
4,0,Pascal,2013-11-27 17:00:00,Tom,2014-02-14 05:23:00,LSM145,Marouane Fellaini,Tramstraat,291,,3300,Tienen,Tramstraat,289,,3300,Tienen,POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10)),2
5,0,Pieter,2013-10-08 17:24:00,Tom,2014-09-14 11:54:00,NFK798,Kevin De Bruyne,Burgstraat,38,,9000,Gent,Burgstraat,38,,9000,Gent,POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10)),3
6,0,Jacob,2013-09-16 19:42:15,Jacob,2014-09-04 05:23:00,SDV487,Eden Hazard,Brusselsestraat,35,,9500,Geraardsbergen,Heuvelstraat,27,,9500,Geraardsbergen,POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10)),3
7,0,Jacob,2013-11-23 11:00:00,Tom,2014-02-06 05:23:00,ZAS475,Romelu Lukaku,Hingenesteenweg,133,,2880,Bornem,Hingenesteenweg,133,,2880,Bornem,POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10)),3
8,0,Tom,2013-07-16 14:42:00,Pascal,2014-09-18 14:48:00,MPO148,Steven Defour,Bankstraat,52,,2811,Mechelen,Moensstraat,19,,2800,Mechelen,POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10)),3
9,0,Tom,2013-07-16 14:42:00,Pascal,2014-09-18 14:48:00,MPO148,Axel Witsel,Kruisbaan,102,,3580,Beringen,Stippelberg,144,,2260,Westerlo,POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10)),3

我的liquibase脚本:

<changeSet id="Spatialize DB" author="arno" dbms="h2">

    <sql dbms="h2">CREATE ALIAS InitGeoDB for "geodb.GeoDB.InitGeoDB"</sql>
    <sql dbms="h2">CALL InitGeoDB()</sql>
    <rollback>
        <sql dbms="h2">DROP ALIAS InitGeoDB</sql>
    </rollback>
</changeSet>

 <changeSet id="20150303083400" author="riquipa">

    <createTable tableName="SITE">
        <column name="id" type="bigint" defaultValueSequenceNext="hibernate_sequence">
            <constraints primaryKey="true" nullable="false"/>
        </column>
        <column name="version" type="bigint"/>
        <column name="aangemaaktdoor" type="varchar(255)"/>
        <column name="aanmaakdatum" type="timestamp">
            <constraints nullable="false"/>
        </column>
        <column name="laatstgewijzigddoor" type="varchar(255)"/>
        <column name="laatstgewijzigdop" type="timestamp"/>
        <column name="eigenaar" type="varchar(255)"/>
        <column name="code" type="varchar(255)">
            <constraints nullable="false"/>
        </column>
        <column name="straat" type="varchar(255)"/>
        <column name="nummer" type="varchar(255)"/>
        <column name="bus" type="varchar(255)"/>
        <column name="postcode" type="varchar(255)"/>
        <column name="gemeente" type="varchar(255)"/>
        <column name="eigenaar_straat" type="varchar(255)"/>
        <column name="eigenaar_nummer" type="varchar(255)"/>
        <column name="eigenaar_bus" type="varchar(255)"/>
        <column name="eigenaar_postcode" type="varchar(255)"/>
        <column name="eigenaar_gemeente" type="varchar(255)"/>
        <column name="operator_id" type="bigint">
            <constraints nullable="false"/>
        </column>
    </createTable>

    <addColumn tableName="SITE">
        <column name="location" type="GEOMETRY">
        </column>
    </addColumn>
</changeSet>

我的yml:

spring:
datasource:
    dataSourceClassName: org.h2.jdbcx.JdbcDataSource
    url: jdbc:h2:mem:zendantennes
    databaseName:
    serverName:
    username:
    password:

jpa:
    database-platform: org.hibernate.spatial.dialect.h2geodb.GeoDBDialect
    database: H2
    openInView: false
    show_sql: true
    generate-ddl: false
    hibernate:
        ddl-auto: none
        naming-strategy: org.hibernate.cfg.EJB3NamingStrategy
    properties:
        hibernate.cache.use_second_level_cache: false
        hibernate.cache.use_query_cache: false
        hibernate.generate_statistics: true
        hibernate.hbm2ddl.auto: validate

最后我的测试给出了异常:

@Test
public void createSite(){
    Site site = new Site();
    Adres adres = new Adres();
    adres.setBus("2");
    adres.setGemeente("Schilde");
    adres.setNummer("52");
    adres.setPostcode("2970");
    adres.setStraat("Eksterlaan");
    site.setAdres(adres);
    site.setAdresEigenaar(adres);
    site.setCode("444");
    Coordinate[] points = {new Coordinate(10,20), new Coordinate(20,10), new Coordinate(40,20)};
    Polygon polygon = new Polygon(new LinearRing(new CoordinateArraySequence(points),new GeometryFactory(null, 31370)),null, new GeometryFactory(null, 31370));
    polygon.setSRID(31370);
    site.setLocation(polygon);
    site.setEigenaar("proximus");


    entiteitService.createOrUpdate(site);
}

输出是:

 Caused by: org.h2.jdbc.JdbcSQLException: General error: "com.vividsolutions.jts.io.ParseException: Expected word but found End-of-Stream (line 1)"; SQL statement:
INSERT INTO PUBLIC.site (id, version, aangemaaktdoor, aanmaakdatum, laatstgewijzigddoor, laatstgewijzigdop, code, eigenaar, eigenaar_straat, eigenaar_nummer, eigenaar_bus, eigenaar_postcode, eigenaar_gemeente, straat, nummer, bus, postcode, gemeente, location, operator_id) VALUES ('1', '0', 'Jacob', '2013-09-16 19:42:15', 'Jacob', '2014-09-04 05:23:00', 'ABC123', 'Dries Mertens', 'Tiensesteenweg', '124', '', '3010', 'Leuven', 'Parkstraat', '11', '', '3000', 'Leuven', 'POLYGON ((30 10', ' 40 40') -- ('1', '0', 'Jacob', '2013-09-16 19:42:15', 'Jacob', '2014-09-04 05:23:00', 'ABC123', 'Dries Mertens', 'Tiensesteenweg', '124', '', '3010', 'Leuven', 'Parkstraat', '11', '', '3000', 'Leuven', 'POLYGON ((30 10', ' 40 40') [50000-176]
    at org.h2.message.DbException.getJdbcSQLException(DbException.java:344)
    at org.h2.message.DbException.get(DbException.java:167)
    at org.h2.message.DbException.convert(DbException.java:294)
    at org.h2.value.ValueGeometry.get(ValueGeometry.java:106)
    at org.h2.value.Value.convertTo(Value.java:897)
    at org.h2.table.Column.convert(Column.java:151)
    at org.h2.command.dml.Insert.insertRows(Insert.java:144)
    at org.h2.command.dml.Insert.update(Insert.java:115)
    at org.h2.command.CommandContainer.update(CommandContainer.java:79)
    at org.h2.command.Command.executeUpdate(Command.java:254)
    at org.h2.jdbc.JdbcStatement.executeInternal(JdbcStatement.java:186)
    at org.h2.jdbc.JdbcStatement.execute(JdbcStatement.java:160)
    at com.zaxxer.hikari.proxy.StatementJavassistProxy.execute(StatementJavassistProxy.java)
    at liquibase.executor.jvm.JdbcExecutor$ExecuteStatementCallback.doInStatement(JdbcExecutor.java:294)
    at liquibase.executor.jvm.JdbcExecutor.execute(JdbcExecutor.java:54)
    ... 56 more
Caused by: com.vividsolutions.jts.io.ParseException: Expected word but found End-of-Stream (line 1)
    at com.vividsolutions.jts.io.WKTReader.parseErrorWithLine(WKTReader.java:427)
    at com.vividsolutions.jts.io.WKTReader.parseErrorExpected(WKTReader.java:421)
    at com.vividsolutions.jts.io.WKTReader.getNextWord(WKTReader.java:384)
    at com.vividsolutions.jts.io.WKTReader.getNextCloserOrComma(WKTReader.java:335)
    at com.vividsolutions.jts.io.WKTReader.getCoordinates(WKTReader.java:231)
    at com.vividsolutions.jts.io.WKTReader.readLinearRingText(WKTReader.java:549)
    at com.vividsolutions.jts.io.WKTReader.readPolygonText(WKTReader.java:635)
    at com.vividsolutions.jts.io.WKTReader.readGeometryTaggedText(WKTReader.java:481)
    at com.vividsolutions.jts.io.WKTReader.read(WKTReader.java:205)
    at com.vividsolutions.jts.io.WKTReader.read(WKTReader.java:174)
    at org.h2.value.ValueGeometry.get(ValueGeometry.java:103)
    ... 67 more

0 个答案:

没有答案