sql >> Databasteknik >  >> RDS >> Oracle

Nytt fel i vårstart 2.3.0.RELEASE:UnsatisfiedDependencyException för Oracle 12.2.0.1 jdbcdriver men inte med mysql jdbcdriver

JDBC-drivrutinen fungerar bra.

Som du redan har lärt dig i kommentarerna är problemet att

a) Spring Data JDBC kräver nu en Dialect för varje databas

b) Spring Data JDBC levereras inte med en Dialect för Oracle.

Lösningen:

Som beskrivs i Spring Data JDBC Firebird dialekt inte igenkänd och i https://spring .io/blog/2020/05/20/migrating-to-spring-data-jdbc-2-0 du måste ange din egen Dialect implementering just nu.

Något sådant här borde fungera:

class MyOracleDialect extends AnsiDialect {

    private static final LimitClause LIMIT_CLAUSE = new LimitClause() {

        @Override
        public String getLimit(long limit) {
            return String.format("FETCH NEXT %d ROWS ONLY", limit);
        }

        @Override
        public String getOffset(long offset) {
            return String.format("OFFSET %d ROWS", offset);
        }

        @Override
        public String getLimitOffset(long limit, long offset) {
            return String.format("OFFSET %d ROWS FETCH NEXT %d ROWS ONLY", offset, limit);
        }

        @Override
        public Position getClausePosition() {
            return Position.AFTER_ORDER_BY;
        }
    };

    @Override
    public LimitClause limit() {
        return LIMIT_CLAUSE;
    }

}

Du måste sedan göra Dialect tillgänglig via en DialectProvider som beskrivs i den refererade Stackoverflow-frågan:

Lite bakgrund:

Hittills har Spring Data-teamet inte kört sina integrationstester med en Oracle-databas. Detta beror på att det under en lång tid var oklart hur man gör det på ett lagligt sätt eftersom all kod inklusive bygginfrastrukturen var öppen källkod och Oracle krävde godtagande av alla typer av saker för att använda en databasinstans eller deras drivrutin.

Nu finns docker-bilder tillgängliga för testning och JDBC-drivrutinen är tillgänglig från Maven Central. Det är fortfarande lite knepigt eftersom de nuvarande alternativen för dockningsbilder som jag är medveten om låter dig välja mellan en bildstorlek på många GB eller en starttid på cirka 15 minuter.

Hur som helst finns det en gruppmedlem som arbetar med problemet:https://jira.spring.io/ bläddra/DATAJDBC-256

Jag är därför övertygad om att vi kommer att kunna stödja Oracle fullt ut inom en snar framtid.



  1. Mysql infoga i 2 tabeller

  2. SQLite Välj Distinct

  3. Hur får man ett float-resultat genom att dividera två heltalsvärden med T-SQL?

  4. kolumnordning i SELECT *-satsen - garanterat?