Merge pull request #2810 from taosdata/fix_jdbc_url_parser
fix JDBC url parser issue
This commit is contained in:
commit
bd79526b67
|
@ -260,50 +260,66 @@ public class TSDBDriver implements java.sql.Driver {
|
||||||
if (url.indexOf("?") != -1) {
|
if (url.indexOf("?") != -1) {
|
||||||
String dbName = url.substring(0, url.indexOf("?"));
|
String dbName = url.substring(0, url.indexOf("?"));
|
||||||
urlProps.setProperty(PROPERTY_KEY_DBNAME, dbName);
|
urlProps.setProperty(PROPERTY_KEY_DBNAME, dbName);
|
||||||
url = url.trim().substring(1);
|
url = url.trim().substring(url.indexOf("?") + 1);
|
||||||
} else {
|
} else {
|
||||||
// without user & password so return
|
// without user & password so return
|
||||||
|
if(!url.trim().isEmpty()) {
|
||||||
String dbName = url.trim();
|
String dbName = url.trim();
|
||||||
urlProps.setProperty(PROPERTY_KEY_DBNAME, dbName);
|
urlProps.setProperty(PROPERTY_KEY_DBNAME, dbName);
|
||||||
|
}
|
||||||
this.dbMetaData = new TSDBDatabaseMetaData(dbProductName, urlForMeta, urlProps.getProperty("user"));
|
this.dbMetaData = new TSDBDatabaseMetaData(dbProductName, urlForMeta, urlProps.getProperty("user"));
|
||||||
return urlProps;
|
return urlProps;
|
||||||
}
|
}
|
||||||
|
|
||||||
String[] queryStrings = url.trim().split("&");
|
|
||||||
String user = "";
|
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) {
|
for (String queryStr : queryStrings) {
|
||||||
String[] kvPair = queryStr.trim().split("=");
|
String[] kvPair = queryStr.trim().split("=");
|
||||||
if (kvPair.length < 2){
|
if (kvPair.length < 2){
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
switch (kvPair[0].toLowerCase()) {
|
setPropertyValue(urlProps, kvPair);
|
||||||
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;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
user = urlProps.getProperty(PROPERTY_KEY_USER).toString();
|
||||||
this.dbMetaData = new TSDBDatabaseMetaData(dbProductName, urlForMeta, user);
|
this.dbMetaData = new TSDBDatabaseMetaData(dbProductName, urlForMeta, user);
|
||||||
|
|
||||||
return urlProps;
|
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() {
|
public int getMajorVersion() {
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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");
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue