{"id":25740163,"url":"https://github.com/datadotworld/dw-jdbc","last_synced_at":"2025-05-08T21:14:47.334Z","repository":{"id":49025176,"uuid":"71394196","full_name":"datadotworld/dw-jdbc","owner":"datadotworld","description":"JDBC driver for data.world","archived":false,"fork":false,"pushed_at":"2024-10-03T18:18:37.000Z","size":747,"stargazers_count":18,"open_issues_count":6,"forks_count":4,"subscribers_count":42,"default_branch":"main","last_synced_at":"2025-05-08T21:14:41.283Z","etag":null,"topics":["dataset","datasets","dwstruct-t50-public-projects","jdbc-driver","open-data","reference-implementation","sparql","sql"],"latest_commit_sha":null,"homepage":"https://data.world/integrations/java-jdbc","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/datadotworld.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2016-10-19T19:56:33.000Z","updated_at":"2025-04-01T21:34:48.000Z","dependencies_parsed_at":"2023-12-05T06:43:41.358Z","dependency_job_id":null,"html_url":"https://github.com/datadotworld/dw-jdbc","commit_stats":null,"previous_names":[],"tags_count":8,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/datadotworld%2Fdw-jdbc","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/datadotworld%2Fdw-jdbc/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/datadotworld%2Fdw-jdbc/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/datadotworld%2Fdw-jdbc/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/datadotworld","download_url":"https://codeload.github.com/datadotworld/dw-jdbc/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253149618,"owners_count":21861740,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["dataset","datasets","dwstruct-t50-public-projects","jdbc-driver","open-data","reference-implementation","sparql","sql"],"created_at":"2025-02-26T08:36:57.760Z","updated_at":"2025-05-08T21:14:47.314Z","avatar_url":"https://github.com/datadotworld.png","language":"Java","readme":"# dw-jdbc\n\ndw-jdbc is a JDBC driver for connecting to datasets hosted on data.world.\nIt can be used to provide read-only access to any dataset provided by data.world\nfrom any JVM language.  dw-jdbc supports query access both in dwSQL\n(data.world's SQL dialect) and in SPARQL 1.1, the native query language\nfor semantic web data sources.\n\n\n## JDBC URLs\n\nJDBC connects to data source based on a provided JDBC url.  data.world\nJDBC urls have the form\n\n    jdbc:data:world:[language]:[user id]:[dataset id]\n\nwhere:\n\n* `[language]` is either `sql` or `sparql`\n* `[user id]` is the data.world id of the dataset owner\n* `[dataset id]` is the data.world id of the dataset\n\nYou can extract these ids from the dataset home page url: `https://data.world/[user id]/[dataset id]`.\n\n## Sample code (Java 8)\n\n```java\nimport java.sql.Connection;\nimport java.sql.DriverManager;\nimport java.sql.PreparedStatement;\nimport java.sql.ResultSet;\nimport java.sql.ResultSetMetaData;\n\n\nfinal String QUERY = \"select * from HallOfFame where playerID = ? order by yearid, playerID limit 10\";\nfinal String URL = \"jdbc:data:world:sql:dave:lahman-sabremetrics-dataset\";\n\n\ntry (final Connection connection =    // get a connection to the database, which will automatically be closed when done\n         DriverManager.getConnection(URL, \"\u003cyour user name\u003e\", \"\u003cyour API token\u003e\");\n     final PreparedStatement statement = // get a connection to the database, which will automatically be closed when done\n         connection.prepareStatement(QUERY)) {\n    statement.setString(1, \"alexape01\"); //bind a query parameter\n    try (final ResultSet resultSet = statement.executeQuery()) { //execute the query\n        ResultSetMetaData rsmd = resultSet.getMetaData();  //print out the column headers\n        int columnsNumber = rsmd.getColumnCount();\n        for (int i = 1; i \u003c= columnsNumber; i++) {\n            if (i \u003e 1) System.out.print(\",  \");\n            System.out.print(rsmd.getColumnName(i));\n        }\n        System.out.println(\"\");\n        while (resultSet.next()) { //loop through the query results\n            for (int i = 1; i \u003c= columnsNumber; i++) { //print out the column headers\n                if (i \u003e 1) System.out.print(\",  \");\n                String columnValue = resultSet.getString(i);\n                System.out.print(columnValue);\n            }\n            System.out.println(\"\");\n\n            // Note: when calling ResultSet.getObject() prefer the version that takes an explicit Class argument:\n            // Integer n = resultSet.getObject(param, Integer.class);\n        }\n    }\n}\n```\n\n## Using dw-jdbc in your project\n\nIf using Maven, you can use dw-jdbc by just including the following in your pom.xml file:\n\n```xml\n\u003cdependency\u003e\n    \u003cgroupId\u003eworld.data\u003c/groupId\u003e\n    \u003cartifactId\u003edw-jdbc\u003c/artifactId\u003e\n    \u003cversion\u003e0.4.1\u003c/version\u003e\n\u003c/dependency\u003e\n```\n\nSee [this link at Maven Central](https://search.maven.org/#search%7Cga%7C1%7Cdw-jdbc) to find the latest version\nnumber for the JDBC driver.\n\nFor some database tools it's easier to install the jdbc driver if it's a single jar.  For this reason we also\nprovide dw-jdbc bundled with all its dependencies under the following:\n\n```xml\n\u003cdependency\u003e\n    \u003cgroupId\u003eworld.data\u003c/groupId\u003e\n    \u003cartifactId\u003edw-jdbc\u003c/artifactId\u003e\n    \u003cclassifier\u003eshaded\u003c/classifier\u003e\n    \u003cversion\u003e0.4.1\u003c/version\u003e\n\u003c/dependency\u003e\n```\n\n\n## Finding your Token\n\n1. Visit https://data.world\n2. Visit your user settings, and click the advanced tab.\n3. Copy your token.\n\n## Features\n\n* JDBC 4.2\n\n* The driver only supports read-only queries.  It does not support INSERT/UPDATE/DELETE, DDL, or transactions.\n\n* Queries can be written in [SPARQL 1.1](https://www.w3.org/TR/sparql11-query/) or in the SQL dialect described at https://docs.data.world/tutorials/dwsql/.\n\n* [SQL-only] Table and column metadata via `java.sql.DatabaseMetaData`.\n\n* [SQL-only] Support for positional parameters via `java.sql.PreparedStatement`.\n\n* [SPARQL-only] Support for named parameters via `java.sql.CallableStatement`.\n\n   * For example, `CallableStatement.setString(\"name\", \"value\")` will bind the string `value` to `?name` within the query.\n\n* The `DataWorldStatement.setJdbcCompatibilityLevel(JdbcCompatibility)` method can be used to adjust how the JDBC driver maps query results to Java objects in `java.sql.ResultSetMetaData`.  This is particularly relevant to SPARQL queries where result types in a column can vary from row to row.\n\n   * `JdbcCompatibility.LOW` - No assumptions are made about types.  `ResultSetMetaData.getColumnType()` returns `java.sql.Types.OTHER` and `ResultSet.getObject()` returns `world.data.jdbc.model.Node`.\n   \n   * `JdbcCompatibility.MEDIUM` - [SPARQL default] All columns are typed as string.  `ResultSetMetaData.getColumnType()` returns `java.sql.Types.NVARCHAR` and `ResultSet.getObject()` returns `java.lang.String`.\n   \n   * `JdbcCompatibility.HIGH` - [SQL default] Columns are typed based on the underlying data, either using table metadata (SQL) or by inspecting the first row of the response (SPARQL).\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdatadotworld%2Fdw-jdbc","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdatadotworld%2Fdw-jdbc","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdatadotworld%2Fdw-jdbc/lists"}