You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by al...@apache.org on 2023/04/13 15:17:41 UTC

[camel-quarkus] branch main updated: Ref#4596 Cover different db types for jdbc

This is an automated email from the ASF dual-hosted git repository.

aldettinger pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel-quarkus.git


The following commit(s) were added to refs/heads/main by this push:
     new bcfe8e0e92 Ref#4596 Cover different db types for jdbc
bcfe8e0e92 is described below

commit bcfe8e0e92f5e8f81abe93de48aec26c93bdd8fb
Author: Lucia Drozdova <ld...@redhat.com>
AuthorDate: Thu Apr 6 14:57:04 2023 +0200

    Ref#4596 Cover different db types for jdbc
---
 integration-tests/jdbc/README.adoc                 |  26 +++++
 integration-tests/jdbc/pom.xml                     |  16 +--
 .../quarkus/component/jdbc/CamelResource.java      | 116 ++++++++++++++++-----
 .../camel/quarkus/component/jdbc/JdbcRoutes.java   |  28 +++--
 .../jdbc/src/main/resources/application.properties |   7 +-
 .../jdbc/src/main/resources/sql/db2.sql            |  20 ++++
 .../jdbc/src/main/resources/sql/derby.sql          |  20 ++++
 .../jdbc/src/main/resources/sql/droptables.sql     |  20 ++++
 .../jdbc/src/main/resources/sql/h2.sql             |  20 ++++
 .../jdbc/src/main/resources/sql/inserts.sql        |  22 ++++
 .../jdbc/src/main/resources/sql/mariadb.sql        |  20 ++++
 .../jdbc/src/main/resources/sql/mssql.sql          |  20 ++++
 .../jdbc/src/main/resources/sql/mysql.sql          |  20 ++++
 .../jdbc/src/main/resources/sql/oracle.sql         |  20 ++++
 .../jdbc/src/main/resources/sql/postgresql.sql     |  20 ++++
 .../quarkus/component/jdbc/CamelJdbcTest.java      |  73 ++++++-------
 16 files changed, 387 insertions(+), 81 deletions(-)

diff --git a/integration-tests/jdbc/README.adoc b/integration-tests/jdbc/README.adoc
new file mode 100644
index 0000000000..76b30862b5
--- /dev/null
+++ b/integration-tests/jdbc/README.adoc
@@ -0,0 +1,26 @@
+== JDBC integration tests
+
+=== Default database type
+
+When the tests are executed without any special configuration, dev-service `H2` database is used (more details will follow).
+
+=== Dev-service databases
+
+As is described  in the https://quarkus.io/guides/datasource#dev-services[documentation], several database types could be started in dev-service mode.
+Running the tests against a database in dev-service mode could be achieved by addition of build property `cq.jdbcKind`. Example of usage:
+
+`mvn clean test -f integration-tests/jdbc/ -Dcq.jdbcKind=postgresql`
+
+Following databases could be started in the dev-service mode:
+
+- Postgresql (container) - add `-Dcq.jdbcKind=postgresql`
+- MySQL (container) - add `-Dcq.jdbcKind=mysql`
+- MariaDB (container) - add `-Dcq.jdbcKind=mariadb`
+- H2 (in-process) used by default
+- Apache Derby (in-process) - add `-Dcq.jdbcKind=derby`
+- DB2 (container) (requires license acceptance) - add `-Dcq.jdbcKind=db2`
+- MSSQL (container) (requires license acceptance) - add `-Dcq.jdbcKind=mssql`
+- Oracle (container) - add `-Dcq.jdbcKind=oracle`
+
+For more information about dev-service mode, see https://quarkus.io/guides/datasource#dev-services[documentation].
+
diff --git a/integration-tests/jdbc/pom.xml b/integration-tests/jdbc/pom.xml
index 1194478d0b..e6352b9c22 100644
--- a/integration-tests/jdbc/pom.xml
+++ b/integration-tests/jdbc/pom.xml
@@ -31,6 +31,10 @@
     <name>Camel Quarkus :: Integration Tests :: JDBC</name>
     <description>Integration tests for Camel JDBC extension</description>
 
+    <properties>
+        <cq.jdbcKind>h2</cq.jdbcKind>
+    </properties>
+
     <dependencies>
         <dependency>
             <groupId>org.apache.camel.quarkus</groupId>
@@ -54,7 +58,7 @@
         </dependency>
         <dependency>
             <groupId>io.quarkus</groupId>
-            <artifactId>quarkus-jdbc-h2</artifactId>
+            <artifactId>quarkus-jdbc-${cq.jdbcKind}</artifactId>
         </dependency>
         <dependency>
             <groupId>org.apache.camel.quarkus</groupId>
@@ -75,11 +79,6 @@
             <artifactId>quarkus-junit5</artifactId>
             <scope>test</scope>
         </dependency>
-        <dependency>
-            <groupId>io.quarkus</groupId>
-            <artifactId>quarkus-test-h2</artifactId>
-            <scope>test</scope>
-        </dependency>
         <dependency>
             <groupId>io.rest-assured</groupId>
             <artifactId>rest-assured</artifactId>
@@ -117,6 +116,11 @@
                                 </goals>
                             </execution>
                         </executions>
+                        <configuration>
+                            <systemPropertyVariables>
+                                <quarkus.test.arg-line>-Dcq.jdbcKind=${cq.jdbcKind}</quarkus.test.arg-line>
+                            </systemPropertyVariables>
+                        </configuration>
                     </plugin>
                 </plugins>
             </build>
diff --git a/integration-tests/jdbc/src/main/java/org/apache/camel/quarkus/component/jdbc/CamelResource.java b/integration-tests/jdbc/src/main/java/org/apache/camel/quarkus/component/jdbc/CamelResource.java
index 68d7258e40..04a8205c45 100644
--- a/integration-tests/jdbc/src/main/java/org/apache/camel/quarkus/component/jdbc/CamelResource.java
+++ b/integration-tests/jdbc/src/main/java/org/apache/camel/quarkus/component/jdbc/CamelResource.java
@@ -16,7 +16,12 @@
  */
 package org.apache.camel.quarkus.component.jdbc;
 
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
 import java.sql.Connection;
+import java.sql.SQLException;
 import java.sql.Statement;
 import java.util.ArrayList;
 import java.util.LinkedHashMap;
@@ -39,12 +44,16 @@ import org.apache.camel.CamelContext;
 import org.apache.camel.ProducerTemplate;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.quarkus.component.jdbc.model.Camel;
+import org.eclipse.microprofile.config.inject.ConfigProperty;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 @Path("/test")
 @ApplicationScoped
 public class CamelResource {
+    private static final Logger LOGGER = LoggerFactory.getLogger(CamelResource.class);
     @Inject
-    @DataSource("camel-ds")
+    @DataSource("cameldb")
     AgroalDataSource dataSource;
 
     @Inject
@@ -53,33 +62,24 @@ public class CamelResource {
     @Inject
     CamelContext context;
 
+    @ConfigProperty(name = "quarkus.datasource.cameldb.db-kind")
+    String dbKind;
+
     @PostConstruct
     void postConstruct() throws Exception {
-        try (Connection con = dataSource.getConnection()) {
-            try (Statement statement = con.createStatement()) {
-                try {
-                    statement.execute("drop table camels");
-                    statement.execute("drop table camelsGenerated");
-                } catch (Exception ignored) {
-                }
-                statement.execute("create table camels (id int primary key, species varchar(255))");
-                statement.execute("create table camelsGenerated (id int primary key auto_increment, species varchar(255))");
-                statement.execute("create table camelsProcessed (id int primary key auto_increment, species varchar(255))");
-                statement.execute("insert into camelsGenerated (species) values ('Camelus status'), ('Camelus linus')");
-                statement.execute("insert into camels (id, species) values (1, 'Camelus dromedarius')");
-                statement.execute("insert into camels (id, species) values (2, 'Camelus bactrianus')");
-                statement.execute("insert into camels (id, species) values (3, 'Camelus ferus')");
-
-                context.getRouteController().startRoute("jdbc-poll");
-            }
-        }
+        Connection conn = dataSource.getConnection();
+        runScripts(conn, "droptables.sql");
+        runScripts(conn, dbKind + ".sql");
+        runScripts(conn, "inserts.sql");
+
+        context.getRouteController().startRoute("jdbc-poll");
     }
 
     @Path("/species/{id}")
     @GET
     @Produces(MediaType.TEXT_PLAIN)
     public String getSpeciesById(@PathParam("id") String id) throws Exception {
-        return template.requestBody("jdbc:camel-ds", "select species from camels where id = " + id, String.class);
+        return template.requestBody("jdbc:cameldb", "select species from camels where id = " + id, String.class);
     }
 
     @SuppressWarnings("unchecked")
@@ -88,14 +88,14 @@ public class CamelResource {
     @Produces(MediaType.TEXT_PLAIN)
     public String getSpeciesByIdWithSelectList(@PathParam("id") String id) throws Exception {
         List<LinkedHashMap<String, Object>> result = template
-                .requestBody("jdbc:camel-ds?outputType=SelectList", "select * from camels where id = " + id, List.class);
+                .requestBody("jdbc:cameldb?outputType=SelectList", "select * from camels where id = " + id, List.class);
 
         if (result.isEmpty()) {
             throw new IllegalStateException("Expected at least 1 camel result but none were found");
         }
 
         LinkedHashMap<String, Object> data = result.get(0);
-        return data.get("SPECIES") + " " + data.get("ID");
+        return data.get(getSpeciesRowName()) + " " + data.get(getIdRowName());
     }
 
     @SuppressWarnings("unchecked")
@@ -103,7 +103,7 @@ public class CamelResource {
     @GET
     @Produces(MediaType.TEXT_PLAIN)
     public String getSpeciesByIdWithDefinedType(@PathParam("id") String id) throws Exception {
-        List<Camel> results = template.requestBody("jdbc:camel-ds?outputClass=" + Camel.class.getName(),
+        List<Camel> results = template.requestBody("jdbc:cameldb?outputClass=" + Camel.class.getName(),
                 "select * from camels where id = " + id, List.class);
 
         if (results.isEmpty()) {
@@ -119,7 +119,7 @@ public class CamelResource {
     @Consumes(MediaType.TEXT_PLAIN)
     @Produces(MediaType.TEXT_PLAIN)
     public String executeStatement(String statement) throws Exception {
-        return template.requestBody("jdbc:camel-ds", statement, String.class);
+        return template.requestBody("jdbc:cameldb", statement, String.class);
     }
 
     @Path("/generated-keys/rows")
@@ -127,7 +127,7 @@ public class CamelResource {
     @Produces(MediaType.APPLICATION_JSON)
     public List generatedKeysRows() throws Exception {
         return template.requestBodyAndHeader("direct://get-generated-keys",
-                "insert into camelsGenerated (species) values ('Camelus testus'), ('Camelus legendarius')",
+                "insert into camelsGenerated (species) values ('Camelus testus')",
                 "CamelRetrieveGeneratedKeys", "true", ArrayList.class);
     }
 
@@ -136,7 +136,7 @@ public class CamelResource {
     @Produces(MediaType.APPLICATION_JSON)
     public String headersFromInsertOrUpdate() throws Exception {
         return template.requestBodyAndHeader("direct://get-headers",
-                "insert into camelsGenerated (species) values ('Camelus status'), ('Camelus linus')",
+                "insert into camelsGenerated (species) values ('Camelus testus')",
                 "CamelRetrieveGeneratedKeys", "true", String.class);
     }
 
@@ -151,16 +151,17 @@ public class CamelResource {
     @GET
     @Produces(MediaType.APPLICATION_JSON)
     public String headersAsParameters() throws Exception {
+        int id = 3;
         return template.requestBodyAndHeader("direct://headers-as-parameters",
                 "select * from camels where id < :?idmax order by id",
-                "idmax", "3", String.class);
+                "idmax", id, String.class);
     }
 
     @Path("/named-parameters/headers-as-parameters-map")
     @GET
     @Produces(MediaType.APPLICATION_JSON)
     public String headersAsParametersMap() throws Exception {
-        Map<String, String> headersMap = Map.of("idmax", "3", "specs", "Camelus bactrianus");
+        Map<String, Object> headersMap = Map.of("idmax", 3, "specs", "Camelus bactrianus");
         return template.requestBodyAndHeader("direct://headers-as-parameters",
                 "select * from camels where id < :?idmax and species = :?specs order by id",
                 "CamelJdbcParameters", headersMap, String.class);
@@ -183,4 +184,63 @@ public class CamelResource {
         return template.requestBody("direct://move-between-datasources", null, String.class);
     }
 
+    private void runScripts(Connection conn, String fileName) throws SQLException, IOException {
+        try (Statement statement = conn.createStatement()) {
+            try (InputStream is = Thread.currentThread().getContextClassLoader()
+                    .getResourceAsStream("sql/" + fileName);
+                    InputStreamReader isr = new InputStreamReader(is);
+                    BufferedReader reader = new BufferedReader(isr)) {
+
+                //execute each line from the sql script as separate statement
+                reader.lines().filter(s -> s != null && !"".equals(s) && !s.startsWith("--")).forEach(s -> {
+                    try {
+                        statement.execute(s);
+                    } catch (SQLException e) {
+                        if (!s.toUpperCase().startsWith("DROP")) {
+                            throw new RuntimeException(e);
+                        } else {
+                            LOGGER.debug(String.format("Command '%s' failed.", s)); //use debug logging
+                        }
+                    }
+                });
+            }
+        }
+
+    }
+
+    @Path("/get-id-key")
+    @GET
+    @Produces(MediaType.TEXT_PLAIN)
+    public String getIdKey() {
+        switch (dbKind) {
+        case "postgresql":
+            return "id";
+        case "oracle":
+            return "ROWID";
+        case "mssql":
+            return "GENERATED_KEYS";
+        case "mariadb":
+            return "insert_id";
+        case "mysql":
+            return "GENERATED_KEY";
+        default:
+            return "ID";
+        }
+    }
+
+    private String getIdRowName() {
+        if (dbKind.equals("h2") || dbKind.equals("oracle") || dbKind.equals("db2")) {
+            return "ID";
+        } else {
+            return "id";
+        }
+    }
+
+    private String getSpeciesRowName() {
+        if (dbKind.equals("h2") || dbKind.equals("oracle") || dbKind.equals("db2")) {
+            return "SPECIES";
+        } else {
+            return "species";
+        }
+    }
 }
diff --git a/integration-tests/jdbc/src/main/java/org/apache/camel/quarkus/component/jdbc/JdbcRoutes.java b/integration-tests/jdbc/src/main/java/org/apache/camel/quarkus/component/jdbc/JdbcRoutes.java
index bab2f851ce..7b5f977cea 100644
--- a/integration-tests/jdbc/src/main/java/org/apache/camel/quarkus/component/jdbc/JdbcRoutes.java
+++ b/integration-tests/jdbc/src/main/java/org/apache/camel/quarkus/component/jdbc/JdbcRoutes.java
@@ -20,26 +20,29 @@ import jakarta.enterprise.context.ApplicationScoped;
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
 import org.apache.camel.builder.RouteBuilder;
-import org.jboss.logging.Logger;
+import org.eclipse.microprofile.config.inject.ConfigProperty;
 
 @ApplicationScoped
 public class JdbcRoutes extends RouteBuilder {
-    private static final Logger LOG = Logger.getLogger(JdbcRoutes.class);
+
+    @ConfigProperty(name = "quarkus.datasource.cameldb.db-kind")
+    String dbKind;
 
     @Override
     public void configure() {
         from("direct://get-generated-keys")
-                .to("jdbc:camel-ds")
+                .to("jdbc:cameldb")
                 .process(new Processor() {
                     @Override
                     public void process(Exchange exchange) throws Exception {
+                        System.out.println(exchange.getIn().getHeaders());
                         Object in = exchange.getIn().getHeader("CamelGeneratedKeysRows");
                         exchange.getIn().setBody(in);
                     }
                 });
 
         from("direct://get-headers")
-                .to("jdbc:camel-ds")
+                .to("jdbc:cameldb")
                 .process(new Processor() {
                     @Override
                     public void process(Exchange exchange) throws Exception {
@@ -49,18 +52,25 @@ public class JdbcRoutes extends RouteBuilder {
                 });
 
         from("direct://headers-as-parameters")
-                .to("jdbc:camel-ds?useHeadersAsParameters=true");
+                .to("jdbc:cameldb?useHeadersAsParameters=true");
 
         from("timer://interval-polling?delay=2000&repeatCount=1").routeId("jdbc-poll").autoStartup(false)
                 .setBody(constant("select * from camelsGenerated order by id desc"))
-                .to("jdbc:camel-ds")
+                .to("jdbc:cameldb")
                 .to("mock:interval-polling");
 
+        String species;
+        if (dbKind.equals("postgresql") || dbKind.equals("mysql") || dbKind.equals("mariadb") || dbKind.equals("mssql")) {
+            species = "species";
+        } else {
+            species = "SPECIES";
+        }
+
         from("direct://move-between-datasources")
                 .setBody(constant("select * from camels"))
-                .to("jdbc:camel-ds")
+                .to("jdbc:cameldb")
                 .split(body())
-                .setBody(simple("insert into camelsProcessed values('${body[ID]}','${body[SPECIES]}')"))
-                .to("jdbc:camel-ds");
+                .setBody(simple("insert into camelsProcessed (species) values('${body[" + species + "]}')"))
+                .to("jdbc:cameldb");
     }
 }
diff --git a/integration-tests/jdbc/src/main/resources/application.properties b/integration-tests/jdbc/src/main/resources/application.properties
index 778b1490c7..3fae84e7b2 100644
--- a/integration-tests/jdbc/src/main/resources/application.properties
+++ b/integration-tests/jdbc/src/main/resources/application.properties
@@ -18,6 +18,7 @@
 #
 # Quarkus :: DS
 #
-quarkus.datasource.camel-ds.jdbc.url=jdbc:h2:tcp://localhost/mem:test
-quarkus.datasource.camel-ds.db-kind=h2
-quarkus.datasource.camel-ds.jdbc.max-size=8
+quarkus.datasource.cameldb.db-kind=${cq.jdbcKind:h2}
+quarkus.datasource.cameldb.jdbc.max-size=8
+
+quarkus.native.resources.includes=sql/${cq.jdbcKind:h2}.sql,sql/inserts.sql,sql/droptables.sql
\ No newline at end of file
diff --git a/integration-tests/jdbc/src/main/resources/sql/db2.sql b/integration-tests/jdbc/src/main/resources/sql/db2.sql
new file mode 100644
index 0000000000..48e78bc85f
--- /dev/null
+++ b/integration-tests/jdbc/src/main/resources/sql/db2.sql
@@ -0,0 +1,20 @@
+--
+-- Licensed to the Apache Software Foundation (ASF) under one or more
+-- contributor license agreements.  See the NOTICE file distributed with
+-- this work for additional information regarding copyright ownership.
+-- The ASF licenses this file to You under the Apache License, Version 2.0
+-- (the "License"); you may not use this file except in compliance with
+-- the License.  You may obtain a copy of the License at
+--
+--      http://www.apache.org/licenses/LICENSE-2.0
+--
+-- Unless required by applicable law or agreed to in writing, software
+-- distributed under the License is distributed on an "AS IS" BASIS,
+-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+-- See the License for the specific language governing permissions and
+-- limitations under the License.
+--
+
+CREATE TABLE camels (id INT GENERATED BY DEFAULT AS IDENTITY NOT NULL, species VARCHAR(50) NOT NULL,PRIMARY KEY (id))
+CREATE TABLE camelsGenerated (id INT GENERATED BY DEFAULT AS IDENTITY NOT NULL, species VARCHAR(50) NOT NULL,PRIMARY KEY (id))
+CREATE TABLE camelsProcessed (id INT GENERATED BY DEFAULT AS IDENTITY NOT NULL, species VARCHAR(50) NOT NULL,PRIMARY KEY (id))
\ No newline at end of file
diff --git a/integration-tests/jdbc/src/main/resources/sql/derby.sql b/integration-tests/jdbc/src/main/resources/sql/derby.sql
new file mode 100644
index 0000000000..1f5485efe6
--- /dev/null
+++ b/integration-tests/jdbc/src/main/resources/sql/derby.sql
@@ -0,0 +1,20 @@
+--
+-- Licensed to the Apache Software Foundation (ASF) under one or more
+-- contributor license agreements.  See the NOTICE file distributed with
+-- this work for additional information regarding copyright ownership.
+-- The ASF licenses this file to You under the Apache License, Version 2.0
+-- (the "License"); you may not use this file except in compliance with
+-- the License.  You may obtain a copy of the License at
+--
+--      http://www.apache.org/licenses/LICENSE-2.0
+--
+-- Unless required by applicable law or agreed to in writing, software
+-- distributed under the License is distributed on an "AS IS" BASIS,
+-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+-- See the License for the specific language governing permissions and
+-- limitations under the License.
+--
+
+CREATE TABLE camels (id INT NOT NULL GENERATED ALWAYS AS IDENTITY,species VARCHAR(50) NOT NULL)
+CREATE TABLE camelsGenerated (id INT NOT NULL GENERATED ALWAYS AS IDENTITY,species VARCHAR(50) NOT NULL)
+CREATE TABLE camelsProcessed (id INT NOT NULL GENERATED ALWAYS AS IDENTITY,species VARCHAR(50) NOT NULL)
\ No newline at end of file
diff --git a/integration-tests/jdbc/src/main/resources/sql/droptables.sql b/integration-tests/jdbc/src/main/resources/sql/droptables.sql
new file mode 100644
index 0000000000..7a77034cc8
--- /dev/null
+++ b/integration-tests/jdbc/src/main/resources/sql/droptables.sql
@@ -0,0 +1,20 @@
+--
+-- Licensed to the Apache Software Foundation (ASF) under one or more
+-- contributor license agreements.  See the NOTICE file distributed with
+-- this work for additional information regarding copyright ownership.
+-- The ASF licenses this file to You under the Apache License, Version 2.0
+-- (the "License"); you may not use this file except in compliance with
+-- the License.  You may obtain a copy of the License at
+--
+--      http://www.apache.org/licenses/LICENSE-2.0
+--
+-- Unless required by applicable law or agreed to in writing, software
+-- distributed under the License is distributed on an "AS IS" BASIS,
+-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+-- See the License for the specific language governing permissions and
+-- limitations under the License.
+--
+
+drop table camels
+drop table camelsGenerated
+drop table camelsProcessed
\ No newline at end of file
diff --git a/integration-tests/jdbc/src/main/resources/sql/h2.sql b/integration-tests/jdbc/src/main/resources/sql/h2.sql
new file mode 100644
index 0000000000..e54ab07edd
--- /dev/null
+++ b/integration-tests/jdbc/src/main/resources/sql/h2.sql
@@ -0,0 +1,20 @@
+--
+-- Licensed to the Apache Software Foundation (ASF) under one or more
+-- contributor license agreements.  See the NOTICE file distributed with
+-- this work for additional information regarding copyright ownership.
+-- The ASF licenses this file to You under the Apache License, Version 2.0
+-- (the "License"); you may not use this file except in compliance with
+-- the License.  You may obtain a copy of the License at
+--
+--      http://www.apache.org/licenses/LICENSE-2.0
+--
+-- Unless required by applicable law or agreed to in writing, software
+-- distributed under the License is distributed on an "AS IS" BASIS,
+-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+-- See the License for the specific language governing permissions and
+-- limitations under the License.
+--
+
+create table camels (id int auto_increment primary key, species varchar(50))
+create table camelsGenerated (id int auto_increment primary key, species varchar(50))
+create table camelsProcessed (id int auto_increment primary key , species varchar(50))
\ No newline at end of file
diff --git a/integration-tests/jdbc/src/main/resources/sql/inserts.sql b/integration-tests/jdbc/src/main/resources/sql/inserts.sql
new file mode 100644
index 0000000000..fce3a151ca
--- /dev/null
+++ b/integration-tests/jdbc/src/main/resources/sql/inserts.sql
@@ -0,0 +1,22 @@
+--
+-- Licensed to the Apache Software Foundation (ASF) under one or more
+-- contributor license agreements.  See the NOTICE file distributed with
+-- this work for additional information regarding copyright ownership.
+-- The ASF licenses this file to You under the Apache License, Version 2.0
+-- (the "License"); you may not use this file except in compliance with
+-- the License.  You may obtain a copy of the License at
+--
+--      http://www.apache.org/licenses/LICENSE-2.0
+--
+-- Unless required by applicable law or agreed to in writing, software
+-- distributed under the License is distributed on an "AS IS" BASIS,
+-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+-- See the License for the specific language governing permissions and
+-- limitations under the License.
+--
+
+insert into camelsGenerated (species) values ('Camelus status')
+insert into camelsGenerated (species) values ('Camelus linus')
+insert into camels (species) values ('Camelus dromedarius')
+insert into camels (species) values ('Camelus bactrianus')
+insert into camels (species) values ('Camelus ferus')
\ No newline at end of file
diff --git a/integration-tests/jdbc/src/main/resources/sql/mariadb.sql b/integration-tests/jdbc/src/main/resources/sql/mariadb.sql
new file mode 100644
index 0000000000..e54ab07edd
--- /dev/null
+++ b/integration-tests/jdbc/src/main/resources/sql/mariadb.sql
@@ -0,0 +1,20 @@
+--
+-- Licensed to the Apache Software Foundation (ASF) under one or more
+-- contributor license agreements.  See the NOTICE file distributed with
+-- this work for additional information regarding copyright ownership.
+-- The ASF licenses this file to You under the Apache License, Version 2.0
+-- (the "License"); you may not use this file except in compliance with
+-- the License.  You may obtain a copy of the License at
+--
+--      http://www.apache.org/licenses/LICENSE-2.0
+--
+-- Unless required by applicable law or agreed to in writing, software
+-- distributed under the License is distributed on an "AS IS" BASIS,
+-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+-- See the License for the specific language governing permissions and
+-- limitations under the License.
+--
+
+create table camels (id int auto_increment primary key, species varchar(50))
+create table camelsGenerated (id int auto_increment primary key, species varchar(50))
+create table camelsProcessed (id int auto_increment primary key , species varchar(50))
\ No newline at end of file
diff --git a/integration-tests/jdbc/src/main/resources/sql/mssql.sql b/integration-tests/jdbc/src/main/resources/sql/mssql.sql
new file mode 100644
index 0000000000..c603f48434
--- /dev/null
+++ b/integration-tests/jdbc/src/main/resources/sql/mssql.sql
@@ -0,0 +1,20 @@
+--
+-- Licensed to the Apache Software Foundation (ASF) under one or more
+-- contributor license agreements.  See the NOTICE file distributed with
+-- this work for additional information regarding copyright ownership.
+-- The ASF licenses this file to You under the Apache License, Version 2.0
+-- (the "License"); you may not use this file except in compliance with
+-- the License.  You may obtain a copy of the License at
+--
+--      http://www.apache.org/licenses/LICENSE-2.0
+--
+-- Unless required by applicable law or agreed to in writing, software
+-- distributed under the License is distributed on an "AS IS" BASIS,
+-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+-- See the License for the specific language governing permissions and
+-- limitations under the License.
+--
+
+create table camels (id int  IDENTITY(1,1) PRIMARY KEY, species varchar(255))
+create table camelsGenerated (id int  IDENTITY(1,1) PRIMARY KEY, species varchar(255))
+create table camelsProcessed (id int  IDENTITY(1,1) PRIMARY KEY, species varchar(255))
\ No newline at end of file
diff --git a/integration-tests/jdbc/src/main/resources/sql/mysql.sql b/integration-tests/jdbc/src/main/resources/sql/mysql.sql
new file mode 100644
index 0000000000..e54ab07edd
--- /dev/null
+++ b/integration-tests/jdbc/src/main/resources/sql/mysql.sql
@@ -0,0 +1,20 @@
+--
+-- Licensed to the Apache Software Foundation (ASF) under one or more
+-- contributor license agreements.  See the NOTICE file distributed with
+-- this work for additional information regarding copyright ownership.
+-- The ASF licenses this file to You under the Apache License, Version 2.0
+-- (the "License"); you may not use this file except in compliance with
+-- the License.  You may obtain a copy of the License at
+--
+--      http://www.apache.org/licenses/LICENSE-2.0
+--
+-- Unless required by applicable law or agreed to in writing, software
+-- distributed under the License is distributed on an "AS IS" BASIS,
+-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+-- See the License for the specific language governing permissions and
+-- limitations under the License.
+--
+
+create table camels (id int auto_increment primary key, species varchar(50))
+create table camelsGenerated (id int auto_increment primary key, species varchar(50))
+create table camelsProcessed (id int auto_increment primary key , species varchar(50))
\ No newline at end of file
diff --git a/integration-tests/jdbc/src/main/resources/sql/oracle.sql b/integration-tests/jdbc/src/main/resources/sql/oracle.sql
new file mode 100644
index 0000000000..a127ab480b
--- /dev/null
+++ b/integration-tests/jdbc/src/main/resources/sql/oracle.sql
@@ -0,0 +1,20 @@
+--
+-- Licensed to the Apache Software Foundation (ASF) under one or more
+-- contributor license agreements.  See the NOTICE file distributed with
+-- this work for additional information regarding copyright ownership.
+-- The ASF licenses this file to You under the Apache License, Version 2.0
+-- (the "License"); you may not use this file except in compliance with
+-- the License.  You may obtain a copy of the License at
+--
+--      http://www.apache.org/licenses/LICENSE-2.0
+--
+-- Unless required by applicable law or agreed to in writing, software
+-- distributed under the License is distributed on an "AS IS" BASIS,
+-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+-- See the License for the specific language governing permissions and
+-- limitations under the License.
+--
+
+CREATE TABLE camels(id NUMBER GENERATED by default on null as IDENTITY, species VARCHAR2(50) NOT NULL, PRIMARY KEY(id))
+CREATE TABLE camelsGenerated(id NUMBER GENERATED by default on null as IDENTITY, species VARCHAR2(50) NOT NULL, PRIMARY KEY(id))
+CREATE TABLE camelsProcessed(id NUMBER GENERATED by default on null as IDENTITY, species VARCHAR2(50) NOT NULL, PRIMARY KEY(id))
diff --git a/integration-tests/jdbc/src/main/resources/sql/postgresql.sql b/integration-tests/jdbc/src/main/resources/sql/postgresql.sql
new file mode 100644
index 0000000000..b31dc12ef6
--- /dev/null
+++ b/integration-tests/jdbc/src/main/resources/sql/postgresql.sql
@@ -0,0 +1,20 @@
+--
+-- Licensed to the Apache Software Foundation (ASF) under one or more
+-- contributor license agreements.  See the NOTICE file distributed with
+-- this work for additional information regarding copyright ownership.
+-- The ASF licenses this file to You under the Apache License, Version 2.0
+-- (the "License"); you may not use this file except in compliance with
+-- the License.  You may obtain a copy of the License at
+--
+--      http://www.apache.org/licenses/LICENSE-2.0
+--
+-- Unless required by applicable law or agreed to in writing, software
+-- distributed under the License is distributed on an "AS IS" BASIS,
+-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+-- See the License for the specific language governing permissions and
+-- limitations under the License.
+--
+
+CREATE TABLE camels (id serial PRIMARY KEY, species VARCHAR ( 50 ) NOT NULL)
+CREATE TABLE camelsGenerated (id serial PRIMARY KEY, species VARCHAR ( 50 ) NOT NULL)
+CREATE TABLE camelsProcessed (id serial PRIMARY KEY, species VARCHAR ( 50 ) NOT NULL)
\ No newline at end of file
diff --git a/integration-tests/jdbc/src/test/java/org/apache/camel/quarkus/component/jdbc/CamelJdbcTest.java b/integration-tests/jdbc/src/test/java/org/apache/camel/quarkus/component/jdbc/CamelJdbcTest.java
index 9fe7dad4af..9c8dce2d81 100644
--- a/integration-tests/jdbc/src/test/java/org/apache/camel/quarkus/component/jdbc/CamelJdbcTest.java
+++ b/integration-tests/jdbc/src/test/java/org/apache/camel/quarkus/component/jdbc/CamelJdbcTest.java
@@ -18,28 +18,29 @@ package org.apache.camel.quarkus.component.jdbc;
 
 import java.util.List;
 
-import io.quarkus.test.common.QuarkusTestResource;
-import io.quarkus.test.h2.H2DatabaseTestResource;
 import io.quarkus.test.junit.QuarkusTest;
 import io.restassured.RestAssured;
 import io.restassured.http.ContentType;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.condition.DisabledIfSystemProperty;
 
-import static org.hamcrest.Matchers.containsString;
+import static org.hamcrest.Matchers.containsStringIgnoringCase;
 import static org.hamcrest.Matchers.equalTo;
+import static org.hamcrest.Matchers.equalToIgnoringCase;
 import static org.hamcrest.Matchers.is;
 import static org.hamcrest.Matchers.not;
-import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
 
 @QuarkusTest
-@QuarkusTestResource(H2DatabaseTestResource.class)
+@DisabledIfSystemProperty(named = "cq.jdbcKind", matches = "derby")
+//https://github.com/quarkusio/quarkus/issues/23083
 public class CamelJdbcTest {
-
     @Test
     void testGetSpeciesById() {
-        RestAssured.when().get("/test/species/1").then().body(is("[{SPECIES=Camelus dromedarius}]"));
-        RestAssured.when().get("/test/species/2").then().body(is("[{SPECIES=Camelus bactrianus}]"));
-        RestAssured.when().get("/test/species/3").then().body(is("[{SPECIES=Camelus ferus}]"));
+        RestAssured.when().get("/test/species/1").then().body(equalToIgnoringCase("[{SPECIES=Camelus dromedarius}]"));
+        RestAssured.when().get("/test/species/2").then().body(equalToIgnoringCase("[{SPECIES=Camelus bactrianus}]"));
+        RestAssured.when().get("/test/species/3").then().body(equalToIgnoringCase("[{SPECIES=Camelus ferus}]"));
     }
 
     @Test
@@ -49,7 +50,7 @@ public class CamelJdbcTest {
 
     @Test
     void testGetSpeciesByIdWithDefinedType() {
-        RestAssured.when().get("/test/species/1/type").then().body(is("Camelus dromedarius 1"));
+        RestAssured.when().get("/test/species/1/type").then().body(equalToIgnoringCase("Camelus dromedarius 1"));
     }
 
     @Test
@@ -57,22 +58,25 @@ public class CamelJdbcTest {
         RestAssured.given()
                 .contentType(ContentType.TEXT).body("select id from camels order by id desc")
                 .post("/test/execute")
-                .then().body(is("[{ID=3}, {ID=2}, {ID=1}]"));
+                .then().body(equalToIgnoringCase("[{ID=3}, {ID=2}, {ID=1}]"));
     }
 
     @Test
     void testCamelRetrieveGeneratedKeysHeader() {
+        String idKey = RestAssured.when()
+                .get("/test/get-id-key")
+                .then()
+                .extract()
+                .body().asString();
+
         List generatedIDs = RestAssured.given()
                 .get("test/generated-keys/rows")
                 .then().extract().body()
-                .jsonPath().getList("ID");
+                .jsonPath().getList(idKey);
 
-        String selectResult = RestAssured.given()
-                .contentType(ContentType.TEXT).body("select id from camelsGenerated")
-                .post("/test/execute")
-                .then().extract().body().asString();
+        assertFalse(generatedIDs.isEmpty());
+        assertNotNull(generatedIDs.get(0));
 
-        generatedIDs.forEach(generatedID -> assertTrue(selectResult.contains(generatedID.toString())));
     }
 
     @Test
@@ -80,19 +84,19 @@ public class CamelJdbcTest {
         RestAssured.given()
                 .get("test/headers/insert")
                 .then()
-                .body(containsString("CamelGeneratedKeysRowCount=2"))
+                .body(containsStringIgnoringCase("CamelGeneratedKeysRowCount=1"))
                 .and()
-                .body(containsString("CamelJdbcUpdateCount=2"))
+                .body(containsStringIgnoringCase("CamelJdbcUpdateCount=1"))
                 .and()
-                .body(containsString("CamelRetrieveGeneratedKeys=true"))
+                .body(containsStringIgnoringCase("CamelRetrieveGeneratedKeys=true"))
                 .and()
-                .body(not(containsString("CamelJdbcRowCount")))
+                .body(not(containsStringIgnoringCase("CamelJdbcRowCount")))
                 .and()
-                .body(not(containsString("CamelJdbcColumnNames")))
+                .body(not(containsStringIgnoringCase("CamelJdbcColumnNames")))
                 .and()
-                .body(not(containsString("CamelJdbcParameters")))
+                .body(not(containsStringIgnoringCase("CamelJdbcParameters")))
                 .and()
-                .body(not(containsString("CamelGeneratedColumns")));
+                .body(not(containsStringIgnoringCase("CamelGeneratedColumns")));
     }
 
     @Test
@@ -100,19 +104,19 @@ public class CamelJdbcTest {
         RestAssured.given()
                 .get("test/headers/select")
                 .then()
-                .body(not(containsString("CamelGeneratedKeysRowCount")))
+                .body(not(containsStringIgnoringCase("CamelGeneratedKeysRowCount")))
                 .and()
-                .body(not(containsString("CamelJdbcUpdateCount")))
+                .body(not(containsStringIgnoringCase("CamelJdbcUpdateCount")))
                 .and()
-                .body(not(containsString("CamelRetrieveGeneratedKeys")))
+                .body(not(containsStringIgnoringCase("CamelRetrieveGeneratedKeys")))
                 .and()
-                .body(not(containsString("CamelJdbcParameters")))
+                .body(not(containsStringIgnoringCase("CamelJdbcParameters")))
                 .and()
-                .body(not(containsString("CamelGeneratedColumns")))
+                .body(not(containsStringIgnoringCase("CamelGeneratedColumns")))
                 .and()
-                .body(containsString("CamelJdbcRowCount"))
+                .body(containsStringIgnoringCase("CamelJdbcRowCount"))
                 .and()
-                .body(containsString("CamelJdbcColumnNames=[ID, SPECIES]"));
+                .body(containsStringIgnoringCase("CamelJdbcColumnNames=[ID, SPECIES]"));
     }
 
     @Test
@@ -120,9 +124,9 @@ public class CamelJdbcTest {
         RestAssured.given()
                 .get("test/named-parameters/headers-as-parameters")
                 .then()
-                .body(containsString("{ID=1, SPECIES=Camelus dromedarius}"))
+                .body(containsStringIgnoringCase("{ID=1, SPECIES=Camelus dromedarius}"))
                 .and()
-                .body(containsString("{ID=2, SPECIES=Camelus bactrianus}"));
+                .body(containsStringIgnoringCase("{ID=2, SPECIES=Camelus bactrianus}"));
     }
 
     @Test
@@ -130,7 +134,7 @@ public class CamelJdbcTest {
         RestAssured.given()
                 .get("test/named-parameters/headers-as-parameters-map")
                 .then()
-                .body(containsString("{ID=2, SPECIES=Camelus bactrianus}"));
+                .body(containsStringIgnoringCase("{ID=2, SPECIES=Camelus bactrianus}"));
     }
 
     @Test
@@ -163,5 +167,4 @@ public class CamelJdbcTest {
                 .then()
                 .body(equalTo(camelsDbResult));
     }
-
 }