]> git.basschouten.com Git - openhab-addons.git/commitdiff
[jdbc] Upgrade derby from 10.12.1.1 to 10.14.2.0 (#13038)
authordependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Tue, 11 Oct 2022 19:54:19 +0000 (21:54 +0200)
committerGitHub <noreply@github.com>
Tue, 11 Oct 2022 19:54:19 +0000 (21:54 +0200)
* Use derby instead of derbyclient, fix bnd optional package imports
* Update versions add dynamic package import for custom JDBC drivers
* Prevent redundant null check warnings

Signed-off-by: Wouter Born <github@maindrain.net>
13 files changed:
bundles/org.openhab.persistence.jdbc/README.md
bundles/org.openhab.persistence.jdbc/pom.xml
bundles/org.openhab.persistence.jdbc/src/main/feature/feature.xml
bundles/org.openhab.persistence.jdbc/src/main/java/org/openhab/persistence/jdbc/db/JdbcBaseDAO.java
bundles/org.openhab.persistence.jdbc/src/main/java/org/openhab/persistence/jdbc/db/JdbcDerbyDAO.java
bundles/org.openhab.persistence.jdbc/src/main/java/org/openhab/persistence/jdbc/db/JdbcH2DAO.java
bundles/org.openhab.persistence.jdbc/src/main/java/org/openhab/persistence/jdbc/db/JdbcHsqldbDAO.java
bundles/org.openhab.persistence.jdbc/src/main/java/org/openhab/persistence/jdbc/db/JdbcMariadbDAO.java
bundles/org.openhab.persistence.jdbc/src/main/java/org/openhab/persistence/jdbc/db/JdbcMysqlDAO.java
bundles/org.openhab.persistence.jdbc/src/main/java/org/openhab/persistence/jdbc/db/JdbcPostgresqlDAO.java
bundles/org.openhab.persistence.jdbc/src/main/java/org/openhab/persistence/jdbc/db/JdbcSqliteDAO.java
bundles/org.openhab.persistence.jdbc/src/main/java/org/openhab/persistence/jdbc/internal/JdbcConfiguration.java
bundles/org.openhab.persistence.jdbc/src/main/java/org/openhab/persistence/jdbc/internal/package-info.java [new file with mode: 0644]

index 76f2adcde97a246e06c05965f944bf029b20a978..0a828875f8741483f88dbdf6de2edb63e0d27a7c 100644 (file)
@@ -9,7 +9,7 @@ The following databases are currently supported and tested:
 
 | Database                                     | Tested Driver / Version                                      |
 | -------------------------------------------- | ------------------------------------------------------------ |
-| [Apache Derby](https://db.apache.org/derby/) | [derby-10.12.1.1.jar](https://mvnrepository.com/artifact/org.apache.derby/derby) |
+| [Apache Derby](https://db.apache.org/derby/) | [derby-10.14.2.0.jar](https://mvnrepository.com/artifact/org.apache.derby/derby) |
 | [H2](https://www.h2database.com/)            | [h2-1.4.191.jar](https://mvnrepository.com/artifact/com.h2database/h2) |
 | [HSQLDB](http://hsqldb.org/)                 | [hsqldb-2.3.3.jar](https://mvnrepository.com/artifact/org.hsqldb/hsqldb) |
 | [MariaDB](https://mariadb.org/)              | [mariadb-java-client-1.4.6.jar](https://mvnrepository.com/artifact/org.mariadb.jdbc/mariadb-java-client) |
index d9caf9c5bc4fe8c1dd53bbebdd138eabfed634f4..84e3b6ae996b715cb0211b3ce2db2400e60255d9 100644 (file)
@@ -15,7 +15,7 @@
   <name>openHAB Add-ons :: Bundles :: Persistence Service :: JDBC</name>
 
   <properties>
-    <bnd.importpackage>!org.osgi.service.jdbc.*,!sun.security.*,!org.apache.lucene.*,!org.apache.logging.log4j,!waffle.windows.auth.*,!org.hibernate.*,!org.jboss.*,!org.codehaus.groovy.*,!com.codahale.metrics.*,!com.google.protobuf.*,!com.ibm.icu.*,!com.ibm.jvm.*,!com.mchange.*,!com.sun.*,!com.vividsolutions.*,!io.prometheus.*,com.mysql.jdbc;resolution:=optional,org.apache.derby.*;resolution:=optional,org.h2;resolution:=optional,org.h2.jdbcx;resolution:=optional,org.hsqldb;resolution:=optional,org.hsqldb.jdbc;resolution:=optional,org.mariadb.jdbc;resolution:=optional,org.postgresql;resolution:=optional,org.sqlite;resolution:=optional,org.sqlite.jdbc4;resolution:=optional,javassist*;resolution:=optional</bnd.importpackage>
+    <bnd.importpackage>!org.osgi.service.jdbc.*,!sun.security.*,!org.apache.lucene.*,!org.apache.logging.log4j,!waffle.windows.auth.*,!org.hibernate.*,!org.jboss.*,!org.codehaus.groovy.*,!com.codahale.metrics.*,!com.google.protobuf.*,!com.ibm.icu.*,!com.ibm.jvm.*,!com.mchange.*,!com.sun.*,!com.vividsolutions.*,!io.prometheus.*,com.mysql.*;resolution:=optional,org.apache.derby.*;resolution:=optional,org.h2.*;resolution:=optional,org.hsqldb;resolution:=optional,org.hsqldb.jdbc;resolution:=optional,org.mariadb.*;resolution:=optional,org.postgresql.*;resolution:=optional,org.sqlite;resolution:=optional,org.sqlite.jdbc4;resolution:=optional,javassist*;resolution:=optional</bnd.importpackage>
     <dep.noembedding>derby,h2,hsqldb,mariadb-java-client,mysql-connector-java,postgresql,sqlite-jdbc</dep.noembedding>
 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
@@ -25,7 +25,7 @@
     <yank.version>3.2.0</yank.version>
 
     <!-- JDBC database driver versions -->
-    <derby.version>10.12.1.1</derby.version>
+    <derby.version>10.14.2.0</derby.version>
     <h2.version>1.4.191</h2.version>
     <hsqldb.version>2.3.3</hsqldb.version>
     <mariadb.version>1.4.6</mariadb.version>
index 322a15ab0abc31782e039636f2d4c56ef935b9ba..20816900db05cf32633b513f0c5d36e7f27b31ea 100644 (file)
@@ -6,7 +6,7 @@
        <feature name="openhab-persistence-jdbc-derby" description="JDBC Persistence Apache Derby" version="${project.version}">
                <configfile finalname="${openhab.conf}/services/jdbc.cfg" override="false">mvn:org.openhab.addons.features.karaf/org.openhab.addons.features.karaf.openhab-addons-external/${project.version}/cfg/jdbc</configfile>
                <feature prerequisite="false" dependency="false">openhab-runtime-base</feature>
-               <bundle start-level="80">mvn:org.apache.derby/derbyclient/10.12.1.1</bundle>
+               <bundle start-level="80">mvn:org.apache.derby/derby/10.14.2.0</bundle>
                <bundle start-level="80">mvn:org.openhab.addons.bundles/org.openhab.persistence.jdbc/${project.version}</bundle>
        </feature>
 
index 6ba364dafb45e3a0526af178be0fc7be598ee201..63ed8717273a3f864e9146793ca68897359f2beb 100644 (file)
@@ -22,6 +22,7 @@ import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 import java.util.Properties;
 import java.util.stream.Collectors;
 
@@ -245,18 +246,21 @@ public class JdbcBaseDAO {
      * ITEMS DAOs *
      **************/
     public @Nullable Integer doPingDB() {
-        return Yank.queryScalar(sqlPingDB, (Class<@Nullable Integer>) Integer.class, null);
+        final @Nullable Integer result = Yank.queryScalar(sqlPingDB, Integer.class, null);
+        return result;
     }
 
     public @Nullable String doGetDB() {
-        return Yank.queryScalar(sqlGetDB, (Class<@Nullable String>) String.class, null);
+        final @Nullable String result = Yank.queryScalar(sqlGetDB, String.class, null);
+        return result;
     }
 
     public boolean doIfTableExists(ItemsVO vo) {
         String sql = StringUtilsExt.replaceArrayMerge(sqlIfTableExists, new String[] { "#searchTable#" },
                 new String[] { vo.getItemsManageTable() });
         logger.debug("JDBC::doIfTableExists sql={}", sql);
-        return Yank.queryScalar(sql, (Class<@Nullable String>) String.class, null) != null;
+        final @Nullable String result = Yank.queryScalar(sql, String.class, null);
+        return Objects.nonNull(result);
     }
 
     public Long doCreateNewEntryInItemsTable(ItemsVO vo) {
@@ -321,7 +325,7 @@ public class JdbcBaseDAO {
         String sql = StringUtilsExt.replaceArrayMerge(sqlInsertItemValue,
                 new String[] { "#tableName#", "#tablePrimaryValue#" },
                 new String[] { storedVO.getTableName(), sqlTypes.get("tablePrimaryValue") });
-        Object[] params = new Object[] { storedVO.getValue(), storedVO.getValue() };
+        Object[] params = { storedVO.getValue(), storedVO.getValue() };
         logger.debug("JDBC::doStoreItemValue sql={} value='{}'", sql, storedVO.getValue());
         Yank.execute(sql, params);
     }
@@ -331,7 +335,7 @@ public class JdbcBaseDAO {
         String sql = StringUtilsExt.replaceArrayMerge(sqlInsertItemValue,
                 new String[] { "#tableName#", "#tablePrimaryValue#" }, new String[] { storedVO.getTableName(), "?" });
         java.sql.Timestamp timestamp = new java.sql.Timestamp(date.toInstant().toEpochMilli());
-        Object[] params = new Object[] { timestamp, storedVO.getValue(), storedVO.getValue() };
+        Object[] params = { timestamp, storedVO.getValue(), storedVO.getValue() };
         logger.debug("JDBC::doStoreItemValue sql={} timestamp={} value='{}'", sql, timestamp, storedVO.getValue());
         Yank.execute(sql, params);
     }
index 431ee56db64c76793ee7419c0b3c80a8d0d28ad3..4ee6c2d4cedb8c5ed0d0e47833c3f40507a3551f 100644 (file)
@@ -14,6 +14,7 @@ package org.openhab.persistence.jdbc.db;
 
 import java.time.ZoneId;
 import java.util.List;
+import java.util.Objects;
 import java.util.stream.Collectors;
 
 import javax.measure.Quantity;
@@ -44,13 +45,16 @@ import org.slf4j.LoggerFactory;
  */
 @NonNullByDefault
 public class JdbcDerbyDAO extends JdbcBaseDAO {
+    private static final String DRIVER_CLASS_NAME = org.apache.derby.jdbc.EmbeddedDriver.class.getName();
+    @SuppressWarnings("unused")
+    private static final String DATA_SOURCE_CLASS_NAME = org.apache.derby.jdbc.EmbeddedDataSource.class.getName();
+
     private final Logger logger = LoggerFactory.getLogger(JdbcDerbyDAO.class);
 
     /********
      * INIT *
      ********/
     public JdbcDerbyDAO() {
-        super();
         initSqlTypes();
         initDbProps();
         initSqlQueries();
@@ -84,9 +88,9 @@ public class JdbcDerbyDAO extends JdbcBaseDAO {
     private void initDbProps() {
         // Properties for HikariCP
         // Use driverClassName
-        databaseProps.setProperty("driverClassName", "org.apache.derby.jdbc.EmbeddedDriver");
+        databaseProps.setProperty("driverClassName", DRIVER_CLASS_NAME);
         // OR dataSourceClassName
-        // databaseProps.setProperty("dataSourceClassName", "org.apache.derby.jdbc.EmbeddedDataSource");
+        // databaseProps.setProperty("dataSourceClassName", DATA_SOURCE_CLASS_NAME);
         databaseProps.setProperty("maximumPoolSize", "1");
         databaseProps.setProperty("minimumIdle", "1");
     }
@@ -103,7 +107,7 @@ public class JdbcDerbyDAO extends JdbcBaseDAO {
      **************/
     @Override
     public @Nullable Integer doPingDB() {
-        return Yank.queryScalar(sqlPingDB, (Class<@Nullable Integer>) Integer.class, null);
+        return Yank.queryScalar(sqlPingDB, Integer.class, null);
     }
 
     @Override
@@ -111,7 +115,8 @@ public class JdbcDerbyDAO extends JdbcBaseDAO {
         String sql = StringUtilsExt.replaceArrayMerge(sqlIfTableExists, new String[] { "#searchTable#" },
                 new String[] { vo.getItemsManageTable().toUpperCase() });
         logger.debug("JDBC::doIfTableExists sql={}", sql);
-        return Yank.queryScalar(sql, (Class<@Nullable String>) String.class, null) != null;
+        final @Nullable String result = Yank.queryScalar(sql, String.class, null);
+        return Objects.nonNull(result);
     }
 
     @Override
@@ -158,7 +163,7 @@ public class JdbcDerbyDAO extends JdbcBaseDAO {
                 new String[] { "#tableName#", "#dbType#", "#tablePrimaryValue#" },
                 new String[] { storedVO.getTableName().toUpperCase(), storedVO.getDbType(),
                         sqlTypes.get("tablePrimaryValue") });
-        Object[] params = new Object[] { storedVO.getValue() };
+        Object[] params = { storedVO.getValue() };
         logger.debug("JDBC::doStoreItemValue sql={} value='{}'", sql, storedVO.getValue());
         Yank.execute(sql, params);
     }
index 8957f5538841f292d7a744df5f73677a5fdfe6f2..140f536672818ca36a06c78e9cc40781679bc38c 100644 (file)
@@ -30,13 +30,16 @@ import org.slf4j.LoggerFactory;
  */
 @NonNullByDefault
 public class JdbcH2DAO extends JdbcBaseDAO {
+    private static final String DRIVER_CLASS_NAME = org.h2.Driver.class.getName();
+    @SuppressWarnings("unused")
+    private static final String DATA_SOURCE_CLASS_NAME = org.h2.jdbcx.JdbcDataSource.class.getName();
+
     private final Logger logger = LoggerFactory.getLogger(JdbcH2DAO.class);
 
     /********
      * INIT *
      ********/
     public JdbcH2DAO() {
-        super();
         initSqlQueries();
         initSqlTypes();
         initDbProps();
@@ -61,9 +64,9 @@ public class JdbcH2DAO extends JdbcBaseDAO {
      */
     private void initDbProps() {
         // Properties for HikariCP
-        databaseProps.setProperty("driverClassName", "org.h2.Driver");
+        databaseProps.setProperty("driverClassName", DRIVER_CLASS_NAME);
         // driverClassName OR BETTER USE dataSourceClassName
-        // databaseProps.setProperty("dataSourceClassName", "org.h2.jdbcx.JdbcDataSource");
+        // databaseProps.setProperty("dataSourceClassName", DATA_SOURCE_CLASS_NAME);
     }
 
     /**************
@@ -79,7 +82,7 @@ public class JdbcH2DAO extends JdbcBaseDAO {
         String sql = StringUtilsExt.replaceArrayMerge(sqlInsertItemValue,
                 new String[] { "#tableName#", "#dbType#", "#tablePrimaryValue#" },
                 new String[] { storedVO.getTableName(), storedVO.getDbType(), sqlTypes.get("tablePrimaryValue") });
-        Object[] params = new Object[] { storedVO.getValue() };
+        Object[] params = { storedVO.getValue() };
         logger.debug("JDBC::doStoreItemValue sql={} value='{}'", sql, storedVO.getValue());
         Yank.execute(sql, params);
     }
index 8f26945e1bae6879a2588bb624e3acc64750c993..2fd77b4c78f36c32c1d72451e64cf54fa8a439cc 100644 (file)
@@ -32,13 +32,16 @@ import org.slf4j.LoggerFactory;
  */
 @NonNullByDefault
 public class JdbcHsqldbDAO extends JdbcBaseDAO {
+    private static final String DRIVER_CLASS_NAME = org.hsqldb.jdbcDriver.class.getName();
+    @SuppressWarnings("unused")
+    private static final String DATA_SOURCE_CLASS_NAME = org.hsqldb.jdbc.JDBCDataSource.class.getName();
+
     private final Logger logger = LoggerFactory.getLogger(JdbcHsqldbDAO.class);
 
     /********
      * INIT *
      ********/
     public JdbcHsqldbDAO() {
-        super();
         initSqlQueries();
         initSqlTypes();
         initDbProps();
@@ -71,7 +74,9 @@ public class JdbcHsqldbDAO extends JdbcBaseDAO {
      */
     private void initDbProps() {
         // Properties for HikariCP
-        databaseProps.setProperty("driverClassName", "org.hsqldb.jdbcDriver");
+        databaseProps.setProperty("driverClassName", DRIVER_CLASS_NAME);
+        // driverClassName OR BETTER USE dataSourceClassName
+        // databaseProps.setProperty("dataSourceClassName", DATA_SOURCE_CLASS_NAME);
     }
 
     /**************
@@ -79,7 +84,7 @@ public class JdbcHsqldbDAO extends JdbcBaseDAO {
      **************/
     @Override
     public @Nullable Integer doPingDB() {
-        return Yank.queryScalar(sqlPingDB, (Class<@Nullable Integer>) Integer.class, null);
+        return Yank.queryScalar(sqlPingDB, Integer.class, null);
     }
 
     @Override
@@ -111,7 +116,7 @@ public class JdbcHsqldbDAO extends JdbcBaseDAO {
                 new String[] { "#tableName#", "#dbType#", "#tableName#", "#tablePrimaryValue#" },
                 new String[] { storedVO.getTableName(), storedVO.getDbType(), storedVO.getTableName(),
                         sqlTypes.get("tablePrimaryValue") });
-        Object[] params = new Object[] { storedVO.getValue() };
+        Object[] params = { storedVO.getValue() };
         logger.debug("JDBC::doStoreItemValue sql={} value='{}'", sql, storedVO.getValue());
         Yank.execute(sql, params);
     }
index 86c8bbb9e6561166f1d857ac81e3952577d84e1a..740cc0f73d28ba951b6816ab51b73ea1c0b565d1 100644 (file)
@@ -12,6 +12,8 @@
  */
 package org.openhab.persistence.jdbc.db;
 
+import java.util.Objects;
+
 import org.eclipse.jdt.annotation.NonNullByDefault;
 import org.eclipse.jdt.annotation.Nullable;
 import org.knowm.yank.Yank;
@@ -28,13 +30,16 @@ import org.slf4j.LoggerFactory;
  */
 @NonNullByDefault
 public class JdbcMariadbDAO extends JdbcBaseDAO {
+    private static final String DRIVER_CLASS_NAME = org.mariadb.jdbc.Driver.class.getName();
+    @SuppressWarnings("unused")
+    private static final String DATA_SOURCE_CLASS_NAME = org.mariadb.jdbc.MariaDbDataSource.class.getName();
+
     private final Logger logger = LoggerFactory.getLogger(JdbcMariadbDAO.class);
 
     /********
      * INIT *
      ********/
     public JdbcMariadbDAO() {
-        super();
         initSqlTypes();
         initDbProps();
         initSqlQueries();
@@ -66,9 +71,9 @@ public class JdbcMariadbDAO extends JdbcBaseDAO {
 
         // Properties for HikariCP
         // Use driverClassName
-        databaseProps.setProperty("driverClassName", "org.mariadb.jdbc.Driver");
+        databaseProps.setProperty("driverClassName", DRIVER_CLASS_NAME);
         // driverClassName OR BETTER USE dataSourceClassName
-        // databaseProps.setProperty("dataSourceClassName", "org.mariadb.jdbc.MySQLDataSource");
+        // databaseProps.setProperty("dataSourceClassName", DATA_SOURCE_CLASS_NAME);
         databaseProps.setProperty("maximumPoolSize", "3");
         databaseProps.setProperty("minimumIdle", "2");
     }
@@ -91,8 +96,8 @@ public class JdbcMariadbDAO extends JdbcBaseDAO {
      **************/
     @Override
     public @Nullable Integer doPingDB() {
-        final @Nullable Long result = Yank.queryScalar(sqlPingDB, (Class<@Nullable Long>) Long.class, null);
-        return result != null ? result.intValue() : null;
+        final @Nullable Long result = Yank.queryScalar(sqlPingDB, Long.class, null);
+        return Objects.nonNull(result) ? result.intValue() : null;
     }
 
     /*************
index 962938b968ee98f9707f141f0ce9612052067319..b73f216fd9e440ddcbbab774c9e785ed79777f9b 100644 (file)
@@ -12,6 +12,8 @@
  */
 package org.openhab.persistence.jdbc.db;
 
+import java.util.Objects;
+
 import org.eclipse.jdt.annotation.NonNullByDefault;
 import org.eclipse.jdt.annotation.Nullable;
 import org.knowm.yank.Yank;
@@ -32,13 +34,16 @@ import org.slf4j.LoggerFactory;
  */
 @NonNullByDefault
 public class JdbcMysqlDAO extends JdbcBaseDAO {
+    private static final String DRIVER_CLASS_NAME = com.mysql.jdbc.Driver.class.getName();
+    @SuppressWarnings("unused")
+    private static final String DATA_SOURCE_CLASS_NAME = com.mysql.cj.jdbc.MysqlDataSource.class.getName();
+
     private final Logger logger = LoggerFactory.getLogger(JdbcMysqlDAO.class);
 
     /********
      * INIT *
      ********/
     public JdbcMysqlDAO() {
-        super();
         initSqlTypes();
         initDbProps();
         initSqlQueries();
@@ -69,9 +74,9 @@ public class JdbcMysqlDAO extends JdbcBaseDAO {
 
         // Properties for HikariCP
         // Use driverClassName
-        databaseProps.setProperty("driverClassName", "com.mysql.jdbc.Driver");
+        databaseProps.setProperty("driverClassName", DRIVER_CLASS_NAME);
         // OR dataSourceClassName
-        // databaseProps.setProperty("dataSourceClassName", "com.mysql.jdbc.jdbc2.optional.MysqlDataSource");
+        // databaseProps.setProperty("dataSourceClassName", DATA_SOURCE_CLASS_NAME);
         databaseProps.setProperty("maximumPoolSize", "3");
         databaseProps.setProperty("minimumIdle", "2");
     }
@@ -94,8 +99,8 @@ public class JdbcMysqlDAO extends JdbcBaseDAO {
      **************/
     @Override
     public @Nullable Integer doPingDB() {
-        final @Nullable Long result = Yank.queryScalar(sqlPingDB, (Class<@Nullable Long>) Long.class, null);
-        return result != null ? result.intValue() : null;
+        final @Nullable Long result = Yank.queryScalar(sqlPingDB, Long.class, null);
+        return Objects.nonNull(result) ? result.intValue() : null;
     }
 
     /*************
index d754b4d02ab49ddedc7ffa7130f4676729415f23..9c419af8c2c587c4df815dad6d0dc46b76d5da41 100644 (file)
@@ -36,13 +36,16 @@ import org.slf4j.LoggerFactory;
  */
 @NonNullByDefault
 public class JdbcPostgresqlDAO extends JdbcBaseDAO {
+    private static final String DRIVER_CLASS_NAME = org.postgresql.Driver.class.getName();
+    @SuppressWarnings("unused")
+    private static final String DATA_SOURCE_CLASS_NAME = org.postgresql.ds.PGSimpleDataSource.class.getName();
+
     private final Logger logger = LoggerFactory.getLogger(JdbcPostgresqlDAO.class);
 
     /********
      * INIT *
      ********/
     public JdbcPostgresqlDAO() {
-        super();
         initSqlQueries();
         initSqlTypes();
         initDbProps();
@@ -94,9 +97,9 @@ public class JdbcPostgresqlDAO extends JdbcBaseDAO {
         // databaseProps.setProperty("dataSource.prepStmtCacheSqlLimit", "2048");
 
         // Properties for HikariCP
-        databaseProps.setProperty("driverClassName", "org.postgresql.Driver");
+        databaseProps.setProperty("driverClassName", DRIVER_CLASS_NAME);
         // driverClassName OR BETTER USE dataSourceClassName
-        // databaseProps.setProperty("dataSourceClassName", "org.postgresql.ds.PGSimpleDataSource");
+        // databaseProps.setProperty("dataSourceClassName", DATA_SOURCE_CLASS_NAME);
         // databaseProps.setProperty("maximumPoolSize", "3");
         // databaseProps.setProperty("minimumIdle", "2");
     }
@@ -141,7 +144,7 @@ public class JdbcPostgresqlDAO extends JdbcBaseDAO {
         String sql = StringUtilsExt.replaceArrayMerge(sqlInsertItemValue,
                 new String[] { "#tableName#", "#dbType#", "#tablePrimaryValue#" },
                 new String[] { storedVO.getTableName(), storedVO.getDbType(), sqlTypes.get("tablePrimaryValue") });
-        Object[] params = new Object[] { storedVO.getValue() };
+        Object[] params = { storedVO.getValue() };
         logger.debug("JDBC::doStoreItemValue sql={} value='{}'", sql, storedVO.getValue());
         Yank.execute(sql, params);
     }
index 5096d546c89cb2b3f400048029e051ffa5a2fff2..4559e1b1831536f814095e118e23a2161b25a401 100644 (file)
@@ -32,13 +32,16 @@ import org.slf4j.LoggerFactory;
  */
 @NonNullByDefault
 public class JdbcSqliteDAO extends JdbcBaseDAO {
+    private static final String DRIVER_CLASS_NAME = org.sqlite.JDBC.class.getName();
+    @SuppressWarnings("unused")
+    private static final String DATA_SOURCE_CLASS_NAME = org.sqlite.SQLiteDataSource.class.getName();
+
     private final Logger logger = LoggerFactory.getLogger(JdbcSqliteDAO.class);
 
     /********
      * INIT *
      ********/
     public JdbcSqliteDAO() {
-        super();
         initSqlQueries();
         initSqlTypes();
         initDbProps();
@@ -66,9 +69,9 @@ public class JdbcSqliteDAO extends JdbcBaseDAO {
      */
     private void initDbProps() {
         // Properties for HikariCP
-        databaseProps.setProperty("driverClassName", "org.sqlite.JDBC");
+        databaseProps.setProperty("driverClassName", DRIVER_CLASS_NAME);
         // driverClassName OR BETTER USE dataSourceClassName
-        // databaseProps.setProperty("dataSourceClassName", "org.sqlite.SQLiteDataSource");
+        // databaseProps.setProperty("dataSourceClassName", DATA_SOURCE_CLASS_NAME);
     }
 
     /**************
@@ -77,7 +80,7 @@ public class JdbcSqliteDAO extends JdbcBaseDAO {
 
     @Override
     public @Nullable String doGetDB() {
-        return Yank.queryColumn(sqlGetDB, "file", (Class<@Nullable String>) String.class, null).get(0);
+        return Yank.queryColumn(sqlGetDB, "file", String.class, null).get(0);
     }
 
     @Override
@@ -99,7 +102,7 @@ public class JdbcSqliteDAO extends JdbcBaseDAO {
         String sql = StringUtilsExt.replaceArrayMerge(sqlInsertItemValue,
                 new String[] { "#tableName#", "#dbType#", "#tablePrimaryValue#" },
                 new String[] { storedVO.getTableName(), storedVO.getDbType(), sqlTypes.get("tablePrimaryValue") });
-        Object[] params = new Object[] { storedVO.getValue() };
+        Object[] params = { storedVO.getValue() };
         logger.debug("JDBC::doStoreItemValue sql={} value='{}'", sql, storedVO.getValue());
         Yank.execute(sql, params);
     }
index 90b4e1cfc093e255df27763320c5d38084d93b4b..a2342050c77abd6b54d9ae4309c0eb5171e8b6f2 100644 (file)
@@ -272,7 +272,7 @@ public class JdbcConfiguration {
             }
             matcher.reset();
             matcher.find();
-            if (!matcher.group(1).equals("sqltype")) {
+            if (!"sqltype".equals(matcher.group(1))) {
                 continue;
             }
             String itemType = matcher.group(2);
@@ -304,7 +304,7 @@ public class JdbcConfiguration {
             if (serviceName != null) {
                 switch (serviceName) {
                     case "derby":
-                        warn += "\tDerby:     version >= 10.11.1.1 from          https://mvnrepository.com/artifact/org.apache.derby/derby\n";
+                        warn += "\tDerby:     version >= 10.14.2.0 from          https://mvnrepository.com/artifact/org.apache.derby/derby\n";
                         break;
                     case "h2":
                         warn += "\tH2:        version >= 1.4.189 from            https://mvnrepository.com/artifact/com.h2database/h2\n";
@@ -313,13 +313,13 @@ public class JdbcConfiguration {
                         warn += "\tHSQLDB:    version >= 2.3.3 from              https://mvnrepository.com/artifact/org.hsqldb/hsqldb\n";
                         break;
                     case "mariadb":
-                        warn += "\tMariaDB:   version >= 1.2.0 from              https://mvnrepository.com/artifact/org.mariadb.jdbc/mariadb-java-client\n";
+                        warn += "\tMariaDB:   version >= 1.4.6 from              https://mvnrepository.com/artifact/org.mariadb.jdbc/mariadb-java-client\n";
                         break;
                     case "mysql":
-                        warn += "\tMySQL:     version >= 5.1.36 from             https://mvnrepository.com/artifact/mysql/mysql-connector-java\n";
+                        warn += "\tMySQL:     version >= 8.0.30 from             https://mvnrepository.com/artifact/mysql/mysql-connector-java\n";
                         break;
                     case "postgresql":
-                        warn += "\tPostgreSQL:version >= 9.4.1208 from           https://mvnrepository.com/artifact/org.postgresql/postgresql\n";
+                        warn += "\tPostgreSQL:version >= 42.4.1 from             https://mvnrepository.com/artifact/org.postgresql/postgresql\n";
                         break;
                     case "sqlite":
                         warn += "\tSQLite:    version >= 3.16.1 from             https://mvnrepository.com/artifact/org.xerial/sqlite-jdbc\n";
diff --git a/bundles/org.openhab.persistence.jdbc/src/main/java/org/openhab/persistence/jdbc/internal/package-info.java b/bundles/org.openhab.persistence.jdbc/src/main/java/org/openhab/persistence/jdbc/internal/package-info.java
new file mode 100644 (file)
index 0000000..6fc8b9f
--- /dev/null
@@ -0,0 +1,20 @@
+/**
+ * Copyright (c) 2010-2022 Contributors to the openHAB project
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ */
+@org.osgi.annotation.bundle.Header(name = org.osgi.framework.Constants.DYNAMICIMPORT_PACKAGE, value = "*")
+package org.openhab.persistence.jdbc.internal;
+
+/**
+ * This dynamic import is required for loading the JDBC driver class.
+ *
+ * @author Wouter Born - Initial contribution
+ */