diff --git a/src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBDriver.java b/src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBDriver.java index f4c9ec765aab2f2fe29b958f56fcf38634fa9639..02d642d6430d8c2dccaa9be03258861ff051a374 100755 --- a/src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBDriver.java +++ b/src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBDriver.java @@ -260,50 +260,66 @@ public class TSDBDriver implements java.sql.Driver { if (url.indexOf("?") != -1) { String dbName = url.substring(0, url.indexOf("?")); urlProps.setProperty(PROPERTY_KEY_DBNAME, dbName); - url = url.trim().substring(1); + url = url.trim().substring(url.indexOf("?") + 1); } else { // without user & password so return - String dbName = url.trim(); - urlProps.setProperty(PROPERTY_KEY_DBNAME, dbName); + if(!url.trim().isEmpty()) { + String dbName = url.trim(); + urlProps.setProperty(PROPERTY_KEY_DBNAME, dbName); + } this.dbMetaData = new TSDBDatabaseMetaData(dbProductName, urlForMeta, urlProps.getProperty("user")); return urlProps; } - String[] queryStrings = url.trim().split("&"); String user = ""; + + if (url.indexOf("&") == -1) { + String[] kvPair = url.trim().split("="); + if (kvPair.length == 2) { + setPropertyValue(urlProps, kvPair); + return urlProps; + } + } + + String[] queryStrings = url.trim().split("&"); for (String queryStr : queryStrings) { String[] kvPair = queryStr.trim().split("="); if (kvPair.length < 2){ continue; } - switch (kvPair[0].toLowerCase()) { - case PROPERTY_KEY_USER: - urlProps.setProperty(PROPERTY_KEY_USER, kvPair[1]); - user = kvPair[1]; - break; - case PROPERTY_KEY_PASSWORD: - urlProps.setProperty(PROPERTY_KEY_PASSWORD, kvPair[1]); - break; - case PROPERTY_KEY_TIME_ZONE: - urlProps.setProperty(PROPERTY_KEY_TIME_ZONE, kvPair[1]); - break; - case PROPERTY_KEY_LOCALE: - urlProps.setProperty(PROPERTY_KEY_LOCALE, kvPair[1]); - break; - case PROPERTY_KEY_CHARSET: - urlProps.setProperty(PROPERTY_KEY_CHARSET, kvPair[1]); - break; - case PROPERTY_KEY_CONFIG_DIR: - urlProps.setProperty(PROPERTY_KEY_CONFIG_DIR, kvPair[1]); - break; - } + setPropertyValue(urlProps, kvPair); } + user = urlProps.getProperty(PROPERTY_KEY_USER).toString(); this.dbMetaData = new TSDBDatabaseMetaData(dbProductName, urlForMeta, user); return urlProps; } + public void setPropertyValue(Properties property, String[] keyValuePair) { + switch (keyValuePair[0].toLowerCase()) { + case PROPERTY_KEY_USER: + property.setProperty(PROPERTY_KEY_USER, keyValuePair[1]); + break; + case PROPERTY_KEY_PASSWORD: + property.setProperty(PROPERTY_KEY_PASSWORD, keyValuePair[1]); + break; + case PROPERTY_KEY_TIME_ZONE: + property.setProperty(PROPERTY_KEY_TIME_ZONE, keyValuePair[1]); + break; + case PROPERTY_KEY_LOCALE: + property.setProperty(PROPERTY_KEY_LOCALE, keyValuePair[1]); + break; + case PROPERTY_KEY_CHARSET: + property.setProperty(PROPERTY_KEY_CHARSET, keyValuePair[1]); + break; + case PROPERTY_KEY_CONFIG_DIR: + property.setProperty(PROPERTY_KEY_CONFIG_DIR, keyValuePair[1]); + break; + } + } + + public int getMajorVersion() { return 1; } diff --git a/src/connector/jdbc/src/test/java/com/taosdata/jdbc/TSDBDriverTest.java b/src/connector/jdbc/src/test/java/com/taosdata/jdbc/TSDBDriverTest.java new file mode 100644 index 0000000000000000000000000000000000000000..9ea5a431a5ef6dca232467aa80d430c6ac33dd69 --- /dev/null +++ b/src/connector/jdbc/src/test/java/com/taosdata/jdbc/TSDBDriverTest.java @@ -0,0 +1,47 @@ +package com.taosdata.jdbc; + +import org.junit.Test; + +import java.sql.SQLException; +import java.util.Properties; + +import static org.junit.Assert.assertEquals; + +public class TSDBDriverTest { + + @Test + public void urlParserTest() throws SQLException { + TSDBDriver driver = new TSDBDriver(); + String url = "jdbc:TSDB://127.0.0.1:0/db?user=root&password=your_password"; + + Properties properties = new Properties(); + driver.parseURL(url, properties); + assertEquals(properties.get("host"), "127.0.0.1"); + assertEquals(properties.get("port"), "0"); + assertEquals(properties.get("dbname"), "db"); + assertEquals(properties.get("user"), "root"); + assertEquals(properties.get("password"), "your_password"); + + url = "jdbc:TSDB://127.0.0.1:0/log?charset=UTF-8"; + properties = new Properties(); + driver.parseURL(url, properties); + assertEquals(properties.get("host"), "127.0.0.1"); + assertEquals(properties.get("port"), "0"); + assertEquals(properties.get("dbname"), "log"); + assertEquals(properties.get("charset"), "UTF-8"); + + url = "jdbc:TSDB://127.0.0.1:0/"; + properties = new Properties(); + driver.parseURL(url, properties); + assertEquals(properties.get("host"), "127.0.0.1"); + assertEquals(properties.get("port"), "0"); + assertEquals(properties.get("dbname"), null); + + url = "jdbc:TSDB://127.0.0.1:0/db"; + properties = new Properties(); + driver.parseURL(url, properties); + assertEquals(properties.get("host"), "127.0.0.1"); + assertEquals(properties.get("port"), "0"); + assertEquals(properties.get("dbname"), "db"); + } +} \ No newline at end of file