{"id":22055,"date":"2023-01-27T18:00:46","date_gmt":"2023-01-27T17:00:46","guid":{"rendered":"https:\/\/www.dbi-services.com\/blog\/?p=22055"},"modified":"2025-10-24T09:38:35","modified_gmt":"2025-10-24T07:38:35","slug":"a-generic-jdbc-tester-part-i","status":"publish","type":"post","link":"https:\/\/www.dbi-services.com\/blog\/a-generic-jdbc-tester-part-i\/","title":{"rendered":"A generic jdbc tester (part I)"},"content":{"rendered":"\n<p>I was recently working on the re-configuration of an existing OpenText Documentum content server\u2019s docbase (a docbase is like a database but for documents). Documentum docbases store the documents\u2019 metadata into relational databases and their content on filesystems. Several RDBMS are supported, e.g. Oracle, SQLServer, and the open source PostgreSQL. The tool I was using, the Migration Utility, is a java program that connects to the underlying database through the JDBC API to change object ids and other attributes. So, prior to launching that program, I had to make sure that the database could be reached with the provided connectivity parameters, typically a host name, a port number, and a database name or service name or connect string, plus an account\u2019s credentials, and I needed a tool for that. Like any well-trained monkey I searched it on-line first. Unsurprisingly, lots of such tools are available in source form but quite strangely I could not find a tool that supports more than one RDBMS flavor. In effect, the available utilities either work for, say, Oracle or PostgreSQL, but not for both. Isn\u2019t JDBC supposed to be an universal API to access any vendor\u2019s relational database once its drivers are provided ? Maybe I did not dig deep enough but after a while I decided to write one myself as it would likely take less time than going through hundreds of click baits and other questionable links. However, in order not to reinvent the wheel, I took inspiration of the existing work and only did some very minor modifications. So, here it is, a single generic enough JDBC program to connects to any database whose JDBC drivers are provided. To prove it, it will be tested against 9 different data sources and if this is not conclusive, I don\u2019t know what will be.<\/p>\n\n\n\n<p>The source code can also be found in github <a href=\"https:\/\/github.com\/dbiservices\/dbi-db-generic-jdbc-tester\" target=\"_blank\" rel=\"noreferrer noopener\">here<\/a> but since the program is really small, I pasted it down below.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">The program<\/h4>\n\n\n\n<p>Here is the source code of <code>jdbc_tester_generic.java<\/code>.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: java; highlight: [7,8,33,44,50,51,54,58,59]; title: ; notranslate\" title=\"\">\n\/\/ generic test utility for jdbc connections;\n\/\/ cec@dbi-services;\n\/\/ works with any jdbc driver since its name is passed as parameter;\n\/\/ to compile:\n\/\/   javac jdbc_tester_generic.java\n\/\/ to execute, specify the JDBC jar to use to -cp at run-time; see example below;\nimport java.sql.DriverManager;\nimport java.sql.*;\n\npublic class jdbc_tester_generic {\n    public static void main(String&#x5B;] args) throws ClassNotFoundException {\n        System.out.println(&quot;The command-line parameters are:&quot;);\n        for (int i = 0; i &lt; args.length; i++) {\n            System.out.println(&quot;arg &quot; + i + &quot; = &quot; + args&#x5B;i]);\n        }\n\n        if (args.length != 5) {\n           System.out.println(&quot;Invalid number of arguments: 5 arguments with the following format are required: driver user_name password url sqlquery&quot;);\n\t       System.out.println(&quot;e.g.:&quot;);\n\t       System.out.println(&quot;   java -cp postgresql-42.5.1.jar:. jdbc_tester_generic org.postgresql.Driver dmadmin xxx jdbc:postgresql:\/\/localhost:5432\/mydb \\&quot;select &#039;now in postgresql db: &#039; || to_char(current_timestamp(0), &#039;DD\/MM\/YYYY HH24:MI:SS&#039;) as now;\\&quot;&quot;);\n\t       System.out.println(&quot;   java -cp ojdbc.jar:. jdbc_tester_generic oracle.jdbc.driver.OracleDriver dmadmin dmadmin jdbc:oracle:thin:@\/\/db:1521\/pdb1 \\&quot;select &#039;now in Oracle db: &#039; || to_char(sysdate, &#039;DD\/MM\/YYYY HH24:MI:SS&#039;) as now from dual\\&quot;&quot;);\n           return;\n        }\n\n        String driver   = args&#x5B;0];\n        String user     = args&#x5B;1];\n        String password = args&#x5B;2];\n        String url      = args&#x5B;3];\n        String sqlStmt = args&#x5B;4];\n\n        System.out.println(&quot;\\nLoading driver &#x5B;&quot; + driver + &quot;]:&quot;);\n\t    try {\n\t       Class.forName(driver);\n\t    } catch (ClassNotFoundException e) {\n\t       System.out.println(&quot;JDBC Driver &#x5B;&quot; + driver + &quot; is not found. Please, append it to -cp or CLASSPATH&quot;);\n\t       e.printStackTrace();\n\t       System.out.println(&quot;Example of driver&#039;s syntax: org.postgresql.Driver or oracle.jdbc.driver.OracleDriver&quot;);\n\t       return;\n\t    }\n\t    System.out.println(&quot;JDBC Driver &quot; + driver + &quot; successfully loaded&quot;);\n\n        try {\n           System.out.println(&quot;\\nConnecting to url &#x5B;&quot; + url + &quot;] as user &#x5B;&quot; + user + &quot;]:&quot;);\n           Connection conn = DriverManager.getConnection(url, user, password);\n\t       if (conn != null) {\n\t          System.out.println(&quot;Successful connection to database&quot;);\n\t       }\n\n           System.out.println(&quot;\\nExecuting SQL query &#x5B;&quot; + sqlStmt + &quot;]:&quot;);\n           Statement statement = conn.createStatement();\n           ResultSet resultSet = statement.executeQuery(sqlStmt);\n\n           System.out.println(&quot;\\nRetrieving the result set:&quot;);\n           while (resultSet.next()) {\n              System.out.println(resultSet.getString(1));\n           }\n\n           statement.close();\n           conn.close();\n\n           System.out.println(&quot;\\nJDBC connection successfully tested, quitting ...&quot;);\n        } catch (SQLException e) {\n           System.out.println(&quot;Exception occurred connecting to database: &quot; + e.getMessage());\n\t       e.printStackTrace();\n        }\n    }\n}\n<\/pre><\/div>\n\n\n<p>As is visible in the import statements at the top, no vendor\u2019s specific libraries are referenced and only calls from the standard JDBC API are used. As is, it should therefore be universal.<\/p>\n\n\n\n<p>To compile it, let\u2019s make sure a JDK is installed:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; highlight: [1,5]; title: ; notranslate\" title=\"\">\n$ java -version\nopenjdk version &quot;11.0.17&quot; 2022-10-18 LTS\nOpenJDK Runtime Environment Corretto-11.0.17.8.1 (build 11.0.17+8-LTS)\nOpenJDK 64-Bit Server VM Corretto-11.0.17.8.1 (build 11.0.17+8-LTS, mixed mode)\n$ javac --version\n$ javac 11.0.17\n<\/pre><\/div>\n\n\n<p>Use the command below to compile it:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; highlight: [1]; title: ; notranslate\" title=\"\">\n$ javac jdbc_tester_generic.java\n$ ls -l\n...\n-rw-r--r-- 1 dmadmin dmadmin 2975 Jan 22 14:36 jdbc_tester_generic.java\n-rw-rw-r-- 1 dmadmin dmadmin 3463 Jan 22 14:38 jdbc_tester_generic.class\n<\/pre><\/div>\n\n\n<p>Now that is has been compiled into a <code>.class<\/code> file, let\u2019s execute it.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Execution<\/h4>\n\n\n\n<p>jdbc_tester_generic expects 5 command-line parameters:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\ndriver_name user_name password connection_url sql_query\n<\/pre><\/div>\n\n\n<p>and complains in a constructive manner if one of them is missing, e.g.:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; highlight: [1]; title: ; notranslate\" title=\"\">\n$ java -cp . jdbc_tester_generic\nThe command-line parameters are:\nInvalid number of arguments: 5 arguments with the following format are required: driver user_name password url sqlquery\ne.g.\njava -cp postgresql-42.5.1.jar:. jdbc_tester_generic org.postgresql.Driver dmadmin xxx jdbc:postgresql:\/\/localhost:5432\/mydb &quot;select &#039;now in postgresql db: &#039; || to_char(current_timestamp(0), &#039;DD\/MM\/YYYY HH24:MI:SS&#039;) as now;&quot;\njava -cp ojdbc.jar:. jdbc_tester_generic oracle.jdbc.driver.OracleDriver dmadmin dmadmin jdbc:oracle:thin:@\/\/db:1521\/pdb1 &quot;select &#039;now in Oracle db: &#039; || to_char(sysdate, &#039;DD\/MM\/YYYY HH24:MI:SS&#039;) as now from dual&quot;\n<\/pre><\/div>\n\n\n<p>The command-line parameters that makes the utility truly universal are the JDBC drivers\u2019 name and the connection URL; once supplied, any RDBMS can be \u201cpinged\u201d if the given target-specific URL is correct. Let the tests begin now !<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Testing with a PostgreSQL database<\/h4>\n\n\n\n<p>Let\u2019s test it first with a PostgreSQL database. Let\u2019s download its JDBC drivers:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; highlight: [1]; title: ; notranslate\" title=\"\">\n$ wget https:\/\/jdbc.postgresql.org\/download\/postgresql-42.5.1.jar\n$ ls -lrt\n\u2026\n-rw-r--r-- 1 dmadmin dmadmin 2975 Jan 22 14:36 jdbc_tester_generic.java\n-rw-rw-r-- 1 dmadmin dmadmin 3463 Jan 22 14:38 jdbc_tester_generic.class\n-rw-r--r-- 1 dmadmin dmadmin 1046770 Jan 22 14:56 postgresql-42.5.1.jar\n<\/pre><\/div>\n\n\n<p>Let\u2019s suppose there is already a <code>postgres<\/code> server running locally:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; highlight: [1]; title: ; notranslate\" title=\"\">\n$ ps -ef | grep postgr\n\u2026\ndmadmin 1674739 1 0 14:57 ? 00:00:00 \/u01\/dctm\/repo02\/postgresql\/bin\/postgres -D \/u01\/dctm\/repo02\/postgresql\/data -k \/tmp\n\u2026\n<\/pre><\/div>\n\n\n<p>On which port:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; highlight: [1]; title: ; notranslate\" title=\"\">\n$ grep &#039;port = &#039; \/u01\/dctm\/repo02\/postgresql\/data\/postgresql.conf\nport = 5422\n<\/pre><\/div>\n\n\n<p>Let\u2019s suppose the PostgreSQL database <code>repo02<\/code> exists with an user\u2019s account <code>dmadmin<\/code>\/<code>xxx<\/code>:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nhost: localhost\nport: 5422\ndatabase name: repo02\ncredentials: dmadmin\/xxx\n<\/pre><\/div>\n\n\n<p>The command to use for connecting is:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; highlight: [1,10,13,20]; title: ; notranslate\" title=\"\">\n$ java -cp postgresql-42.5.1.jar:. jdbc_tester_generic org.postgresql.Driver dmadmin xxx jdbc:postgresql:\/\/localhost:5422\/repo02 &quot;select &#039;now in postgresql db: &#039; || to_char(current_timestamp(0), &#039;DD\/MM\/YYYY HH24:MI:SS&#039;) as now;&quot;\nThe command-line parameters are:\narg 0 = org.postgresql.Driver\narg 1 = dmadmin\narg 2 = xxx\narg 3 = jdbc:postgresql:\/\/localhost:5422\/repo02\narg 4 = select &#039;now in postgresql db: &#039; || to_char(current_timestamp(0), &#039;DD\/MM\/YYYY HH24:MI:SS&#039;) as now;\n\nLoading driver &#x5B;org.postgresql.Driver]:\nJDBC Driver org.postgresql.Driver successfully loaded\n\nConnecting to url &#x5B;jdbc:postgresql:\/\/localhost:5422\/repo02] as user &#x5B;dmadmin]:\nSuccessful connection to database\n\nExecuting SQL query &#x5B;select &#039;now in postgresql db: &#039; || to_char(current_timestamp(0), &#039;DD\/MM\/YYYY HH24:MI:SS&#039;) as now;]:\n\nRetrieving the result set:\nnow in postgresql db: 22\/01\/2023 14:58:08\n\nJDBC connection successfully tested, quitting \u2026\n<\/pre><\/div>\n\n\n<p>where <code>org.postgresql.Driver<\/code> is taken from the documentation. If too lazy or impatient, just do that:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n$ jar vtf the drivers_jar_file | egrep &#039;Driver.*class&#039;\n<\/pre><\/div>\n\n\n<p>One of the returned lines is the driver class.<\/p>\n\n\n\n<p>Note the URL\u2019s syntax: <code>jdbc:postgresql:\/\/localhost:5422\/repo02<\/code>, no leading @ sign.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Testing with an Oracle database<\/h4>\n\n\n\n<p>Let\u2019s now test it with an Oracle database. Let\u2019s download the drivers:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; highlight: [1]; title: ; notranslate\" title=\"\">\n$ wget https:\/\/download.oracle.com\/otn-pub\/otn_software\/jdbc\/218\/ojdbc11.jar\n$ ls -lrt\n\u2026\n-rw-rw-r-- 1 dmadmin dmadmin 5181682 Dec 7 21:20 ojdbc11.jar\n-rw-r--r-- 1 dmadmin dmadmin 2975 Jan 22 14:36 jdbc_tester_generic.java\n-rw-rw-r-- 1 dmadmin dmadmin 3463 Jan 22 14:38 jdbc_tester_generic.class\n-rw-r--r-- 1 dmadmin dmadmin 1046770 Jan 22 14:56 postgresql-42.5.1.jar\n<\/pre><\/div>\n\n\n<p>Let\u2019s suppose there is an Oracle database server running remotely with the following connectivity data:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nhost: 192.168.0.21\nport: 1521\nservice name: pdb1\ncredentials: repo01\/repo01\n<\/pre><\/div>\n\n\n<p>The <code>pdb1<\/code> service name we use points to a pluggable database with the same name inside a container database named <code>orcl<\/code>. The account <code>repo01<\/code> is only defined in <code>pdb1<\/code>.<\/p>\n\n\n\n<p>The command to use is:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; highlight: [1,10,13,20]; title: ; notranslate\" title=\"\">\n$ java -cp ojdbc11.jar:. jdbc_tester_generic oracle.jdbc.driver.OracleDriver repo01 repo01 jdbc:oracle:thin:@\/\/192.168.0.21:1521\/pdb1 &quot;select &#039;now in Oracle db: &#039; || to_char(sysdate, &#039;DD\/MM\/YYYY HH24:MI:SS&#039;) as now from dual&quot;\nThe command-line parameters are:\narg 0 = oracle.jdbc.driver.OracleDriver\narg 1 = repo01\narg 2 = repo01\narg 3 = jdbc:oracle:thin:@\/\/192.168.0.21:1521\/pdb1\narg 4 = select &#039;now in Oracle db: &#039; || to_char(sysdate, &#039;DD\/MM\/YYYY HH24:MI:SS&#039;) as now from dual\n\nLoading driver &#x5B;oracle.jdbc.driver.OracleDriver]:\nJDBC Driver oracle.jdbc.driver.OracleDriver successfully loaded\n\nConnecting to url &#x5B;jdbc:oracle:thin:@\/\/192.168.0.21:1521\/pdb1] as user &#x5B;repo01]:\nSuccessful connection to database\n\nExecuting SQL query &#x5B;select &#039;now in Oracle db: &#039; || to_char(sysdate, &#039;DD\/MM\/YYYY HH24:MI:SS&#039;) as now from dual]:\n\nRetrieving the result set:\nnow in Oracle db: 22\/01\/2023 15:31:37\n\nJDBC connection successfully tested, quitting ...\n<\/pre><\/div>\n\n\n<p>Note the URL\u2019s syntax: jdbc:oracle:thin:<strong>@\/\/192.168.0.21:1521\/pdb1<\/strong>, with a leading @ sign.<\/p>\n\n\n\n<p>Continue to <a href=\"https:\/\/www.dbi-services.com\/blog\/a-generic-jdbc-tester-part-ii\/\" target=\"_blank\" rel=\"noreferrer noopener\">Part II<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>A generic utility to test JDBC connections to any RDBMS or no SQL data source whose JDBC drivers are provided. Listing, PostgreSQL, Oracle Thin.<\/p>\n","protected":false},"author":40,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[525,59,83],"tags":[],"type_dbi":[],"class_list":["post-22055","post","type-post","status-publish","format-standard","hentry","category-enterprise-content-management","category-oracle","category-postgresql"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.2 (Yoast SEO v27.2) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>A generic jdbc tester (part I) - dbi Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.dbi-services.com\/blog\/a-generic-jdbc-tester-part-i\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"A generic jdbc tester (part I)\" \/>\n<meta property=\"og:description\" content=\"A generic utility to test JDBC connections to any RDBMS or no SQL data source whose JDBC drivers are provided. Listing, PostgreSQL, Oracle Thin.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.dbi-services.com\/blog\/a-generic-jdbc-tester-part-i\/\" \/>\n<meta property=\"og:site_name\" content=\"dbi Blog\" \/>\n<meta property=\"article:published_time\" content=\"2023-01-27T17:00:46+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-10-24T07:38:35+00:00\" \/>\n<meta name=\"author\" content=\"Middleware Team\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Middleware Team\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/a-generic-jdbc-tester-part-i\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/a-generic-jdbc-tester-part-i\/\"},\"author\":{\"name\":\"Middleware Team\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/8d8563acfc6e604cce6507f45bac0ea1\"},\"headline\":\"A generic jdbc tester (part I)\",\"datePublished\":\"2023-01-27T17:00:46+00:00\",\"dateModified\":\"2025-10-24T07:38:35+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/a-generic-jdbc-tester-part-i\/\"},\"wordCount\":629,\"commentCount\":0,\"articleSection\":[\"Enterprise content management\",\"Oracle\",\"PostgreSQL\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.dbi-services.com\/blog\/a-generic-jdbc-tester-part-i\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/a-generic-jdbc-tester-part-i\/\",\"url\":\"https:\/\/www.dbi-services.com\/blog\/a-generic-jdbc-tester-part-i\/\",\"name\":\"A generic jdbc tester (part I) - dbi Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#website\"},\"datePublished\":\"2023-01-27T17:00:46+00:00\",\"dateModified\":\"2025-10-24T07:38:35+00:00\",\"author\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/8d8563acfc6e604cce6507f45bac0ea1\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/a-generic-jdbc-tester-part-i\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.dbi-services.com\/blog\/a-generic-jdbc-tester-part-i\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/a-generic-jdbc-tester-part-i\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\/\/www.dbi-services.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"A generic jdbc tester (part I)\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#website\",\"url\":\"https:\/\/www.dbi-services.com\/blog\/\",\"name\":\"dbi Blog\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.dbi-services.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/8d8563acfc6e604cce6507f45bac0ea1\",\"name\":\"Middleware Team\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/secure.gravatar.com\/avatar\/ddcae7ba0f9d1a0e7ae707f0e689e4a9c95bb48ec49c8e6d9cc86d43f4121cb6?s=96&d=mm&r=g\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/ddcae7ba0f9d1a0e7ae707f0e689e4a9c95bb48ec49c8e6d9cc86d43f4121cb6?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/ddcae7ba0f9d1a0e7ae707f0e689e4a9c95bb48ec49c8e6d9cc86d43f4121cb6?s=96&d=mm&r=g\",\"caption\":\"Middleware Team\"},\"url\":\"https:\/\/www.dbi-services.com\/blog\/author\/middleware-team\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"A generic jdbc tester (part I) - dbi Blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.dbi-services.com\/blog\/a-generic-jdbc-tester-part-i\/","og_locale":"en_US","og_type":"article","og_title":"A generic jdbc tester (part I)","og_description":"A generic utility to test JDBC connections to any RDBMS or no SQL data source whose JDBC drivers are provided. Listing, PostgreSQL, Oracle Thin.","og_url":"https:\/\/www.dbi-services.com\/blog\/a-generic-jdbc-tester-part-i\/","og_site_name":"dbi Blog","article_published_time":"2023-01-27T17:00:46+00:00","article_modified_time":"2025-10-24T07:38:35+00:00","author":"Middleware Team","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Middleware Team","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.dbi-services.com\/blog\/a-generic-jdbc-tester-part-i\/#article","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/a-generic-jdbc-tester-part-i\/"},"author":{"name":"Middleware Team","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/8d8563acfc6e604cce6507f45bac0ea1"},"headline":"A generic jdbc tester (part I)","datePublished":"2023-01-27T17:00:46+00:00","dateModified":"2025-10-24T07:38:35+00:00","mainEntityOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/a-generic-jdbc-tester-part-i\/"},"wordCount":629,"commentCount":0,"articleSection":["Enterprise content management","Oracle","PostgreSQL"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.dbi-services.com\/blog\/a-generic-jdbc-tester-part-i\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.dbi-services.com\/blog\/a-generic-jdbc-tester-part-i\/","url":"https:\/\/www.dbi-services.com\/blog\/a-generic-jdbc-tester-part-i\/","name":"A generic jdbc tester (part I) - dbi Blog","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/#website"},"datePublished":"2023-01-27T17:00:46+00:00","dateModified":"2025-10-24T07:38:35+00:00","author":{"@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/8d8563acfc6e604cce6507f45bac0ea1"},"breadcrumb":{"@id":"https:\/\/www.dbi-services.com\/blog\/a-generic-jdbc-tester-part-i\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.dbi-services.com\/blog\/a-generic-jdbc-tester-part-i\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.dbi-services.com\/blog\/a-generic-jdbc-tester-part-i\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.dbi-services.com\/blog\/"},{"@type":"ListItem","position":2,"name":"A generic jdbc tester (part I)"}]},{"@type":"WebSite","@id":"https:\/\/www.dbi-services.com\/blog\/#website","url":"https:\/\/www.dbi-services.com\/blog\/","name":"dbi Blog","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.dbi-services.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/8d8563acfc6e604cce6507f45bac0ea1","name":"Middleware Team","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/ddcae7ba0f9d1a0e7ae707f0e689e4a9c95bb48ec49c8e6d9cc86d43f4121cb6?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/ddcae7ba0f9d1a0e7ae707f0e689e4a9c95bb48ec49c8e6d9cc86d43f4121cb6?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/ddcae7ba0f9d1a0e7ae707f0e689e4a9c95bb48ec49c8e6d9cc86d43f4121cb6?s=96&d=mm&r=g","caption":"Middleware Team"},"url":"https:\/\/www.dbi-services.com\/blog\/author\/middleware-team\/"}]}},"_links":{"self":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/22055","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/users\/40"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/comments?post=22055"}],"version-history":[{"count":18,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/22055\/revisions"}],"predecessor-version":[{"id":22167,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/22055\/revisions\/22167"}],"wp:attachment":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/media?parent=22055"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/categories?post=22055"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/tags?post=22055"},{"taxonomy":"type","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/type_dbi?post=22055"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}