[jdbc] Upgrade derby from 10.12.1.1 to 10.14.2.0 (#13038)

* 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>
This commit is contained in:
dependabot[bot] 2022-10-11 21:54:19 +02:00 committed by GitHub
parent 4e69e17f41
commit 97956d30e9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
13 changed files with 100 additions and 47 deletions

View File

@ -9,7 +9,7 @@ The following databases are currently supported and tested:
| Database | Tested Driver / Version | | 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) | | [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) | | [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) | | [MariaDB](https://mariadb.org/) | [mariadb-java-client-1.4.6.jar](https://mvnrepository.com/artifact/org.mariadb.jdbc/mariadb-java-client) |

View File

@ -15,7 +15,7 @@
<name>openHAB Add-ons :: Bundles :: Persistence Service :: JDBC</name> <name>openHAB Add-ons :: Bundles :: Persistence Service :: JDBC</name>
<properties> <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> <dep.noembedding>derby,h2,hsqldb,mariadb-java-client,mysql-connector-java,postgresql,sqlite-jdbc</dep.noembedding>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
@ -25,7 +25,7 @@
<yank.version>3.2.0</yank.version> <yank.version>3.2.0</yank.version>
<!-- JDBC database driver versions --> <!-- 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> <h2.version>1.4.191</h2.version>
<hsqldb.version>2.3.3</hsqldb.version> <hsqldb.version>2.3.3</hsqldb.version>
<mariadb.version>1.4.6</mariadb.version> <mariadb.version>1.4.6</mariadb.version>

View File

@ -6,7 +6,7 @@
<feature name="openhab-persistence-jdbc-derby" description="JDBC Persistence Apache Derby" version="${project.version}"> <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> <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> <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> <bundle start-level="80">mvn:org.openhab.addons.bundles/org.openhab.persistence.jdbc/${project.version}</bundle>
</feature> </feature>

View File

@ -22,6 +22,7 @@ import java.util.HashMap;
import java.util.Iterator; import java.util.Iterator;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Objects;
import java.util.Properties; import java.util.Properties;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -245,18 +246,21 @@ public class JdbcBaseDAO {
* ITEMS DAOs * * ITEMS DAOs *
**************/ **************/
public @Nullable Integer doPingDB() { 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() { 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) { public boolean doIfTableExists(ItemsVO vo) {
String sql = StringUtilsExt.replaceArrayMerge(sqlIfTableExists, new String[] { "#searchTable#" }, String sql = StringUtilsExt.replaceArrayMerge(sqlIfTableExists, new String[] { "#searchTable#" },
new String[] { vo.getItemsManageTable() }); new String[] { vo.getItemsManageTable() });
logger.debug("JDBC::doIfTableExists sql={}", sql); 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) { public Long doCreateNewEntryInItemsTable(ItemsVO vo) {
@ -321,7 +325,7 @@ public class JdbcBaseDAO {
String sql = StringUtilsExt.replaceArrayMerge(sqlInsertItemValue, String sql = StringUtilsExt.replaceArrayMerge(sqlInsertItemValue,
new String[] { "#tableName#", "#tablePrimaryValue#" }, new String[] { "#tableName#", "#tablePrimaryValue#" },
new String[] { storedVO.getTableName(), sqlTypes.get("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()); logger.debug("JDBC::doStoreItemValue sql={} value='{}'", sql, storedVO.getValue());
Yank.execute(sql, params); Yank.execute(sql, params);
} }
@ -331,7 +335,7 @@ public class JdbcBaseDAO {
String sql = StringUtilsExt.replaceArrayMerge(sqlInsertItemValue, String sql = StringUtilsExt.replaceArrayMerge(sqlInsertItemValue,
new String[] { "#tableName#", "#tablePrimaryValue#" }, new String[] { storedVO.getTableName(), "?" }); new String[] { "#tableName#", "#tablePrimaryValue#" }, new String[] { storedVO.getTableName(), "?" });
java.sql.Timestamp timestamp = new java.sql.Timestamp(date.toInstant().toEpochMilli()); 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()); logger.debug("JDBC::doStoreItemValue sql={} timestamp={} value='{}'", sql, timestamp, storedVO.getValue());
Yank.execute(sql, params); Yank.execute(sql, params);
} }

View File

@ -14,6 +14,7 @@ package org.openhab.persistence.jdbc.db;
import java.time.ZoneId; import java.time.ZoneId;
import java.util.List; import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import javax.measure.Quantity; import javax.measure.Quantity;
@ -44,13 +45,16 @@ import org.slf4j.LoggerFactory;
*/ */
@NonNullByDefault @NonNullByDefault
public class JdbcDerbyDAO extends JdbcBaseDAO { 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); private final Logger logger = LoggerFactory.getLogger(JdbcDerbyDAO.class);
/******** /********
* INIT * * INIT *
********/ ********/
public JdbcDerbyDAO() { public JdbcDerbyDAO() {
super();
initSqlTypes(); initSqlTypes();
initDbProps(); initDbProps();
initSqlQueries(); initSqlQueries();
@ -84,9 +88,9 @@ public class JdbcDerbyDAO extends JdbcBaseDAO {
private void initDbProps() { private void initDbProps() {
// Properties for HikariCP // Properties for HikariCP
// Use driverClassName // Use driverClassName
databaseProps.setProperty("driverClassName", "org.apache.derby.jdbc.EmbeddedDriver"); databaseProps.setProperty("driverClassName", DRIVER_CLASS_NAME);
// OR dataSourceClassName // OR dataSourceClassName
// databaseProps.setProperty("dataSourceClassName", "org.apache.derby.jdbc.EmbeddedDataSource"); // databaseProps.setProperty("dataSourceClassName", DATA_SOURCE_CLASS_NAME);
databaseProps.setProperty("maximumPoolSize", "1"); databaseProps.setProperty("maximumPoolSize", "1");
databaseProps.setProperty("minimumIdle", "1"); databaseProps.setProperty("minimumIdle", "1");
} }
@ -103,7 +107,7 @@ public class JdbcDerbyDAO extends JdbcBaseDAO {
**************/ **************/
@Override @Override
public @Nullable Integer doPingDB() { public @Nullable Integer doPingDB() {
return Yank.queryScalar(sqlPingDB, (Class<@Nullable Integer>) Integer.class, null); return Yank.queryScalar(sqlPingDB, Integer.class, null);
} }
@Override @Override
@ -111,7 +115,8 @@ public class JdbcDerbyDAO extends JdbcBaseDAO {
String sql = StringUtilsExt.replaceArrayMerge(sqlIfTableExists, new String[] { "#searchTable#" }, String sql = StringUtilsExt.replaceArrayMerge(sqlIfTableExists, new String[] { "#searchTable#" },
new String[] { vo.getItemsManageTable().toUpperCase() }); new String[] { vo.getItemsManageTable().toUpperCase() });
logger.debug("JDBC::doIfTableExists sql={}", sql); 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 @Override
@ -158,7 +163,7 @@ public class JdbcDerbyDAO extends JdbcBaseDAO {
new String[] { "#tableName#", "#dbType#", "#tablePrimaryValue#" }, new String[] { "#tableName#", "#dbType#", "#tablePrimaryValue#" },
new String[] { storedVO.getTableName().toUpperCase(), storedVO.getDbType(), new String[] { storedVO.getTableName().toUpperCase(), storedVO.getDbType(),
sqlTypes.get("tablePrimaryValue") }); sqlTypes.get("tablePrimaryValue") });
Object[] params = new Object[] { storedVO.getValue() }; Object[] params = { storedVO.getValue() };
logger.debug("JDBC::doStoreItemValue sql={} value='{}'", sql, storedVO.getValue()); logger.debug("JDBC::doStoreItemValue sql={} value='{}'", sql, storedVO.getValue());
Yank.execute(sql, params); Yank.execute(sql, params);
} }

View File

@ -30,13 +30,16 @@ import org.slf4j.LoggerFactory;
*/ */
@NonNullByDefault @NonNullByDefault
public class JdbcH2DAO extends JdbcBaseDAO { 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); private final Logger logger = LoggerFactory.getLogger(JdbcH2DAO.class);
/******** /********
* INIT * * INIT *
********/ ********/
public JdbcH2DAO() { public JdbcH2DAO() {
super();
initSqlQueries(); initSqlQueries();
initSqlTypes(); initSqlTypes();
initDbProps(); initDbProps();
@ -61,9 +64,9 @@ public class JdbcH2DAO extends JdbcBaseDAO {
*/ */
private void initDbProps() { private void initDbProps() {
// Properties for HikariCP // Properties for HikariCP
databaseProps.setProperty("driverClassName", "org.h2.Driver"); databaseProps.setProperty("driverClassName", DRIVER_CLASS_NAME);
// driverClassName OR BETTER USE dataSourceClassName // 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, String sql = StringUtilsExt.replaceArrayMerge(sqlInsertItemValue,
new String[] { "#tableName#", "#dbType#", "#tablePrimaryValue#" }, new String[] { "#tableName#", "#dbType#", "#tablePrimaryValue#" },
new String[] { storedVO.getTableName(), storedVO.getDbType(), sqlTypes.get("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()); logger.debug("JDBC::doStoreItemValue sql={} value='{}'", sql, storedVO.getValue());
Yank.execute(sql, params); Yank.execute(sql, params);
} }

View File

@ -32,13 +32,16 @@ import org.slf4j.LoggerFactory;
*/ */
@NonNullByDefault @NonNullByDefault
public class JdbcHsqldbDAO extends JdbcBaseDAO { 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); private final Logger logger = LoggerFactory.getLogger(JdbcHsqldbDAO.class);
/******** /********
* INIT * * INIT *
********/ ********/
public JdbcHsqldbDAO() { public JdbcHsqldbDAO() {
super();
initSqlQueries(); initSqlQueries();
initSqlTypes(); initSqlTypes();
initDbProps(); initDbProps();
@ -71,7 +74,9 @@ public class JdbcHsqldbDAO extends JdbcBaseDAO {
*/ */
private void initDbProps() { private void initDbProps() {
// Properties for HikariCP // 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 @Override
public @Nullable Integer doPingDB() { public @Nullable Integer doPingDB() {
return Yank.queryScalar(sqlPingDB, (Class<@Nullable Integer>) Integer.class, null); return Yank.queryScalar(sqlPingDB, Integer.class, null);
} }
@Override @Override
@ -111,7 +116,7 @@ public class JdbcHsqldbDAO extends JdbcBaseDAO {
new String[] { "#tableName#", "#dbType#", "#tableName#", "#tablePrimaryValue#" }, new String[] { "#tableName#", "#dbType#", "#tableName#", "#tablePrimaryValue#" },
new String[] { storedVO.getTableName(), storedVO.getDbType(), storedVO.getTableName(), new String[] { storedVO.getTableName(), storedVO.getDbType(), storedVO.getTableName(),
sqlTypes.get("tablePrimaryValue") }); sqlTypes.get("tablePrimaryValue") });
Object[] params = new Object[] { storedVO.getValue() }; Object[] params = { storedVO.getValue() };
logger.debug("JDBC::doStoreItemValue sql={} value='{}'", sql, storedVO.getValue()); logger.debug("JDBC::doStoreItemValue sql={} value='{}'", sql, storedVO.getValue());
Yank.execute(sql, params); Yank.execute(sql, params);
} }

View File

@ -12,6 +12,8 @@
*/ */
package org.openhab.persistence.jdbc.db; package org.openhab.persistence.jdbc.db;
import java.util.Objects;
import org.eclipse.jdt.annotation.NonNullByDefault; import org.eclipse.jdt.annotation.NonNullByDefault;
import org.eclipse.jdt.annotation.Nullable; import org.eclipse.jdt.annotation.Nullable;
import org.knowm.yank.Yank; import org.knowm.yank.Yank;
@ -28,13 +30,16 @@ import org.slf4j.LoggerFactory;
*/ */
@NonNullByDefault @NonNullByDefault
public class JdbcMariadbDAO extends JdbcBaseDAO { 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); private final Logger logger = LoggerFactory.getLogger(JdbcMariadbDAO.class);
/******** /********
* INIT * * INIT *
********/ ********/
public JdbcMariadbDAO() { public JdbcMariadbDAO() {
super();
initSqlTypes(); initSqlTypes();
initDbProps(); initDbProps();
initSqlQueries(); initSqlQueries();
@ -66,9 +71,9 @@ public class JdbcMariadbDAO extends JdbcBaseDAO {
// Properties for HikariCP // Properties for HikariCP
// Use driverClassName // Use driverClassName
databaseProps.setProperty("driverClassName", "org.mariadb.jdbc.Driver"); databaseProps.setProperty("driverClassName", DRIVER_CLASS_NAME);
// driverClassName OR BETTER USE dataSourceClassName // 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("maximumPoolSize", "3");
databaseProps.setProperty("minimumIdle", "2"); databaseProps.setProperty("minimumIdle", "2");
} }
@ -91,8 +96,8 @@ public class JdbcMariadbDAO extends JdbcBaseDAO {
**************/ **************/
@Override @Override
public @Nullable Integer doPingDB() { public @Nullable Integer doPingDB() {
final @Nullable Long result = Yank.queryScalar(sqlPingDB, (Class<@Nullable Long>) Long.class, null); final @Nullable Long result = Yank.queryScalar(sqlPingDB, Long.class, null);
return result != null ? result.intValue() : null; return Objects.nonNull(result) ? result.intValue() : null;
} }
/************* /*************

View File

@ -12,6 +12,8 @@
*/ */
package org.openhab.persistence.jdbc.db; package org.openhab.persistence.jdbc.db;
import java.util.Objects;
import org.eclipse.jdt.annotation.NonNullByDefault; import org.eclipse.jdt.annotation.NonNullByDefault;
import org.eclipse.jdt.annotation.Nullable; import org.eclipse.jdt.annotation.Nullable;
import org.knowm.yank.Yank; import org.knowm.yank.Yank;
@ -32,13 +34,16 @@ import org.slf4j.LoggerFactory;
*/ */
@NonNullByDefault @NonNullByDefault
public class JdbcMysqlDAO extends JdbcBaseDAO { 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); private final Logger logger = LoggerFactory.getLogger(JdbcMysqlDAO.class);
/******** /********
* INIT * * INIT *
********/ ********/
public JdbcMysqlDAO() { public JdbcMysqlDAO() {
super();
initSqlTypes(); initSqlTypes();
initDbProps(); initDbProps();
initSqlQueries(); initSqlQueries();
@ -69,9 +74,9 @@ public class JdbcMysqlDAO extends JdbcBaseDAO {
// Properties for HikariCP // Properties for HikariCP
// Use driverClassName // Use driverClassName
databaseProps.setProperty("driverClassName", "com.mysql.jdbc.Driver"); databaseProps.setProperty("driverClassName", DRIVER_CLASS_NAME);
// OR dataSourceClassName // OR dataSourceClassName
// databaseProps.setProperty("dataSourceClassName", "com.mysql.jdbc.jdbc2.optional.MysqlDataSource"); // databaseProps.setProperty("dataSourceClassName", DATA_SOURCE_CLASS_NAME);
databaseProps.setProperty("maximumPoolSize", "3"); databaseProps.setProperty("maximumPoolSize", "3");
databaseProps.setProperty("minimumIdle", "2"); databaseProps.setProperty("minimumIdle", "2");
} }
@ -94,8 +99,8 @@ public class JdbcMysqlDAO extends JdbcBaseDAO {
**************/ **************/
@Override @Override
public @Nullable Integer doPingDB() { public @Nullable Integer doPingDB() {
final @Nullable Long result = Yank.queryScalar(sqlPingDB, (Class<@Nullable Long>) Long.class, null); final @Nullable Long result = Yank.queryScalar(sqlPingDB, Long.class, null);
return result != null ? result.intValue() : null; return Objects.nonNull(result) ? result.intValue() : null;
} }
/************* /*************

View File

@ -36,13 +36,16 @@ import org.slf4j.LoggerFactory;
*/ */
@NonNullByDefault @NonNullByDefault
public class JdbcPostgresqlDAO extends JdbcBaseDAO { 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); private final Logger logger = LoggerFactory.getLogger(JdbcPostgresqlDAO.class);
/******** /********
* INIT * * INIT *
********/ ********/
public JdbcPostgresqlDAO() { public JdbcPostgresqlDAO() {
super();
initSqlQueries(); initSqlQueries();
initSqlTypes(); initSqlTypes();
initDbProps(); initDbProps();
@ -94,9 +97,9 @@ public class JdbcPostgresqlDAO extends JdbcBaseDAO {
// databaseProps.setProperty("dataSource.prepStmtCacheSqlLimit", "2048"); // databaseProps.setProperty("dataSource.prepStmtCacheSqlLimit", "2048");
// Properties for HikariCP // Properties for HikariCP
databaseProps.setProperty("driverClassName", "org.postgresql.Driver"); databaseProps.setProperty("driverClassName", DRIVER_CLASS_NAME);
// driverClassName OR BETTER USE dataSourceClassName // 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("maximumPoolSize", "3");
// databaseProps.setProperty("minimumIdle", "2"); // databaseProps.setProperty("minimumIdle", "2");
} }
@ -141,7 +144,7 @@ public class JdbcPostgresqlDAO extends JdbcBaseDAO {
String sql = StringUtilsExt.replaceArrayMerge(sqlInsertItemValue, String sql = StringUtilsExt.replaceArrayMerge(sqlInsertItemValue,
new String[] { "#tableName#", "#dbType#", "#tablePrimaryValue#" }, new String[] { "#tableName#", "#dbType#", "#tablePrimaryValue#" },
new String[] { storedVO.getTableName(), storedVO.getDbType(), sqlTypes.get("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()); logger.debug("JDBC::doStoreItemValue sql={} value='{}'", sql, storedVO.getValue());
Yank.execute(sql, params); Yank.execute(sql, params);
} }

View File

@ -32,13 +32,16 @@ import org.slf4j.LoggerFactory;
*/ */
@NonNullByDefault @NonNullByDefault
public class JdbcSqliteDAO extends JdbcBaseDAO { 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); private final Logger logger = LoggerFactory.getLogger(JdbcSqliteDAO.class);
/******** /********
* INIT * * INIT *
********/ ********/
public JdbcSqliteDAO() { public JdbcSqliteDAO() {
super();
initSqlQueries(); initSqlQueries();
initSqlTypes(); initSqlTypes();
initDbProps(); initDbProps();
@ -66,9 +69,9 @@ public class JdbcSqliteDAO extends JdbcBaseDAO {
*/ */
private void initDbProps() { private void initDbProps() {
// Properties for HikariCP // Properties for HikariCP
databaseProps.setProperty("driverClassName", "org.sqlite.JDBC"); databaseProps.setProperty("driverClassName", DRIVER_CLASS_NAME);
// driverClassName OR BETTER USE dataSourceClassName // 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 @Override
public @Nullable String doGetDB() { 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 @Override
@ -99,7 +102,7 @@ public class JdbcSqliteDAO extends JdbcBaseDAO {
String sql = StringUtilsExt.replaceArrayMerge(sqlInsertItemValue, String sql = StringUtilsExt.replaceArrayMerge(sqlInsertItemValue,
new String[] { "#tableName#", "#dbType#", "#tablePrimaryValue#" }, new String[] { "#tableName#", "#dbType#", "#tablePrimaryValue#" },
new String[] { storedVO.getTableName(), storedVO.getDbType(), sqlTypes.get("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()); logger.debug("JDBC::doStoreItemValue sql={} value='{}'", sql, storedVO.getValue());
Yank.execute(sql, params); Yank.execute(sql, params);
} }

View File

@ -272,7 +272,7 @@ public class JdbcConfiguration {
} }
matcher.reset(); matcher.reset();
matcher.find(); matcher.find();
if (!matcher.group(1).equals("sqltype")) { if (!"sqltype".equals(matcher.group(1))) {
continue; continue;
} }
String itemType = matcher.group(2); String itemType = matcher.group(2);
@ -304,7 +304,7 @@ public class JdbcConfiguration {
if (serviceName != null) { if (serviceName != null) {
switch (serviceName) { switch (serviceName) {
case "derby": 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; break;
case "h2": case "h2":
warn += "\tH2: version >= 1.4.189 from https://mvnrepository.com/artifact/com.h2database/h2\n"; 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"; warn += "\tHSQLDB: version >= 2.3.3 from https://mvnrepository.com/artifact/org.hsqldb/hsqldb\n";
break; break;
case "mariadb": 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; break;
case "mysql": 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; break;
case "postgresql": 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; break;
case "sqlite": case "sqlite":
warn += "\tSQLite: version >= 3.16.1 from https://mvnrepository.com/artifact/org.xerial/sqlite-jdbc\n"; warn += "\tSQLite: version >= 3.16.1 from https://mvnrepository.com/artifact/org.xerial/sqlite-jdbc\n";

View File

@ -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
*/