[TD-3410]<feature>: support nutz framework (#5600)
* [TD-3410]feature: adapted to nutz * change * change * change * change * [TD-3447]<feature>: JDBC-RESTful and JDBC-JNI support setObject * change * change * change * change * change * change * change * change * change * change * change * change * [TD-3548]<feature>: support ParameterMetaData in JDBC-RESTful and JDBC-JNI * change * change * [TD-3446]<feature>: JDBC-JNI and JDBC-RESTful do not need invoke Class.forName any more * change jdbc version * change * change * change
This commit is contained in:
parent
c4021cc940
commit
d2ec29715a
|
@ -32,7 +32,7 @@ ELSEIF (TD_WINDOWS)
|
||||||
#INSTALL(TARGETS taos RUNTIME DESTINATION driver)
|
#INSTALL(TARGETS taos RUNTIME DESTINATION driver)
|
||||||
#INSTALL(TARGETS shell RUNTIME DESTINATION .)
|
#INSTALL(TARGETS shell RUNTIME DESTINATION .)
|
||||||
IF (TD_MVN_INSTALLED)
|
IF (TD_MVN_INSTALLED)
|
||||||
INSTALL(FILES ${LIBRARY_OUTPUT_PATH}/taos-jdbcdriver-2.0.22-dist.jar DESTINATION connector/jdbc)
|
INSTALL(FILES ${LIBRARY_OUTPUT_PATH}/taos-jdbcdriver-2.0.24-dist.jar DESTINATION connector/jdbc)
|
||||||
ENDIF ()
|
ENDIF ()
|
||||||
ELSEIF (TD_DARWIN)
|
ELSEIF (TD_DARWIN)
|
||||||
SET(TD_MAKE_INSTALL_SH "${TD_COMMUNITY_DIR}/packaging/tools/make_install.sh")
|
SET(TD_MAKE_INSTALL_SH "${TD_COMMUNITY_DIR}/packaging/tools/make_install.sh")
|
||||||
|
|
|
@ -8,7 +8,7 @@ IF (TD_MVN_INSTALLED)
|
||||||
ADD_CUSTOM_COMMAND(OUTPUT ${JDBC_CMD_NAME}
|
ADD_CUSTOM_COMMAND(OUTPUT ${JDBC_CMD_NAME}
|
||||||
POST_BUILD
|
POST_BUILD
|
||||||
COMMAND mvn -Dmaven.test.skip=true install -f ${CMAKE_CURRENT_SOURCE_DIR}/pom.xml
|
COMMAND mvn -Dmaven.test.skip=true install -f ${CMAKE_CURRENT_SOURCE_DIR}/pom.xml
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/target/taos-jdbcdriver-2.0.22-dist.jar ${LIBRARY_OUTPUT_PATH}
|
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/target/taos-jdbcdriver-2.0.24-dist.jar ${LIBRARY_OUTPUT_PATH}
|
||||||
COMMAND mvn -Dmaven.test.skip=true clean -f ${CMAKE_CURRENT_SOURCE_DIR}/pom.xml
|
COMMAND mvn -Dmaven.test.skip=true clean -f ${CMAKE_CURRENT_SOURCE_DIR}/pom.xml
|
||||||
COMMENT "build jdbc driver")
|
COMMENT "build jdbc driver")
|
||||||
ADD_CUSTOM_TARGET(${JDBC_TARGET_NAME} ALL WORKING_DIRECTORY ${EXECUTABLE_OUTPUT_PATH} DEPENDS ${JDBC_CMD_NAME})
|
ADD_CUSTOM_TARGET(${JDBC_TARGET_NAME} ALL WORKING_DIRECTORY ${EXECUTABLE_OUTPUT_PATH} DEPENDS ${JDBC_CMD_NAME})
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
|
|
||||||
<groupId>com.taosdata.jdbc</groupId>
|
<groupId>com.taosdata.jdbc</groupId>
|
||||||
<artifactId>taos-jdbcdriver</artifactId>
|
<artifactId>taos-jdbcdriver</artifactId>
|
||||||
<version>2.0.22</version>
|
<version>2.0.24</version>
|
||||||
<packaging>jar</packaging>
|
<packaging>jar</packaging>
|
||||||
|
|
||||||
<name>JDBCDriver</name>
|
<name>JDBCDriver</name>
|
||||||
|
@ -37,17 +37,6 @@
|
||||||
</developers>
|
</developers>
|
||||||
|
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<dependency>
|
|
||||||
<groupId>commons-logging</groupId>
|
|
||||||
<artifactId>commons-logging</artifactId>
|
|
||||||
<version>1.2</version>
|
|
||||||
<exclusions>
|
|
||||||
<exclusion>
|
|
||||||
<groupId>*</groupId>
|
|
||||||
<artifactId>*</artifactId>
|
|
||||||
</exclusion>
|
|
||||||
</exclusions>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>junit</groupId>
|
<groupId>junit</groupId>
|
||||||
<artifactId>junit</artifactId>
|
<artifactId>junit</artifactId>
|
||||||
|
@ -61,21 +50,20 @@
|
||||||
<artifactId>httpclient</artifactId>
|
<artifactId>httpclient</artifactId>
|
||||||
<version>4.5.8</version>
|
<version>4.5.8</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
|
||||||
<groupId>org.apache.commons</groupId>
|
|
||||||
<artifactId>commons-lang3</artifactId>
|
|
||||||
<version>3.9</version>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.alibaba</groupId>
|
<groupId>com.alibaba</groupId>
|
||||||
<artifactId>fastjson</artifactId>
|
<artifactId>fastjson</artifactId>
|
||||||
<version>1.2.58</version>
|
<version>1.2.58</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.google.guava</groupId>
|
||||||
|
<artifactId>guava</artifactId>
|
||||||
|
<version>29.0-jre</version>
|
||||||
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
<build>
|
<build>
|
||||||
<plugins>
|
<plugins>
|
||||||
|
|
||||||
<plugin>
|
<plugin>
|
||||||
<groupId>org.apache.maven.plugins</groupId>
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
<artifactId>maven-assembly-plugin</artifactId>
|
<artifactId>maven-assembly-plugin</artifactId>
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<groupId>com.taosdata.jdbc</groupId>
|
<groupId>com.taosdata.jdbc</groupId>
|
||||||
<artifactId>taos-jdbcdriver</artifactId>
|
<artifactId>taos-jdbcdriver</artifactId>
|
||||||
<version>2.0.22</version>
|
<version>2.0.24</version>
|
||||||
<packaging>jar</packaging>
|
<packaging>jar</packaging>
|
||||||
<name>JDBCDriver</name>
|
<name>JDBCDriver</name>
|
||||||
<url>https://github.com/taosdata/TDengine/tree/master/src/connector/jdbc</url>
|
<url>https://github.com/taosdata/TDengine/tree/master/src/connector/jdbc</url>
|
||||||
|
@ -43,7 +43,6 @@
|
||||||
<version>4.13</version>
|
<version>4.13</version>
|
||||||
<scope>test</scope>
|
<scope>test</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<!-- for restful -->
|
<!-- for restful -->
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.apache.httpcomponents</groupId>
|
<groupId>org.apache.httpcomponents</groupId>
|
||||||
|
@ -55,7 +54,11 @@
|
||||||
<artifactId>fastjson</artifactId>
|
<artifactId>fastjson</artifactId>
|
||||||
<version>1.2.58</version>
|
<version>1.2.58</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.google.guava</groupId>
|
||||||
|
<artifactId>guava</artifactId>
|
||||||
|
<version>29.0-jre</version>
|
||||||
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
<build>
|
<build>
|
||||||
|
|
|
@ -30,9 +30,12 @@ public abstract class AbstractConnection extends WrapperImpl implements Connecti
|
||||||
if (isClosed())
|
if (isClosed())
|
||||||
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_CONNECTION_CLOSED);
|
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_CONNECTION_CLOSED);
|
||||||
// do nothing
|
// do nothing
|
||||||
|
|
||||||
return sql;
|
return sql;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setAutoCommit(boolean autoCommit) throws SQLException {
|
public void setAutoCommit(boolean autoCommit) throws SQLException {
|
||||||
if (isClosed())
|
if (isClosed())
|
||||||
|
@ -448,7 +451,6 @@ public abstract class AbstractConnection extends WrapperImpl implements Connecti
|
||||||
if (isClosed)
|
if (isClosed)
|
||||||
throw (SQLClientInfoException) TSDBError.createSQLException(TSDBErrorNumbers.ERROR_SQLCLIENT_EXCEPTION_ON_CONNECTION_CLOSED);
|
throw (SQLClientInfoException) TSDBError.createSQLException(TSDBErrorNumbers.ERROR_SQLCLIENT_EXCEPTION_ON_CONNECTION_CLOSED);
|
||||||
|
|
||||||
|
|
||||||
for (Enumeration<Object> enumer = properties.keys(); enumer.hasMoreElements(); ) {
|
for (Enumeration<Object> enumer = properties.keys(); enumer.hasMoreElements(); ) {
|
||||||
String name = (String) enumer.nextElement();
|
String name = (String) enumer.nextElement();
|
||||||
clientInfoProps.put(name, properties.getProperty(name));
|
clientInfoProps.put(name, properties.getProperty(name));
|
||||||
|
|
|
@ -0,0 +1,138 @@
|
||||||
|
package com.taosdata.jdbc;
|
||||||
|
|
||||||
|
import java.sql.ParameterMetaData;
|
||||||
|
import java.sql.SQLException;
|
||||||
|
import java.sql.Timestamp;
|
||||||
|
import java.sql.Types;
|
||||||
|
|
||||||
|
public abstract class AbstractParameterMetaData extends WrapperImpl implements ParameterMetaData {
|
||||||
|
|
||||||
|
private final Object[] parameters;
|
||||||
|
|
||||||
|
public AbstractParameterMetaData(Object[] parameters) {
|
||||||
|
this.parameters = parameters;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getParameterCount() throws SQLException {
|
||||||
|
return parameters.length;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int isNullable(int param) throws SQLException {
|
||||||
|
return ParameterMetaData.parameterNullableUnknown;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isSigned(int param) throws SQLException {
|
||||||
|
if (param < 1 && param >= parameters.length)
|
||||||
|
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_PARAMETER_INDEX_OUT_RANGE);
|
||||||
|
|
||||||
|
if (parameters[param - 1] instanceof Byte)
|
||||||
|
return true;
|
||||||
|
if (parameters[param - 1] instanceof Short)
|
||||||
|
return true;
|
||||||
|
if (parameters[param - 1] instanceof Integer)
|
||||||
|
return true;
|
||||||
|
if (parameters[param - 1] instanceof Long)
|
||||||
|
return true;
|
||||||
|
if (parameters[param - 1] instanceof Float)
|
||||||
|
return true;
|
||||||
|
if (parameters[param - 1] instanceof Double)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getPrecision(int param) throws SQLException {
|
||||||
|
if (param < 1 && param >= parameters.length)
|
||||||
|
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_PARAMETER_INDEX_OUT_RANGE);
|
||||||
|
|
||||||
|
if (parameters[param - 1] instanceof String)
|
||||||
|
return ((String) parameters[param - 1]).length();
|
||||||
|
if (parameters[param - 1] instanceof byte[])
|
||||||
|
return ((byte[]) parameters[param - 1]).length;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getScale(int param) throws SQLException {
|
||||||
|
if (param < 1 && param >= parameters.length)
|
||||||
|
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_PARAMETER_INDEX_OUT_RANGE);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getParameterType(int param) throws SQLException {
|
||||||
|
if (param < 1 && param >= parameters.length)
|
||||||
|
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_PARAMETER_INDEX_OUT_RANGE);
|
||||||
|
|
||||||
|
if (parameters[param - 1] instanceof Timestamp)
|
||||||
|
return Types.TIMESTAMP;
|
||||||
|
if (parameters[param - 1] instanceof Byte)
|
||||||
|
return Types.TINYINT;
|
||||||
|
if (parameters[param - 1] instanceof Short)
|
||||||
|
return Types.SMALLINT;
|
||||||
|
if (parameters[param - 1] instanceof Integer)
|
||||||
|
return Types.INTEGER;
|
||||||
|
if (parameters[param - 1] instanceof Long)
|
||||||
|
return Types.BIGINT;
|
||||||
|
if (parameters[param - 1] instanceof Float)
|
||||||
|
return Types.FLOAT;
|
||||||
|
if (parameters[param - 1] instanceof Double)
|
||||||
|
return Types.DOUBLE;
|
||||||
|
if (parameters[param - 1] instanceof String)
|
||||||
|
return Types.NCHAR;
|
||||||
|
if (parameters[param - 1] instanceof byte[])
|
||||||
|
return Types.BINARY;
|
||||||
|
if (parameters[param - 1] instanceof Boolean)
|
||||||
|
return Types.BOOLEAN;
|
||||||
|
return Types.OTHER;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getParameterTypeName(int param) throws SQLException {
|
||||||
|
if (param < 1 && param >= parameters.length)
|
||||||
|
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_PARAMETER_INDEX_OUT_RANGE);
|
||||||
|
|
||||||
|
if (parameters[param - 1] instanceof Timestamp)
|
||||||
|
return TSDBConstants.jdbcType2TaosTypeName(Types.TIMESTAMP);
|
||||||
|
if (parameters[param - 1] instanceof Byte)
|
||||||
|
return TSDBConstants.jdbcType2TaosTypeName(Types.TINYINT);
|
||||||
|
if (parameters[param - 1] instanceof Short)
|
||||||
|
return TSDBConstants.jdbcType2TaosTypeName(Types.SMALLINT);
|
||||||
|
if (parameters[param - 1] instanceof Integer)
|
||||||
|
return TSDBConstants.jdbcType2TaosTypeName(Types.INTEGER);
|
||||||
|
if (parameters[param - 1] instanceof Long)
|
||||||
|
return TSDBConstants.jdbcType2TaosTypeName(Types.BIGINT);
|
||||||
|
if (parameters[param - 1] instanceof Float)
|
||||||
|
return TSDBConstants.jdbcType2TaosTypeName(Types.FLOAT);
|
||||||
|
if (parameters[param - 1] instanceof Double)
|
||||||
|
return TSDBConstants.jdbcType2TaosTypeName(Types.DOUBLE);
|
||||||
|
if (parameters[param - 1] instanceof String)
|
||||||
|
return TSDBConstants.jdbcType2TaosTypeName(Types.NCHAR);
|
||||||
|
if (parameters[param - 1] instanceof byte[])
|
||||||
|
return TSDBConstants.jdbcType2TaosTypeName(Types.BINARY);
|
||||||
|
if (parameters[param - 1] instanceof Boolean)
|
||||||
|
return TSDBConstants.jdbcType2TaosTypeName(Types.BOOLEAN);
|
||||||
|
|
||||||
|
return parameters[param - 1].getClass().getName();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getParameterClassName(int param) throws SQLException {
|
||||||
|
if (param < 1 && param >= parameters.length)
|
||||||
|
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_PARAMETER_INDEX_OUT_RANGE);
|
||||||
|
|
||||||
|
return parameters[param - 1].getClass().getName();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getParameterMode(int param) throws SQLException {
|
||||||
|
if (param < 1 && param >= parameters.length)
|
||||||
|
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_PARAMETER_INDEX_OUT_RANGE);
|
||||||
|
|
||||||
|
return ParameterMetaData.parameterModeUnknown;
|
||||||
|
}
|
||||||
|
}
|
|
@ -11,6 +11,15 @@ import java.util.Map;
|
||||||
public abstract class AbstractResultSet extends WrapperImpl implements ResultSet {
|
public abstract class AbstractResultSet extends WrapperImpl implements ResultSet {
|
||||||
private int fetchSize;
|
private int fetchSize;
|
||||||
|
|
||||||
|
protected void checkAvailability(int columnIndex, int bounds) throws SQLException {
|
||||||
|
if (isClosed())
|
||||||
|
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_RESULTSET_CLOSED);
|
||||||
|
if (columnIndex < 1)
|
||||||
|
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_PARAMETER_INDEX_OUT_RANGE, "Column Index out of range, " + columnIndex + " < 1");
|
||||||
|
if (columnIndex > bounds)
|
||||||
|
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_PARAMETER_INDEX_OUT_RANGE, "Column Index out of range, " + columnIndex + " > " + bounds);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public abstract boolean next() throws SQLException;
|
public abstract boolean next() throws SQLException;
|
||||||
|
|
||||||
|
@ -46,38 +55,20 @@ public abstract class AbstractResultSet extends WrapperImpl implements ResultSet
|
||||||
@Override
|
@Override
|
||||||
public abstract double getDouble(int columnIndex) throws SQLException;
|
public abstract double getDouble(int columnIndex) throws SQLException;
|
||||||
|
|
||||||
|
@Deprecated
|
||||||
@Override
|
@Override
|
||||||
public BigDecimal getBigDecimal(int columnIndex, int scale) throws SQLException {
|
public BigDecimal getBigDecimal(int columnIndex, int scale) throws SQLException {
|
||||||
if (isClosed())
|
return getBigDecimal(columnIndex);
|
||||||
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_RESULTSET_CLOSED);
|
|
||||||
|
|
||||||
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_UNSUPPORTED_METHOD);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public byte[] getBytes(int columnIndex) throws SQLException {
|
public abstract byte[] getBytes(int columnIndex) throws SQLException;
|
||||||
if (isClosed())
|
|
||||||
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_RESULTSET_CLOSED);
|
|
||||||
|
|
||||||
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_UNSUPPORTED_METHOD);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Date getDate(int columnIndex) throws SQLException {
|
public abstract Date getDate(int columnIndex) throws SQLException;
|
||||||
if (isClosed())
|
|
||||||
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_RESULTSET_CLOSED);
|
|
||||||
|
|
||||||
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_UNSUPPORTED_METHOD);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Time getTime(int columnIndex) throws SQLException {
|
public abstract Time getTime(int columnIndex) throws SQLException;
|
||||||
if (isClosed())
|
|
||||||
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_RESULTSET_CLOSED);
|
|
||||||
|
|
||||||
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_UNSUPPORTED_METHOD);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public abstract Timestamp getTimestamp(int columnIndex) throws SQLException;
|
public abstract Timestamp getTimestamp(int columnIndex) throws SQLException;
|
||||||
|
@ -147,9 +138,10 @@ public abstract class AbstractResultSet extends WrapperImpl implements ResultSet
|
||||||
return getDouble(findColumn(columnLabel));
|
return getDouble(findColumn(columnLabel));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Deprecated
|
||||||
@Override
|
@Override
|
||||||
public BigDecimal getBigDecimal(String columnLabel, int scale) throws SQLException {
|
public BigDecimal getBigDecimal(String columnLabel, int scale) throws SQLException {
|
||||||
return getBigDecimal(findColumn(columnLabel));
|
return getBigDecimal(findColumn(columnLabel), scale);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -214,12 +206,7 @@ public abstract class AbstractResultSet extends WrapperImpl implements ResultSet
|
||||||
public abstract ResultSetMetaData getMetaData() throws SQLException;
|
public abstract ResultSetMetaData getMetaData() throws SQLException;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Object getObject(int columnIndex) throws SQLException {
|
public abstract Object getObject(int columnIndex) throws SQLException;
|
||||||
if (isClosed())
|
|
||||||
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_RESULTSET_CLOSED);
|
|
||||||
|
|
||||||
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_UNSUPPORTED_METHOD);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Object getObject(String columnLabel) throws SQLException {
|
public Object getObject(String columnLabel) throws SQLException {
|
||||||
|
@ -243,12 +230,7 @@ public abstract class AbstractResultSet extends WrapperImpl implements ResultSet
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public BigDecimal getBigDecimal(int columnIndex) throws SQLException {
|
public abstract BigDecimal getBigDecimal(int columnIndex) throws SQLException;
|
||||||
if (isClosed())
|
|
||||||
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_RESULTSET_CLOSED);
|
|
||||||
|
|
||||||
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_UNSUPPORTED_METHOD);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public BigDecimal getBigDecimal(String columnLabel) throws SQLException {
|
public BigDecimal getBigDecimal(String columnLabel) throws SQLException {
|
||||||
|
@ -718,9 +700,7 @@ public abstract class AbstractResultSet extends WrapperImpl implements ResultSet
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Object getObject(String columnLabel, Map<String, Class<?>> map) throws SQLException {
|
public Object getObject(String columnLabel, Map<String, Class<?>> map) throws SQLException {
|
||||||
if (isClosed())
|
return getObject(findColumn(columnLabel), map);
|
||||||
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_STATEMENT_CLOSED);
|
|
||||||
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_UNSUPPORTED_METHOD);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -760,9 +740,7 @@ public abstract class AbstractResultSet extends WrapperImpl implements ResultSet
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Date getDate(String columnLabel, Calendar cal) throws SQLException {
|
public Date getDate(String columnLabel, Calendar cal) throws SQLException {
|
||||||
if (isClosed())
|
return getDate(findColumn(columnLabel), cal);
|
||||||
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_STATEMENT_CLOSED);
|
|
||||||
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_UNSUPPORTED_METHOD);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -774,23 +752,15 @@ public abstract class AbstractResultSet extends WrapperImpl implements ResultSet
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Time getTime(String columnLabel, Calendar cal) throws SQLException {
|
public Time getTime(String columnLabel, Calendar cal) throws SQLException {
|
||||||
if (isClosed())
|
return getTime(findColumn(columnLabel), cal);
|
||||||
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_STATEMENT_CLOSED);
|
|
||||||
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_UNSUPPORTED_METHOD);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Timestamp getTimestamp(int columnIndex, Calendar cal) throws SQLException {
|
public abstract Timestamp getTimestamp(int columnIndex, Calendar cal) throws SQLException;
|
||||||
if (isClosed())
|
|
||||||
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_STATEMENT_CLOSED);
|
|
||||||
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_UNSUPPORTED_METHOD);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Timestamp getTimestamp(String columnLabel, Calendar cal) throws SQLException {
|
public Timestamp getTimestamp(String columnLabel, Calendar cal) throws SQLException {
|
||||||
if (isClosed())
|
return getTimestamp(findColumn(columnLabel), cal);
|
||||||
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_STATEMENT_CLOSED);
|
|
||||||
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_UNSUPPORTED_METHOD);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -1198,9 +1168,7 @@ public abstract class AbstractResultSet extends WrapperImpl implements ResultSet
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public <T> T getObject(String columnLabel, Class<T> type) throws SQLException {
|
public <T> T getObject(String columnLabel, Class<T> type) throws SQLException {
|
||||||
if (isClosed())
|
return getObject(findColumn(columnLabel), type);
|
||||||
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_STATEMENT_CLOSED);
|
|
||||||
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_UNSUPPORTED_METHOD);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,6 +9,8 @@ public abstract class AbstractStatement extends WrapperImpl implements Statement
|
||||||
protected List<String> batchedArgs;
|
protected List<String> batchedArgs;
|
||||||
private int fetchSize;
|
private int fetchSize;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public abstract ResultSet executeQuery(String sql) throws SQLException;
|
public abstract ResultSet executeQuery(String sql) throws SQLException;
|
||||||
|
|
||||||
|
|
|
@ -1,452 +0,0 @@
|
||||||
package com.taosdata.jdbc;
|
|
||||||
|
|
||||||
import com.taosdata.jdbc.bean.TSDBPreparedParam;
|
|
||||||
|
|
||||||
import java.sql.SQLException;
|
|
||||||
import java.sql.Timestamp;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.regex.Matcher;
|
|
||||||
import java.util.regex.Pattern;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* this class is used to precompile the sql of tdengine insert or import ops
|
|
||||||
*/
|
|
||||||
public class SavedPreparedStatement {
|
|
||||||
|
|
||||||
private TSDBPreparedStatement tsdbPreparedStatement;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* sql param List
|
|
||||||
*/
|
|
||||||
private List<TSDBPreparedParam> sqlParamList;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* init param according the sql
|
|
||||||
*/
|
|
||||||
private TSDBPreparedParam initPreparedParam;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* is table name dynamic in the prepared sql
|
|
||||||
*/
|
|
||||||
private boolean isTableNameDynamic;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* insert or import sql template pattern, the template are the following:
|
|
||||||
* <p>
|
|
||||||
* insert/import into tableName [(field1, field2, ...)] [using stables tags(?, ?, ...) ] values(?, ?, ...) (?, ?, ...)
|
|
||||||
* <p>
|
|
||||||
* we split it to three part:
|
|
||||||
* 1. prefix, insert/import
|
|
||||||
* 2. middle, tableName [(field1, field2, ...)] [using stables tags(?, ?, ...) ]
|
|
||||||
* 3. valueList, the content after values, for example (?, ?, ...) (?, ?, ...)
|
|
||||||
*/
|
|
||||||
private Pattern sqlPattern = Pattern.compile("(?s)(?i)^\\s*(INSERT|IMPORT)\\s+INTO\\s+((?<tablename>\\S+)\\s*(\\(.*\\))?\\s+(USING\\s+(?<stableName>\\S+)\\s+TAGS\\s*\\((?<tagValue>.+)\\))?)\\s*VALUES\\s*(?<valueList>\\(.*\\)).*");
|
|
||||||
|
|
||||||
/**
|
|
||||||
* the raw sql template
|
|
||||||
*/
|
|
||||||
private String sql;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* the prefix part of sql
|
|
||||||
*/
|
|
||||||
private String prefix;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* the middle part of sql
|
|
||||||
*/
|
|
||||||
private String middle;
|
|
||||||
|
|
||||||
private int middleParamSize;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* the valueList part of sql
|
|
||||||
*/
|
|
||||||
private String valueList;
|
|
||||||
|
|
||||||
private int valueListSize;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* default param value
|
|
||||||
*/
|
|
||||||
private static final String DEFAULT_VALUE = "NULL";
|
|
||||||
|
|
||||||
private static final String PLACEHOLDER = "?";
|
|
||||||
|
|
||||||
private String tableName;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* is the parameter add to batch list
|
|
||||||
*/
|
|
||||||
private boolean isAddBatch;
|
|
||||||
|
|
||||||
public SavedPreparedStatement(String sql, TSDBPreparedStatement tsdbPreparedStatement) throws SQLException {
|
|
||||||
this.sql = sql;
|
|
||||||
this.tsdbPreparedStatement = tsdbPreparedStatement;
|
|
||||||
this.sqlParamList = new ArrayList<>();
|
|
||||||
|
|
||||||
parsePreparedParam(this.sql);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* parse the init param according the sql param
|
|
||||||
*
|
|
||||||
* @param sql
|
|
||||||
*/
|
|
||||||
private void parsePreparedParam(String sql) throws SQLException {
|
|
||||||
|
|
||||||
Matcher matcher = sqlPattern.matcher(sql);
|
|
||||||
|
|
||||||
if (matcher.find()) {
|
|
||||||
|
|
||||||
tableName = matcher.group("tablename");
|
|
||||||
|
|
||||||
if (tableName != null && PLACEHOLDER.equals(tableName)) {
|
|
||||||
// the table name is dynamic
|
|
||||||
this.isTableNameDynamic = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
prefix = matcher.group(1);
|
|
||||||
middle = matcher.group(2);
|
|
||||||
valueList = matcher.group("valueList");
|
|
||||||
|
|
||||||
if (middle != null && !"".equals(middle)) {
|
|
||||||
middleParamSize = parsePlaceholder(middle);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (valueList != null && !"".equals(valueList)) {
|
|
||||||
valueListSize = parsePlaceholder(valueList);
|
|
||||||
}
|
|
||||||
|
|
||||||
initPreparedParam = initDefaultParam(tableName, middleParamSize, valueListSize);
|
|
||||||
|
|
||||||
} else {
|
|
||||||
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_INVALID_SQL);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
private TSDBPreparedParam initDefaultParam(String tableName, int middleParamSize, int valueListSize) {
|
|
||||||
|
|
||||||
TSDBPreparedParam tsdbPreparedParam = new TSDBPreparedParam(tableName);
|
|
||||||
|
|
||||||
tsdbPreparedParam.setMiddleParamList(getDefaultParamList(middleParamSize));
|
|
||||||
|
|
||||||
tsdbPreparedParam.setValueList(getDefaultParamList(valueListSize));
|
|
||||||
|
|
||||||
return tsdbPreparedParam;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* generate the default param value list
|
|
||||||
*
|
|
||||||
* @param paramSize
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
private List<Object> getDefaultParamList(int paramSize) {
|
|
||||||
|
|
||||||
List<Object> paramList = new ArrayList<>(paramSize);
|
|
||||||
if (paramSize > 0) {
|
|
||||||
for (int i = 0; i < paramSize; i++) {
|
|
||||||
paramList.add(i, DEFAULT_VALUE);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return paramList;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* calculate the placeholder num
|
|
||||||
*
|
|
||||||
* @param value
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
private int parsePlaceholder(String value) {
|
|
||||||
|
|
||||||
Pattern pattern = Pattern.compile("[?]");
|
|
||||||
|
|
||||||
Matcher matcher = pattern.matcher(value);
|
|
||||||
|
|
||||||
int result = 0;
|
|
||||||
while (matcher.find()) {
|
|
||||||
result++;
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* set current row params
|
|
||||||
*
|
|
||||||
* @param parameterIndex the first parameter is 1, the second is 2, ...
|
|
||||||
* @param x the parameter value
|
|
||||||
*/
|
|
||||||
public void setParam(int parameterIndex, Object x) throws SQLException {
|
|
||||||
|
|
||||||
int paramSize = this.middleParamSize + this.valueListSize;
|
|
||||||
|
|
||||||
String errorMsg = String.format("the parameterIndex %s out of the range [1, %s]", parameterIndex, paramSize);
|
|
||||||
|
|
||||||
if (parameterIndex < 1 || parameterIndex > paramSize) {
|
|
||||||
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_PARAMETER_INDEX_OUT_RANGE,errorMsg);
|
|
||||||
}
|
|
||||||
|
|
||||||
this.isAddBatch = false; //set isAddBatch to false
|
|
||||||
|
|
||||||
if (x == null) {
|
|
||||||
x = DEFAULT_VALUE; // set default null string
|
|
||||||
}
|
|
||||||
|
|
||||||
parameterIndex = parameterIndex - 1; // start from 0 in param list
|
|
||||||
|
|
||||||
if (this.middleParamSize > 0 && parameterIndex >= 0 && parameterIndex < this.middleParamSize) {
|
|
||||||
|
|
||||||
this.initPreparedParam.setMiddleParam(parameterIndex, x);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this.valueListSize > 0 && parameterIndex >= this.middleParamSize && parameterIndex < paramSize) {
|
|
||||||
|
|
||||||
this.initPreparedParam.setValueParam(parameterIndex - this.middleParamSize, x);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_PARAMETER_INDEX_OUT_RANGE,errorMsg);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void addBatch() {
|
|
||||||
|
|
||||||
addCurrentRowParamToList();
|
|
||||||
this.initPreparedParam = initDefaultParam(tableName, middleParamSize, valueListSize);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* add current param to batch list
|
|
||||||
*/
|
|
||||||
private void addCurrentRowParamToList() {
|
|
||||||
|
|
||||||
if (initPreparedParam != null && (this.middleParamSize > 0 || this.valueListSize > 0)) {
|
|
||||||
this.sqlParamList.add(initPreparedParam); // add current param to batch list
|
|
||||||
}
|
|
||||||
this.isAddBatch = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* execute the sql with batch sql
|
|
||||||
*
|
|
||||||
* @return
|
|
||||||
* @throws SQLException
|
|
||||||
*/
|
|
||||||
public int[] executeBatch() throws SQLException {
|
|
||||||
|
|
||||||
int result = executeBatchInternal();
|
|
||||||
|
|
||||||
return new int[]{result};
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public int executeBatchInternal() throws SQLException {
|
|
||||||
|
|
||||||
if (!isAddBatch) {
|
|
||||||
addCurrentRowParamToList(); // add current param to batch list
|
|
||||||
}
|
|
||||||
|
|
||||||
//1. generate batch sql
|
|
||||||
String sql = generateExecuteSql();
|
|
||||||
//2. execute batch sql
|
|
||||||
int result = executeSql(sql);
|
|
||||||
|
|
||||||
//3. clear batch param list
|
|
||||||
this.sqlParamList.clear();
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* generate the batch sql
|
|
||||||
*
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
private String generateExecuteSql() {
|
|
||||||
|
|
||||||
StringBuilder stringBuilder = new StringBuilder();
|
|
||||||
|
|
||||||
stringBuilder.append(prefix);
|
|
||||||
stringBuilder.append(" into ");
|
|
||||||
|
|
||||||
if (!isTableNameDynamic) {
|
|
||||||
// tablename will not need to be replaced
|
|
||||||
String middleValue = replaceMiddleListParam(middle, sqlParamList);
|
|
||||||
stringBuilder.append(middleValue);
|
|
||||||
stringBuilder.append(" values");
|
|
||||||
|
|
||||||
stringBuilder.append(replaceValueListParam(valueList, sqlParamList));
|
|
||||||
|
|
||||||
} else {
|
|
||||||
// need to replace tablename
|
|
||||||
|
|
||||||
if (sqlParamList.size() > 0) {
|
|
||||||
|
|
||||||
TSDBPreparedParam firstPreparedParam = sqlParamList.get(0);
|
|
||||||
|
|
||||||
//replace middle part and value part of first row
|
|
||||||
String firstRow = replaceMiddleAndValuePart(firstPreparedParam);
|
|
||||||
stringBuilder.append(firstRow);
|
|
||||||
|
|
||||||
//the first param in the middleParamList is the tableName
|
|
||||||
String lastTableName = firstPreparedParam.getMiddleParamList().get(0).toString();
|
|
||||||
|
|
||||||
if (sqlParamList.size() > 1) {
|
|
||||||
|
|
||||||
for (int i = 1; i < sqlParamList.size(); i++) {
|
|
||||||
TSDBPreparedParam currentParam = sqlParamList.get(i);
|
|
||||||
String currentTableName = currentParam.getMiddleParamList().get(0).toString();
|
|
||||||
if (lastTableName.equalsIgnoreCase(currentTableName)) {
|
|
||||||
// tablename is same with the last row ,so only need to append the part of value
|
|
||||||
|
|
||||||
String values = replaceTemplateParam(valueList, currentParam.getValueList());
|
|
||||||
stringBuilder.append(values);
|
|
||||||
|
|
||||||
} else {
|
|
||||||
// tablename difference with the last row
|
|
||||||
//need to replace middle part and value part
|
|
||||||
String row = replaceMiddleAndValuePart(currentParam);
|
|
||||||
stringBuilder.append(row);
|
|
||||||
lastTableName = currentTableName;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
} else {
|
|
||||||
|
|
||||||
stringBuilder.append(middle);
|
|
||||||
stringBuilder.append(" values");
|
|
||||||
stringBuilder.append(valueList);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
return stringBuilder.toString();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* replace the middle and value part
|
|
||||||
*
|
|
||||||
* @param tsdbPreparedParam
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
private String replaceMiddleAndValuePart(TSDBPreparedParam tsdbPreparedParam) {
|
|
||||||
|
|
||||||
StringBuilder stringBuilder = new StringBuilder(" ");
|
|
||||||
|
|
||||||
String middlePart = replaceTemplateParam(middle, tsdbPreparedParam.getMiddleParamList());
|
|
||||||
|
|
||||||
stringBuilder.append(middlePart);
|
|
||||||
stringBuilder.append(" values ");
|
|
||||||
|
|
||||||
String valuePart = replaceTemplateParam(valueList, tsdbPreparedParam.getValueList());
|
|
||||||
stringBuilder.append(valuePart);
|
|
||||||
stringBuilder.append(" ");
|
|
||||||
|
|
||||||
return stringBuilder.toString();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* replace the placeholder of the middle part of sql template with TSDBPreparedParam list
|
|
||||||
*
|
|
||||||
* @param template
|
|
||||||
* @param sqlParamList
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
private String replaceMiddleListParam(String template, List<TSDBPreparedParam> sqlParamList) {
|
|
||||||
|
|
||||||
if (sqlParamList.size() > 0) {
|
|
||||||
|
|
||||||
//becase once the subTableName is static then will be ignore the tag which after the first setTag
|
|
||||||
return replaceTemplateParam(template, sqlParamList.get(0).getMiddleParamList());
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
return template;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* replace the placeholder of the template with TSDBPreparedParam list
|
|
||||||
*
|
|
||||||
* @param template
|
|
||||||
* @param sqlParamList
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
private String replaceValueListParam(String template, List<TSDBPreparedParam> sqlParamList) {
|
|
||||||
|
|
||||||
StringBuilder stringBuilder = new StringBuilder();
|
|
||||||
|
|
||||||
if (sqlParamList.size() > 0) {
|
|
||||||
|
|
||||||
for (TSDBPreparedParam tsdbPreparedParam : sqlParamList) {
|
|
||||||
|
|
||||||
String tmp = replaceTemplateParam(template, tsdbPreparedParam.getValueList());
|
|
||||||
|
|
||||||
stringBuilder.append(tmp);
|
|
||||||
}
|
|
||||||
|
|
||||||
} else {
|
|
||||||
stringBuilder.append(template);
|
|
||||||
}
|
|
||||||
|
|
||||||
return stringBuilder.toString();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* replace the placeholder of the template with paramList
|
|
||||||
*
|
|
||||||
* @param template
|
|
||||||
* @param paramList
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
private String replaceTemplateParam(String template, List<Object> paramList) {
|
|
||||||
|
|
||||||
if (paramList.size() > 0) {
|
|
||||||
|
|
||||||
String tmp = template;
|
|
||||||
|
|
||||||
for (int i = 0; i < paramList.size(); ++i) {
|
|
||||||
|
|
||||||
String paraStr = getParamString(paramList.get(i));
|
|
||||||
|
|
||||||
tmp = tmp.replaceFirst("[" + PLACEHOLDER + "]", paraStr);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
return tmp;
|
|
||||||
|
|
||||||
} else {
|
|
||||||
return template;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* get the string of param object
|
|
||||||
*
|
|
||||||
* @param paramObj
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
private String getParamString(Object paramObj) {
|
|
||||||
|
|
||||||
String paraStr = paramObj.toString();
|
|
||||||
if (paramObj instanceof Timestamp || (paramObj instanceof String && !DEFAULT_VALUE.equalsIgnoreCase(paraStr))) {
|
|
||||||
paraStr = "'" + paraStr + "'";
|
|
||||||
}
|
|
||||||
return paraStr;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
private int executeSql(String sql) throws SQLException {
|
|
||||||
|
|
||||||
return tsdbPreparedStatement.executeUpdate(sql);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -27,10 +27,6 @@ public class TSDBConnection extends AbstractConnection {
|
||||||
return this.batchFetch;
|
return this.batchFetch;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setBatchFetch(Boolean batchFetch) {
|
|
||||||
this.batchFetch = batchFetch;
|
|
||||||
}
|
|
||||||
|
|
||||||
public TSDBConnection(Properties info, TSDBDatabaseMetaData meta) throws SQLException {
|
public TSDBConnection(Properties info, TSDBDatabaseMetaData meta) throws SQLException {
|
||||||
this.databaseMetaData = meta;
|
this.databaseMetaData = meta;
|
||||||
connect(info.getProperty(TSDBDriver.PROPERTY_KEY_HOST),
|
connect(info.getProperty(TSDBDriver.PROPERTY_KEY_HOST),
|
||||||
|
@ -61,9 +57,7 @@ public class TSDBConnection extends AbstractConnection {
|
||||||
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_CONNECTION_CLOSED);
|
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_CONNECTION_CLOSED);
|
||||||
}
|
}
|
||||||
|
|
||||||
TSDBStatement statement = new TSDBStatement(this, this.connector);
|
return new TSDBStatement(this, this.connector);
|
||||||
statement.setConnection(this);
|
|
||||||
return statement;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public TSDBSubscribe subscribe(String topic, String sql, boolean restart) throws SQLException {
|
public TSDBSubscribe subscribe(String topic, String sql, boolean restart) throws SQLException {
|
||||||
|
@ -79,10 +73,8 @@ public class TSDBConnection extends AbstractConnection {
|
||||||
}
|
}
|
||||||
|
|
||||||
public PreparedStatement prepareStatement(String sql) throws SQLException {
|
public PreparedStatement prepareStatement(String sql) throws SQLException {
|
||||||
if (isClosed()) {
|
if (isClosed())
|
||||||
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_CONNECTION_CLOSED);
|
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_CONNECTION_CLOSED);
|
||||||
}
|
|
||||||
|
|
||||||
return new TSDBPreparedStatement(this, this.connector, sql);
|
return new TSDBPreparedStatement(this, this.connector, sql);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -104,11 +96,4 @@ public class TSDBConnection extends AbstractConnection {
|
||||||
return this.databaseMetaData;
|
return this.databaseMetaData;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Statement createStatement(int resultSetType, int resultSetConcurrency) throws SQLException {
|
|
||||||
if (isClosed()) {
|
|
||||||
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_CONNECTION_CLOSED);
|
|
||||||
}
|
|
||||||
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_UNSUPPORTED_METHOD);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
|
@ -0,0 +1,8 @@
|
||||||
|
package com.taosdata.jdbc;
|
||||||
|
|
||||||
|
public class TSDBParameterMetaData extends AbstractParameterMetaData {
|
||||||
|
|
||||||
|
public TSDBParameterMetaData(Object[] parameters) {
|
||||||
|
super(parameters);
|
||||||
|
}
|
||||||
|
}
|
|
@ -18,6 +18,7 @@ import java.io.InputStream;
|
||||||
import java.io.Reader;
|
import java.io.Reader;
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
|
import java.nio.charset.Charset;
|
||||||
import java.sql.*;
|
import java.sql.*;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Calendar;
|
import java.util.Calendar;
|
||||||
|
@ -30,36 +31,49 @@ import java.util.regex.Pattern;
|
||||||
* compatibility needs.
|
* compatibility needs.
|
||||||
*/
|
*/
|
||||||
public class TSDBPreparedStatement extends TSDBStatement implements PreparedStatement {
|
public class TSDBPreparedStatement extends TSDBStatement implements PreparedStatement {
|
||||||
protected String rawSql;
|
|
||||||
protected String sql;
|
private String rawSql;
|
||||||
protected ArrayList<Object> parameters = new ArrayList<>();
|
private String sql;
|
||||||
|
// private ArrayList<Object> parameters = new ArrayList<>();
|
||||||
|
private Object[] parameters;
|
||||||
|
private boolean isPrepared;
|
||||||
|
|
||||||
//start with insert or import and is case-insensitive
|
//start with insert or import and is case-insensitive
|
||||||
private static Pattern savePattern = Pattern.compile("(?i)^\\s*(insert|import)");
|
private static Pattern savePattern = Pattern.compile("(?i)^\\s*(insert|import)");
|
||||||
|
|
||||||
// is insert or import
|
// is insert or import
|
||||||
private boolean isSaved;
|
private boolean isSaved;
|
||||||
|
|
||||||
private SavedPreparedStatement savedPreparedStatement;
|
// private SavedPreparedStatement savedPreparedStatement;
|
||||||
private ParameterMetaData parameterMetaData;
|
private volatile TSDBParameterMetaData parameterMetaData;
|
||||||
|
|
||||||
TSDBPreparedStatement(TSDBConnection connection, TSDBJNIConnector connecter, String sql) {
|
TSDBPreparedStatement(TSDBConnection connection, TSDBJNIConnector connecter, String sql) {
|
||||||
super(connection, connecter);
|
super(connection, connecter);
|
||||||
init(sql);
|
init(sql);
|
||||||
|
|
||||||
|
if (sql.contains("?")) {
|
||||||
|
int parameterCnt = 0;
|
||||||
|
for (int i = 0; i < sql.length(); i++) {
|
||||||
|
if ('?' == sql.charAt(i)) {
|
||||||
|
parameterCnt++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
parameters = new Object[parameterCnt];
|
||||||
|
this.isPrepared = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void init(String sql) {
|
private void init(String sql) {
|
||||||
this.rawSql = sql;
|
this.rawSql = sql;
|
||||||
preprocessSql();
|
preprocessSql();
|
||||||
|
// this.isSaved = isSavedSql(this.rawSql);
|
||||||
|
// if (this.isSaved) {
|
||||||
|
// try {
|
||||||
|
// this.savedPreparedStatement = new SavedPreparedStatement(this.rawSql, this);
|
||||||
|
// } catch (SQLException e) {
|
||||||
|
// e.printStackTrace();
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
this.isSaved = isSavedSql(this.rawSql);
|
|
||||||
if (this.isSaved) {
|
|
||||||
try {
|
|
||||||
this.savedPreparedStatement = new SavedPreparedStatement(this.rawSql, this);
|
|
||||||
} catch (SQLException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -75,19 +89,11 @@ public class TSDBPreparedStatement extends TSDBStatement implements PreparedStat
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int[] executeBatch() throws SQLException {
|
public int[] executeBatch() throws SQLException {
|
||||||
if (isSaved) {
|
// if (isSaved) {
|
||||||
return this.savedPreparedStatement.executeBatch();
|
// return this.savedPreparedStatement.executeBatch();
|
||||||
} else {
|
// } else {
|
||||||
return super.executeBatch();
|
return super.executeBatch();
|
||||||
}
|
// }
|
||||||
}
|
|
||||||
|
|
||||||
public ArrayList<Object> getParameters() {
|
|
||||||
return parameters;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setParameters(ArrayList<Object> parameters) {
|
|
||||||
this.parameters = parameters;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -151,41 +157,73 @@ public class TSDBPreparedStatement extends TSDBStatement implements PreparedStat
|
||||||
*
|
*
|
||||||
* @return a string of the native sql statement for TSDB
|
* @return a string of the native sql statement for TSDB
|
||||||
*/
|
*/
|
||||||
private String getNativeSql() {
|
// private String getNativeSql(String rawSql) {
|
||||||
this.sql = this.rawSql;
|
// for (int i = 0; i < parameters.length; i++) {
|
||||||
for (int i = 0; i < parameters.size(); ++i) {
|
// Object para = parameters[i];
|
||||||
Object para = parameters.get(i);
|
// if (para != null) {
|
||||||
|
// String paraStr = para.toString();
|
||||||
|
// if (para instanceof Timestamp || para instanceof String) {
|
||||||
|
// paraStr = "'" + paraStr + "'";
|
||||||
|
// }
|
||||||
|
// this.sql = this.sql.replaceFirst("[?]", paraStr);
|
||||||
|
// } else {
|
||||||
|
// this.sql = this.sql.replaceFirst("[?]", "NULL");
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// parameters = new Object[parameters.length];
|
||||||
|
// return sql;
|
||||||
|
// }
|
||||||
|
|
||||||
|
private String getNativeSql(String rawSql) throws SQLException {
|
||||||
|
String sql = rawSql;
|
||||||
|
for (int i = 0; i < parameters.length; ++i) {
|
||||||
|
Object para = parameters[i];
|
||||||
if (para != null) {
|
if (para != null) {
|
||||||
String paraStr = para.toString();
|
String paraStr;
|
||||||
if (para instanceof Timestamp || para instanceof String) {
|
if (para instanceof byte[]) {
|
||||||
|
paraStr = new String((byte[]) para, Charset.forName("UTF-8"));
|
||||||
|
} else {
|
||||||
|
paraStr = para.toString();
|
||||||
|
}
|
||||||
|
// if para is timestamp or String or byte[] need to translate ' character
|
||||||
|
if (para instanceof Timestamp || para instanceof String || para instanceof byte[]) {
|
||||||
|
paraStr = paraStr.replaceAll("'", "\\\\\\\\'");
|
||||||
paraStr = "'" + paraStr + "'";
|
paraStr = "'" + paraStr + "'";
|
||||||
}
|
}
|
||||||
this.sql = this.sql.replaceFirst("[?]", paraStr);
|
sql = sql.replaceFirst("[?]", paraStr);
|
||||||
} else {
|
} else {
|
||||||
this.sql = this.sql.replaceFirst("[?]", "NULL");
|
sql = sql.replaceFirst("[?]", "NULL");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
parameters.clear();
|
clearParameters();
|
||||||
return sql;
|
return sql;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ResultSet executeQuery() throws SQLException {
|
public ResultSet executeQuery() throws SQLException {
|
||||||
if (isSaved) {
|
// if (isSaved) {
|
||||||
this.savedPreparedStatement.executeBatchInternal();
|
// this.savedPreparedStatement.executeBatchInternal();
|
||||||
return null;
|
// return null;
|
||||||
} else {
|
// } else {
|
||||||
return super.executeQuery(getNativeSql());
|
|
||||||
}
|
if (!isPrepared)
|
||||||
|
return executeQuery(this.rawSql);
|
||||||
|
|
||||||
|
final String sql = getNativeSql(this.rawSql);
|
||||||
|
return executeQuery(sql);
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int executeUpdate() throws SQLException {
|
public int executeUpdate() throws SQLException {
|
||||||
if (isSaved) {
|
// if (isSaved) {
|
||||||
return this.savedPreparedStatement.executeBatchInternal();
|
// return this.savedPreparedStatement.executeBatchInternal();
|
||||||
} else {
|
// } else {
|
||||||
return super.executeUpdate(getNativeSql());
|
if (!isPrepared)
|
||||||
}
|
return executeUpdate(this.rawSql);
|
||||||
|
String sql = getNativeSql(this.rawSql);
|
||||||
|
return executeUpdate(sql);
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean isSupportedSQLType(int sqlType) {
|
private boolean isSupportedSQLType(int sqlType) {
|
||||||
|
@ -201,35 +239,6 @@ public class TSDBPreparedStatement extends TSDBStatement implements PreparedStat
|
||||||
case Types.BINARY:
|
case Types.BINARY:
|
||||||
case Types.NCHAR:
|
case Types.NCHAR:
|
||||||
return true;
|
return true;
|
||||||
case Types.ARRAY:
|
|
||||||
case Types.BIT:
|
|
||||||
case Types.BLOB:
|
|
||||||
case Types.CHAR:
|
|
||||||
case Types.CLOB:
|
|
||||||
case Types.DATALINK:
|
|
||||||
case Types.DATE:
|
|
||||||
case Types.DECIMAL:
|
|
||||||
case Types.DISTINCT:
|
|
||||||
case Types.JAVA_OBJECT:
|
|
||||||
case Types.LONGNVARCHAR:
|
|
||||||
case Types.LONGVARBINARY:
|
|
||||||
case Types.LONGVARCHAR:
|
|
||||||
case Types.NCLOB:
|
|
||||||
case Types.NULL:
|
|
||||||
case Types.NUMERIC:
|
|
||||||
case Types.NVARCHAR:
|
|
||||||
case Types.OTHER:
|
|
||||||
case Types.REAL:
|
|
||||||
case Types.REF:
|
|
||||||
case Types.REF_CURSOR:
|
|
||||||
case Types.ROWID:
|
|
||||||
case Types.SQLXML:
|
|
||||||
case Types.STRUCT:
|
|
||||||
case Types.TIME:
|
|
||||||
case Types.TIME_WITH_TIMEZONE:
|
|
||||||
case Types.TIMESTAMP_WITH_TIMEZONE:
|
|
||||||
case Types.VARBINARY:
|
|
||||||
case Types.VARCHAR:
|
|
||||||
default:
|
default:
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -259,7 +268,7 @@ public class TSDBPreparedStatement extends TSDBStatement implements PreparedStat
|
||||||
public void setByte(int parameterIndex, byte x) throws SQLException {
|
public void setByte(int parameterIndex, byte x) throws SQLException {
|
||||||
if (isClosed())
|
if (isClosed())
|
||||||
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_STATEMENT_CLOSED);
|
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_STATEMENT_CLOSED);
|
||||||
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_UNSUPPORTED_METHOD);
|
setObject(parameterIndex,x);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -315,7 +324,8 @@ public class TSDBPreparedStatement extends TSDBStatement implements PreparedStat
|
||||||
public void setBytes(int parameterIndex, byte[] x) throws SQLException {
|
public void setBytes(int parameterIndex, byte[] x) throws SQLException {
|
||||||
if (isClosed())
|
if (isClosed())
|
||||||
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_STATEMENT_CLOSED);
|
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_STATEMENT_CLOSED);
|
||||||
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_UNSUPPORTED_METHOD);
|
|
||||||
|
setObject(parameterIndex,x);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -365,45 +375,63 @@ public class TSDBPreparedStatement extends TSDBStatement implements PreparedStat
|
||||||
public void clearParameters() throws SQLException {
|
public void clearParameters() throws SQLException {
|
||||||
if (isClosed())
|
if (isClosed())
|
||||||
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_STATEMENT_CLOSED);
|
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_STATEMENT_CLOSED);
|
||||||
parameters.clear();
|
|
||||||
|
// parameters.clear();
|
||||||
|
parameters = new Object[parameters.length];
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setObject(int parameterIndex, Object x, int targetSqlType) throws SQLException {
|
public void setObject(int parameterIndex, Object x, int targetSqlType) throws SQLException {
|
||||||
if (isClosed())
|
if (isClosed())
|
||||||
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_STATEMENT_CLOSED);
|
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_STATEMENT_CLOSED);
|
||||||
|
|
||||||
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_UNSUPPORTED_METHOD);
|
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_UNSUPPORTED_METHOD);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setObject(int parameterIndex, Object x) throws SQLException {
|
public void setObject(int parameterIndex, Object x) throws SQLException {
|
||||||
if (isSaved) {
|
// if (isSaved) {
|
||||||
this.savedPreparedStatement.setParam(parameterIndex, x);
|
// this.savedPreparedStatement.setParam(parameterIndex, x);
|
||||||
} else {
|
// } else {
|
||||||
parameters.add(x);
|
if (parameterIndex < 1 && parameterIndex >= parameters.length)
|
||||||
}
|
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_PARAMETER_INDEX_OUT_RANGE);
|
||||||
|
|
||||||
|
parameters[parameterIndex - 1] = x;
|
||||||
|
// parameters.add(x);
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean execute() throws SQLException {
|
public boolean execute() throws SQLException {
|
||||||
if (isSaved) {
|
// if (isSaved) {
|
||||||
int result = this.savedPreparedStatement.executeBatchInternal();
|
// int result = this.savedPreparedStatement.executeBatchInternal();
|
||||||
return result > 0;
|
// return result > 0;
|
||||||
} else {
|
// } else {
|
||||||
return super.execute(getNativeSql());
|
if (!isPrepared)
|
||||||
}
|
return execute(this.rawSql);
|
||||||
|
|
||||||
|
final String sql = getNativeSql(this.rawSql);
|
||||||
|
|
||||||
|
return execute(sql);
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addBatch() throws SQLException {
|
public void addBatch() throws SQLException {
|
||||||
if (isSaved) {
|
// if (isSaved) {
|
||||||
this.savedPreparedStatement.addBatch();
|
// this.savedPreparedStatement.addBatch();
|
||||||
} else {
|
// } else {
|
||||||
if (this.batchedArgs == null) {
|
if (this.batchedArgs == null) {
|
||||||
batchedArgs = new ArrayList<>();
|
batchedArgs = new ArrayList<>();
|
||||||
}
|
}
|
||||||
super.addBatch(getNativeSql());
|
|
||||||
|
if (!isPrepared) {
|
||||||
|
addBatch(this.rawSql);
|
||||||
|
} else {
|
||||||
|
String sql = this.getConnection().nativeSQL(this.rawSql);
|
||||||
|
addBatch(sql);
|
||||||
}
|
}
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -491,9 +519,11 @@ public class TSDBPreparedStatement extends TSDBStatement implements PreparedStat
|
||||||
public ParameterMetaData getParameterMetaData() throws SQLException {
|
public ParameterMetaData getParameterMetaData() throws SQLException {
|
||||||
if (isClosed())
|
if (isClosed())
|
||||||
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_STATEMENT_CLOSED);
|
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_STATEMENT_CLOSED);
|
||||||
//TODO: parameterMetaData not supported
|
|
||||||
// return null;
|
if (parameterMetaData == null) {
|
||||||
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_UNSUPPORTED_METHOD);
|
this.parameterMetaData = new TSDBParameterMetaData(parameters);
|
||||||
|
}
|
||||||
|
return this.parameterMetaData;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -14,9 +14,14 @@
|
||||||
*****************************************************************************/
|
*****************************************************************************/
|
||||||
package com.taosdata.jdbc;
|
package com.taosdata.jdbc;
|
||||||
|
|
||||||
|
import com.google.common.primitives.Ints;
|
||||||
|
import com.google.common.primitives.Longs;
|
||||||
|
import com.google.common.primitives.Shorts;
|
||||||
|
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.sql.*;
|
import java.sql.*;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Calendar;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class TSDBResultSet extends AbstractResultSet implements ResultSet {
|
public class TSDBResultSet extends AbstractResultSet implements ResultSet {
|
||||||
|
@ -120,158 +125,189 @@ public class TSDBResultSet extends AbstractResultSet implements ResultSet {
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getString(int columnIndex) throws SQLException {
|
public String getString(int columnIndex) throws SQLException {
|
||||||
|
checkAvailability(columnIndex, this.columnMetaDataList.size());
|
||||||
|
|
||||||
String res = null;
|
String res = null;
|
||||||
int colIndex = getTrueColumnIndex(columnIndex);
|
|
||||||
|
|
||||||
if (this.getBatchFetch())
|
if (this.getBatchFetch())
|
||||||
return this.blockData.getString(colIndex);
|
return this.blockData.getString(columnIndex - 1);
|
||||||
|
|
||||||
this.lastWasNull = this.rowData.wasNull(colIndex);
|
this.lastWasNull = this.rowData.wasNull(columnIndex - 1);
|
||||||
if (!lastWasNull) {
|
if (!lastWasNull) {
|
||||||
res = this.rowData.getString(colIndex, this.columnMetaDataList.get(colIndex).getColType());
|
res = this.rowData.getString(columnIndex - 1, this.columnMetaDataList.get(columnIndex - 1).getColType());
|
||||||
}
|
}
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean getBoolean(int columnIndex) throws SQLException {
|
public boolean getBoolean(int columnIndex) throws SQLException {
|
||||||
|
checkAvailability(columnIndex, this.columnMetaDataList.size());
|
||||||
|
|
||||||
boolean res = false;
|
boolean res = false;
|
||||||
int colIndex = getTrueColumnIndex(columnIndex);
|
|
||||||
|
|
||||||
if (this.getBatchFetch())
|
if (this.getBatchFetch())
|
||||||
return this.blockData.getBoolean(colIndex);
|
return this.blockData.getBoolean(columnIndex - 1);
|
||||||
|
|
||||||
this.lastWasNull = this.rowData.wasNull(colIndex);
|
this.lastWasNull = this.rowData.wasNull(columnIndex - 1);
|
||||||
if (!lastWasNull) {
|
if (!lastWasNull) {
|
||||||
res = this.rowData.getBoolean(colIndex, this.columnMetaDataList.get(colIndex).getColType());
|
res = this.rowData.getBoolean(columnIndex - 1, this.columnMetaDataList.get(columnIndex - 1).getColType());
|
||||||
}
|
}
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
public byte getByte(int columnIndex) throws SQLException {
|
public byte getByte(int columnIndex) throws SQLException {
|
||||||
|
checkAvailability(columnIndex, this.columnMetaDataList.size());
|
||||||
|
|
||||||
byte res = 0;
|
byte res = 0;
|
||||||
int colIndex = getTrueColumnIndex(columnIndex);
|
|
||||||
|
|
||||||
if (this.getBatchFetch())
|
if (this.getBatchFetch())
|
||||||
return (byte) this.blockData.getInt(colIndex);
|
return (byte) this.blockData.getInt(columnIndex - 1);
|
||||||
|
|
||||||
this.lastWasNull = this.rowData.wasNull(colIndex);
|
this.lastWasNull = this.rowData.wasNull(columnIndex - 1);
|
||||||
if (!lastWasNull) {
|
if (!lastWasNull) {
|
||||||
res = (byte) this.rowData.getInt(colIndex, this.columnMetaDataList.get(colIndex).getColType());
|
res = (byte) this.rowData.getInt(columnIndex - 1, this.columnMetaDataList.get(columnIndex - 1).getColType());
|
||||||
}
|
}
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
public short getShort(int columnIndex) throws SQLException {
|
public short getShort(int columnIndex) throws SQLException {
|
||||||
|
checkAvailability(columnIndex, this.columnMetaDataList.size());
|
||||||
|
|
||||||
short res = 0;
|
short res = 0;
|
||||||
int colIndex = getTrueColumnIndex(columnIndex);
|
|
||||||
|
|
||||||
if (this.getBatchFetch())
|
if (this.getBatchFetch())
|
||||||
return (short) this.blockData.getInt(colIndex);
|
return (short) this.blockData.getInt(columnIndex - 1);
|
||||||
|
|
||||||
this.lastWasNull = this.rowData.wasNull(colIndex);
|
this.lastWasNull = this.rowData.wasNull(columnIndex - 1);
|
||||||
if (!lastWasNull) {
|
if (!lastWasNull) {
|
||||||
res = (short) this.rowData.getInt(colIndex, this.columnMetaDataList.get(colIndex).getColType());
|
res = (short) this.rowData.getInt(columnIndex - 1, this.columnMetaDataList.get(columnIndex - 1).getColType());
|
||||||
}
|
}
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getInt(int columnIndex) throws SQLException {
|
public int getInt(int columnIndex) throws SQLException {
|
||||||
|
checkAvailability(columnIndex, this.columnMetaDataList.size());
|
||||||
|
|
||||||
int res = 0;
|
int res = 0;
|
||||||
int colIndex = getTrueColumnIndex(columnIndex);
|
|
||||||
|
|
||||||
if (this.getBatchFetch())
|
if (this.getBatchFetch())
|
||||||
return this.blockData.getInt(colIndex);
|
return this.blockData.getInt(columnIndex - 1);
|
||||||
|
|
||||||
this.lastWasNull = this.rowData.wasNull(colIndex);
|
this.lastWasNull = this.rowData.wasNull(columnIndex - 1);
|
||||||
if (!lastWasNull) {
|
if (!lastWasNull) {
|
||||||
res = this.rowData.getInt(colIndex, this.columnMetaDataList.get(colIndex).getColType());
|
res = this.rowData.getInt(columnIndex - 1, this.columnMetaDataList.get(columnIndex - 1).getColType());
|
||||||
}
|
}
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
public long getLong(int columnIndex) throws SQLException {
|
public long getLong(int columnIndex) throws SQLException {
|
||||||
|
checkAvailability(columnIndex, this.columnMetaDataList.size());
|
||||||
|
|
||||||
long res = 0L;
|
long res = 0L;
|
||||||
int colIndex = getTrueColumnIndex(columnIndex);
|
|
||||||
|
|
||||||
if (this.getBatchFetch())
|
if (this.getBatchFetch())
|
||||||
return this.blockData.getLong(colIndex);
|
return this.blockData.getLong(columnIndex - 1);
|
||||||
|
|
||||||
this.lastWasNull = this.rowData.wasNull(colIndex);
|
this.lastWasNull = this.rowData.wasNull(columnIndex - 1);
|
||||||
if (!lastWasNull) {
|
if (!lastWasNull) {
|
||||||
res = this.rowData.getLong(colIndex, this.columnMetaDataList.get(colIndex).getColType());
|
res = this.rowData.getLong(columnIndex - 1, this.columnMetaDataList.get(columnIndex - 1).getColType());
|
||||||
}
|
}
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
public float getFloat(int columnIndex) throws SQLException {
|
public float getFloat(int columnIndex) throws SQLException {
|
||||||
|
checkAvailability(columnIndex, this.columnMetaDataList.size());
|
||||||
|
|
||||||
float res = 0;
|
float res = 0;
|
||||||
int colIndex = getTrueColumnIndex(columnIndex);
|
|
||||||
|
|
||||||
if (this.getBatchFetch())
|
if (this.getBatchFetch())
|
||||||
return (float) this.blockData.getDouble(colIndex);
|
return (float) this.blockData.getDouble(columnIndex - 1);
|
||||||
|
|
||||||
this.lastWasNull = this.rowData.wasNull(colIndex);
|
this.lastWasNull = this.rowData.wasNull(columnIndex - 1);
|
||||||
if (!lastWasNull)
|
if (!lastWasNull)
|
||||||
res = this.rowData.getFloat(colIndex, this.columnMetaDataList.get(colIndex).getColType());
|
res = this.rowData.getFloat(columnIndex - 1, this.columnMetaDataList.get(columnIndex - 1).getColType());
|
||||||
|
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
public double getDouble(int columnIndex) throws SQLException {
|
public double getDouble(int columnIndex) throws SQLException {
|
||||||
|
checkAvailability(columnIndex, this.columnMetaDataList.size());
|
||||||
|
|
||||||
double res = 0;
|
double res = 0;
|
||||||
int colIndex = getTrueColumnIndex(columnIndex);
|
|
||||||
|
|
||||||
if (this.getBatchFetch())
|
if (this.getBatchFetch())
|
||||||
return this.blockData.getDouble(colIndex);
|
return this.blockData.getDouble(columnIndex - 1);
|
||||||
|
|
||||||
this.lastWasNull = this.rowData.wasNull(colIndex);
|
this.lastWasNull = this.rowData.wasNull(columnIndex - 1);
|
||||||
if (!lastWasNull) {
|
if (!lastWasNull) {
|
||||||
res = this.rowData.getDouble(colIndex, this.columnMetaDataList.get(colIndex).getColType());
|
res = this.rowData.getDouble(columnIndex - 1, this.columnMetaDataList.get(columnIndex - 1).getColType());
|
||||||
}
|
}
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Deprecated
|
public byte[] getBytes(int columnIndex) throws SQLException {
|
||||||
public BigDecimal getBigDecimal(int columnIndex, int scale) throws SQLException {
|
checkAvailability(columnIndex, this.columnMetaDataList.size());
|
||||||
return new BigDecimal(getLong(columnIndex));
|
|
||||||
|
Object value = this.rowData.get(columnIndex - 1);
|
||||||
|
if (value == null)
|
||||||
|
return null;
|
||||||
|
|
||||||
|
int colType = this.columnMetaDataList.get(columnIndex - 1).getColType();
|
||||||
|
switch (colType) {
|
||||||
|
case TSDBConstants.TSDB_DATA_TYPE_BIGINT:
|
||||||
|
return Longs.toByteArray((Long) value);
|
||||||
|
case TSDBConstants.TSDB_DATA_TYPE_INT:
|
||||||
|
return Ints.toByteArray((int) value);
|
||||||
|
case TSDBConstants.TSDB_DATA_TYPE_SMALLINT:
|
||||||
|
return Shorts.toByteArray((Short) value);
|
||||||
|
case TSDBConstants.TSDB_DATA_TYPE_TINYINT:
|
||||||
|
return new byte[]{(byte) value};
|
||||||
|
}
|
||||||
|
return value.toString().getBytes();
|
||||||
}
|
}
|
||||||
|
|
||||||
public byte[] getBytes(int columnIndex) throws SQLException {
|
@Override
|
||||||
return getString(columnIndex).getBytes();
|
public Date getDate(int columnIndex) throws SQLException {
|
||||||
|
Timestamp timestamp = getTimestamp(columnIndex);
|
||||||
|
return timestamp == null ? null : new Date(timestamp.getTime());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Time getTime(int columnIndex) throws SQLException {
|
||||||
|
Timestamp timestamp = getTimestamp(columnIndex);
|
||||||
|
return timestamp == null ? null : new Time(timestamp.getTime());
|
||||||
}
|
}
|
||||||
|
|
||||||
public Timestamp getTimestamp(int columnIndex) throws SQLException {
|
public Timestamp getTimestamp(int columnIndex) throws SQLException {
|
||||||
|
checkAvailability(columnIndex, this.columnMetaDataList.size());
|
||||||
|
|
||||||
Timestamp res = null;
|
Timestamp res = null;
|
||||||
int colIndex = getTrueColumnIndex(columnIndex);
|
|
||||||
|
|
||||||
if (this.getBatchFetch())
|
if (this.getBatchFetch())
|
||||||
return this.blockData.getTimestamp(columnIndex);
|
return this.blockData.getTimestamp(columnIndex - 1);
|
||||||
|
|
||||||
this.lastWasNull = this.rowData.wasNull(colIndex);
|
this.lastWasNull = this.rowData.wasNull(columnIndex - 1);
|
||||||
if (!lastWasNull) {
|
if (!lastWasNull) {
|
||||||
res = this.rowData.getTimestamp(colIndex);
|
res = this.rowData.getTimestamp(columnIndex - 1);
|
||||||
}
|
}
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ResultSetMetaData getMetaData() throws SQLException {
|
public ResultSetMetaData getMetaData() throws SQLException {
|
||||||
|
if (isClosed())
|
||||||
|
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_RESULTSET_CLOSED);
|
||||||
|
|
||||||
return new TSDBResultSetMetaData(this.columnMetaDataList);
|
return new TSDBResultSetMetaData(this.columnMetaDataList);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Object getObject(int columnIndex) throws SQLException {
|
public Object getObject(int columnIndex) throws SQLException {
|
||||||
int colIndex = getTrueColumnIndex(columnIndex);
|
checkAvailability(columnIndex, this.columnMetaDataList.size());
|
||||||
|
|
||||||
|
Object res = null;
|
||||||
if (this.getBatchFetch())
|
if (this.getBatchFetch())
|
||||||
return this.blockData.get(colIndex);
|
return this.blockData.get(columnIndex - 1);
|
||||||
|
|
||||||
this.lastWasNull = this.rowData.wasNull(colIndex);
|
this.lastWasNull = this.rowData.wasNull(columnIndex - 1);
|
||||||
return this.rowData.get(colIndex);
|
if (!lastWasNull) {
|
||||||
|
int colType = this.columnMetaDataList.get(columnIndex - 1).getColType();
|
||||||
|
if (colType == TSDBConstants.TSDB_DATA_TYPE_BINARY)
|
||||||
|
res = ((String) this.rowData.get(columnIndex - 1)).getBytes();
|
||||||
|
else
|
||||||
|
res = this.rowData.get(columnIndex - 1);
|
||||||
}
|
}
|
||||||
|
return res;
|
||||||
@Override
|
|
||||||
public Object getObject(String columnLabel) throws SQLException {
|
|
||||||
return this.getObject(this.findColumn(columnLabel));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public int findColumn(String columnLabel) throws SQLException {
|
public int findColumn(String columnLabel) throws SQLException {
|
||||||
|
@ -285,15 +321,32 @@ public class TSDBResultSet extends AbstractResultSet implements ResultSet {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public BigDecimal getBigDecimal(int columnIndex) throws SQLException {
|
public BigDecimal getBigDecimal(int columnIndex) throws SQLException {
|
||||||
int colIndex = getTrueColumnIndex(columnIndex);
|
if (this.getBatchFetch())
|
||||||
|
return new BigDecimal(this.blockData.getLong(columnIndex - 1));
|
||||||
|
|
||||||
if (!this.getBatchFetch()) {
|
this.lastWasNull = this.rowData.wasNull(columnIndex - 1);
|
||||||
this.lastWasNull = this.rowData.wasNull(colIndex);
|
BigDecimal res = null;
|
||||||
return new BigDecimal(this.rowData.getLong(colIndex, this.columnMetaDataList.get(colIndex).getColType()));
|
if (!lastWasNull) {
|
||||||
} else {
|
int colType = this.columnMetaDataList.get(columnIndex - 1).getColType();
|
||||||
return new BigDecimal(this.blockData.getLong(colIndex));
|
switch (colType) {
|
||||||
|
case TSDBConstants.TSDB_DATA_TYPE_TINYINT:
|
||||||
|
case TSDBConstants.TSDB_DATA_TYPE_SMALLINT:
|
||||||
|
case TSDBConstants.TSDB_DATA_TYPE_INT:
|
||||||
|
case TSDBConstants.TSDB_DATA_TYPE_BIGINT:
|
||||||
|
res = new BigDecimal(Long.valueOf(this.rowData.get(columnIndex - 1).toString()));
|
||||||
|
break;
|
||||||
|
case TSDBConstants.TSDB_DATA_TYPE_FLOAT:
|
||||||
|
case TSDBConstants.TSDB_DATA_TYPE_DOUBLE:
|
||||||
|
res = new BigDecimal(Double.valueOf(this.rowData.get(columnIndex - 1).toString()));
|
||||||
|
break;
|
||||||
|
case TSDBConstants.TSDB_DATA_TYPE_TIMESTAMP:
|
||||||
|
return new BigDecimal(((Timestamp) this.rowData.get(columnIndex - 1)).getTime());
|
||||||
|
default:
|
||||||
|
res = new BigDecimal(this.rowData.get(columnIndex - 1).toString());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isBeforeFirst() throws SQLException {
|
public boolean isBeforeFirst() throws SQLException {
|
||||||
|
@ -398,6 +451,12 @@ public class TSDBResultSet extends AbstractResultSet implements ResultSet {
|
||||||
return this.statement;
|
return this.statement;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Timestamp getTimestamp(int columnIndex, Calendar cal) throws SQLException {
|
||||||
|
//TODO:did not use the specified timezone in cal
|
||||||
|
return getTimestamp(columnIndex);
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isClosed() throws SQLException {
|
public boolean isClosed() throws SQLException {
|
||||||
if (isClosed)
|
if (isClosed)
|
||||||
return true;
|
return true;
|
||||||
|
@ -408,17 +467,7 @@ public class TSDBResultSet extends AbstractResultSet implements ResultSet {
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getNString(int columnIndex) throws SQLException {
|
public String getNString(int columnIndex) throws SQLException {
|
||||||
int colIndex = getTrueColumnIndex(columnIndex);
|
return getString(columnIndex);
|
||||||
return (String) rowData.get(colIndex);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private int getTrueColumnIndex(int columnIndex) throws SQLException {
|
|
||||||
if (columnIndex < 1)
|
|
||||||
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_PARAMETER_INDEX_OUT_RANGE, "columnIndex(" + columnIndex + "): < 1");
|
|
||||||
|
|
||||||
int numOfCols = this.columnMetaDataList.size();
|
|
||||||
if (columnIndex > numOfCols)
|
|
||||||
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_PARAMETER_INDEX_OUT_RANGE, "columnIndex: " + columnIndex);
|
|
||||||
return columnIndex - 1;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,7 +22,7 @@ import java.util.List;
|
||||||
|
|
||||||
public class TSDBResultSetMetaData extends WrapperImpl implements ResultSetMetaData {
|
public class TSDBResultSetMetaData extends WrapperImpl implements ResultSetMetaData {
|
||||||
|
|
||||||
List<ColumnMetaData> colMetaDataList = null;
|
List<ColumnMetaData> colMetaDataList;
|
||||||
|
|
||||||
public TSDBResultSetMetaData(List<ColumnMetaData> metaDataList) {
|
public TSDBResultSetMetaData(List<ColumnMetaData> metaDataList) {
|
||||||
this.colMetaDataList = metaDataList;
|
this.colMetaDataList = metaDataList;
|
||||||
|
@ -52,6 +52,9 @@ public class TSDBResultSetMetaData extends WrapperImpl implements ResultSetMetaD
|
||||||
}
|
}
|
||||||
|
|
||||||
public int isNullable(int column) throws SQLException {
|
public int isNullable(int column) throws SQLException {
|
||||||
|
if (column < 1 && column >= colMetaDataList.size())
|
||||||
|
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_PARAMETER_INDEX_OUT_RANGE);
|
||||||
|
|
||||||
if (column == 1) {
|
if (column == 1) {
|
||||||
return columnNoNulls;
|
return columnNoNulls;
|
||||||
}
|
}
|
||||||
|
@ -59,6 +62,9 @@ public class TSDBResultSetMetaData extends WrapperImpl implements ResultSetMetaD
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isSigned(int column) throws SQLException {
|
public boolean isSigned(int column) throws SQLException {
|
||||||
|
if (column < 1 && column >= colMetaDataList.size())
|
||||||
|
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_PARAMETER_INDEX_OUT_RANGE);
|
||||||
|
|
||||||
ColumnMetaData meta = this.colMetaDataList.get(column - 1);
|
ColumnMetaData meta = this.colMetaDataList.get(column - 1);
|
||||||
switch (meta.getColType()) {
|
switch (meta.getColType()) {
|
||||||
case TSDBConstants.TSDB_DATA_TYPE_TINYINT:
|
case TSDBConstants.TSDB_DATA_TYPE_TINYINT:
|
||||||
|
@ -74,22 +80,37 @@ public class TSDBResultSetMetaData extends WrapperImpl implements ResultSetMetaD
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getColumnDisplaySize(int column) throws SQLException {
|
public int getColumnDisplaySize(int column) throws SQLException {
|
||||||
|
if (column < 1 && column >= colMetaDataList.size())
|
||||||
|
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_PARAMETER_INDEX_OUT_RANGE);
|
||||||
|
|
||||||
return colMetaDataList.get(column - 1).getColSize();
|
return colMetaDataList.get(column - 1).getColSize();
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getColumnLabel(int column) throws SQLException {
|
public String getColumnLabel(int column) throws SQLException {
|
||||||
|
if (column < 1 && column >= colMetaDataList.size())
|
||||||
|
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_PARAMETER_INDEX_OUT_RANGE);
|
||||||
|
|
||||||
return colMetaDataList.get(column - 1).getColName();
|
return colMetaDataList.get(column - 1).getColName();
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getColumnName(int column) throws SQLException {
|
public String getColumnName(int column) throws SQLException {
|
||||||
|
if (column < 1 && column >= colMetaDataList.size())
|
||||||
|
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_PARAMETER_INDEX_OUT_RANGE);
|
||||||
|
|
||||||
return colMetaDataList.get(column - 1).getColName();
|
return colMetaDataList.get(column - 1).getColName();
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getSchemaName(int column) throws SQLException {
|
public String getSchemaName(int column) throws SQLException {
|
||||||
|
if (column < 1 && column >= colMetaDataList.size())
|
||||||
|
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_PARAMETER_INDEX_OUT_RANGE);
|
||||||
|
|
||||||
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_UNSUPPORTED_METHOD);
|
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_UNSUPPORTED_METHOD);
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getPrecision(int column) throws SQLException {
|
public int getPrecision(int column) throws SQLException {
|
||||||
|
if (column < 1 && column >= colMetaDataList.size())
|
||||||
|
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_PARAMETER_INDEX_OUT_RANGE);
|
||||||
|
|
||||||
ColumnMetaData columnMetaData = this.colMetaDataList.get(column - 1);
|
ColumnMetaData columnMetaData = this.colMetaDataList.get(column - 1);
|
||||||
switch (columnMetaData.getColType()) {
|
switch (columnMetaData.getColType()) {
|
||||||
case TSDBConstants.TSDB_DATA_TYPE_FLOAT:
|
case TSDBConstants.TSDB_DATA_TYPE_FLOAT:
|
||||||
|
@ -105,6 +126,9 @@ public class TSDBResultSetMetaData extends WrapperImpl implements ResultSetMetaD
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getScale(int column) throws SQLException {
|
public int getScale(int column) throws SQLException {
|
||||||
|
if (column < 1 && column >= colMetaDataList.size())
|
||||||
|
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_PARAMETER_INDEX_OUT_RANGE);
|
||||||
|
|
||||||
ColumnMetaData meta = this.colMetaDataList.get(column - 1);
|
ColumnMetaData meta = this.colMetaDataList.get(column - 1);
|
||||||
switch (meta.getColType()) {
|
switch (meta.getColType()) {
|
||||||
case TSDBConstants.TSDB_DATA_TYPE_FLOAT:
|
case TSDBConstants.TSDB_DATA_TYPE_FLOAT:
|
||||||
|
|
|
@ -21,18 +21,13 @@ import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
|
|
||||||
public class TSDBResultSetRowData {
|
public class TSDBResultSetRowData {
|
||||||
private ArrayList<Object> data = null;
|
private ArrayList<Object> data;
|
||||||
private int colSize = 0;
|
private int colSize = 0;
|
||||||
|
|
||||||
public TSDBResultSetRowData(int colSize) {
|
public TSDBResultSetRowData(int colSize) {
|
||||||
this.setColSize(colSize);
|
this.setColSize(colSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
public TSDBResultSetRowData() {
|
|
||||||
this.data = new ArrayList<>();
|
|
||||||
this.setColSize(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void clear() {
|
public void clear() {
|
||||||
if (this.data != null) {
|
if (this.data != null) {
|
||||||
this.data.clear();
|
this.data.clear();
|
||||||
|
@ -71,9 +66,9 @@ public class TSDBResultSetRowData {
|
||||||
case TSDBConstants.TSDB_DATA_TYPE_TIMESTAMP:
|
case TSDBConstants.TSDB_DATA_TYPE_TIMESTAMP:
|
||||||
case TSDBConstants.TSDB_DATA_TYPE_BIGINT:
|
case TSDBConstants.TSDB_DATA_TYPE_BIGINT:
|
||||||
return ((Long) obj) == 1L ? Boolean.TRUE : Boolean.FALSE;
|
return ((Long) obj) == 1L ? Boolean.TRUE : Boolean.FALSE;
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return Boolean.TRUE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setByte(int col, byte value) {
|
public void setByte(int col, byte value) {
|
||||||
|
@ -198,7 +193,7 @@ public class TSDBResultSetRowData {
|
||||||
data.set(col, value);
|
data.set(col, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
public float getFloat(int col, int srcType) throws SQLException {
|
public float getFloat(int col, int srcType) {
|
||||||
Object obj = data.get(col);
|
Object obj = data.get(col);
|
||||||
|
|
||||||
switch (srcType) {
|
switch (srcType) {
|
||||||
|
@ -226,7 +221,7 @@ public class TSDBResultSetRowData {
|
||||||
data.set(col, value);
|
data.set(col, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
public double getDouble(int col, int srcType) throws SQLException {
|
public double getDouble(int col, int srcType) {
|
||||||
Object obj = data.get(col);
|
Object obj = data.get(col);
|
||||||
|
|
||||||
switch (srcType) {
|
switch (srcType) {
|
||||||
|
@ -267,9 +262,8 @@ public class TSDBResultSetRowData {
|
||||||
*
|
*
|
||||||
* @param col column index
|
* @param col column index
|
||||||
* @return
|
* @return
|
||||||
* @throws SQLException
|
|
||||||
*/
|
*/
|
||||||
public String getString(int col, int srcType) throws SQLException {
|
public String getString(int col, int srcType) {
|
||||||
switch (srcType) {
|
switch (srcType) {
|
||||||
case TSDBConstants.TSDB_DATA_TYPE_BINARY:
|
case TSDBConstants.TSDB_DATA_TYPE_BINARY:
|
||||||
case TSDBConstants.TSDB_DATA_TYPE_NCHAR:
|
case TSDBConstants.TSDB_DATA_TYPE_NCHAR:
|
||||||
|
@ -305,11 +299,11 @@ public class TSDBResultSetRowData {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setTimestamp(int col, long ts) {
|
public void setTimestamp(int col, long ts) {
|
||||||
data.set(col, ts);
|
data.set(col, new Timestamp(ts));
|
||||||
}
|
}
|
||||||
|
|
||||||
public Timestamp getTimestamp(int col) {
|
public Timestamp getTimestamp(int col) {
|
||||||
return new Timestamp((Long) data.get(col));
|
return (Timestamp) data.get(col);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Object get(int col) {
|
public Object get(int col) {
|
||||||
|
@ -320,7 +314,7 @@ public class TSDBResultSetRowData {
|
||||||
return colSize;
|
return colSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setColSize(int colSize) {
|
private void setColSize(int colSize) {
|
||||||
this.colSize = colSize;
|
this.colSize = colSize;
|
||||||
this.clear();
|
this.clear();
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,62 +0,0 @@
|
||||||
package com.taosdata.jdbc.bean;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* tdengine batch insert or import param object
|
|
||||||
*/
|
|
||||||
public class TSDBPreparedParam {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* tableName, if sTable Name is not null, and this is sub table name.
|
|
||||||
*/
|
|
||||||
private String tableName;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* sub middle param list
|
|
||||||
*/
|
|
||||||
private List<Object> middleParamList;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* value list
|
|
||||||
*/
|
|
||||||
private List<Object> valueList;
|
|
||||||
|
|
||||||
public TSDBPreparedParam(String tableName) {
|
|
||||||
this.tableName = tableName;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getTableName() {
|
|
||||||
return tableName;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setTableName(String tableName) {
|
|
||||||
this.tableName = tableName;
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<Object> getMiddleParamList() {
|
|
||||||
return middleParamList;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setMiddleParamList(List<Object> middleParamList) {
|
|
||||||
this.middleParamList = middleParamList;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setMiddleParam(int parameterIndex, Object x) {
|
|
||||||
this.middleParamList.set(parameterIndex, x);
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<Object> getValueList() {
|
|
||||||
return valueList;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setValueList(List<Object> valueList) {
|
|
||||||
this.valueList = valueList;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public void setValueParam(int parameterIndex, Object x) {
|
|
||||||
this.valueList.set(parameterIndex, x);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,8 +1,14 @@
|
||||||
package com.taosdata.jdbc.rs;
|
package com.taosdata.jdbc.rs;
|
||||||
|
|
||||||
import com.taosdata.jdbc.*;
|
import com.taosdata.jdbc.AbstractConnection;
|
||||||
|
import com.taosdata.jdbc.TSDBDriver;
|
||||||
|
import com.taosdata.jdbc.TSDBError;
|
||||||
|
import com.taosdata.jdbc.TSDBErrorNumbers;
|
||||||
|
|
||||||
import java.sql.*;
|
import java.sql.DatabaseMetaData;
|
||||||
|
import java.sql.PreparedStatement;
|
||||||
|
import java.sql.SQLException;
|
||||||
|
import java.sql.Statement;
|
||||||
import java.util.Properties;
|
import java.util.Properties;
|
||||||
|
|
||||||
public class RestfulConnection extends AbstractConnection {
|
public class RestfulConnection extends AbstractConnection {
|
||||||
|
@ -55,7 +61,6 @@ public class RestfulConnection extends AbstractConnection {
|
||||||
public DatabaseMetaData getMetaData() throws SQLException {
|
public DatabaseMetaData getMetaData() throws SQLException {
|
||||||
if (isClosed())
|
if (isClosed())
|
||||||
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_CONNECTION_CLOSED);
|
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_CONNECTION_CLOSED);
|
||||||
;
|
|
||||||
|
|
||||||
return this.metadata;
|
return this.metadata;
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,7 +17,7 @@ public class RestfulDriver extends AbstractDriver {
|
||||||
|
|
||||||
static {
|
static {
|
||||||
try {
|
try {
|
||||||
DriverManager.registerDriver(new RestfulDriver());
|
java.sql.DriverManager.registerDriver(new RestfulDriver());
|
||||||
} catch (SQLException e) {
|
} catch (SQLException e) {
|
||||||
throw TSDBError.createRuntimeException(TSDBErrorNumbers.ERROR_URL_NOT_SET, e);
|
throw TSDBError.createRuntimeException(TSDBErrorNumbers.ERROR_URL_NOT_SET, e);
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,10 @@
|
||||||
|
package com.taosdata.jdbc.rs;
|
||||||
|
|
||||||
|
import com.taosdata.jdbc.AbstractParameterMetaData;
|
||||||
|
|
||||||
|
public class RestfulParameterMetaData extends AbstractParameterMetaData {
|
||||||
|
|
||||||
|
RestfulParameterMetaData(Object[] parameters) {
|
||||||
|
super(parameters);
|
||||||
|
}
|
||||||
|
}
|
|
@ -7,6 +7,7 @@ import java.io.InputStream;
|
||||||
import java.io.Reader;
|
import java.io.Reader;
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
|
import java.nio.charset.Charset;
|
||||||
import java.sql.*;
|
import java.sql.*;
|
||||||
import java.util.Calendar;
|
import java.util.Calendar;
|
||||||
|
|
||||||
|
@ -30,7 +31,9 @@ public class RestfulPreparedStatement extends RestfulStatement implements Prepar
|
||||||
parameters = new Object[parameterCnt];
|
parameters = new Object[parameterCnt];
|
||||||
this.isPrepared = true;
|
this.isPrepared = true;
|
||||||
}
|
}
|
||||||
//TODO: build parameterMetaData
|
|
||||||
|
// build parameterMetaData
|
||||||
|
this.parameterMetaData = new RestfulParameterMetaData(parameters);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -60,8 +63,15 @@ public class RestfulPreparedStatement extends RestfulStatement implements Prepar
|
||||||
for (int i = 0; i < parameters.length; ++i) {
|
for (int i = 0; i < parameters.length; ++i) {
|
||||||
Object para = parameters[i];
|
Object para = parameters[i];
|
||||||
if (para != null) {
|
if (para != null) {
|
||||||
String paraStr = para.toString();
|
String paraStr;
|
||||||
if (para instanceof Timestamp || para instanceof String) {
|
if (para instanceof byte[]) {
|
||||||
|
paraStr = new String((byte[]) para, Charset.forName("UTF-8"));
|
||||||
|
} else {
|
||||||
|
paraStr = para.toString();
|
||||||
|
}
|
||||||
|
// if para is timestamp or String or byte[] need to translate ' character
|
||||||
|
if (para instanceof Timestamp || para instanceof String || para instanceof byte[]) {
|
||||||
|
paraStr = paraStr.replaceAll("'", "\\\\\\\\'");
|
||||||
paraStr = "'" + paraStr + "'";
|
paraStr = "'" + paraStr + "'";
|
||||||
}
|
}
|
||||||
sql = sql.replaceFirst("[?]", paraStr);
|
sql = sql.replaceFirst("[?]", paraStr);
|
||||||
|
@ -92,7 +102,7 @@ public class RestfulPreparedStatement extends RestfulStatement implements Prepar
|
||||||
public void setByte(int parameterIndex, byte x) throws SQLException {
|
public void setByte(int parameterIndex, byte x) throws SQLException {
|
||||||
if (isClosed())
|
if (isClosed())
|
||||||
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_STATEMENT_CLOSED);
|
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_STATEMENT_CLOSED);
|
||||||
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_UNSUPPORTED_METHOD);
|
setObject(parameterIndex, x);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -153,7 +163,7 @@ public class RestfulPreparedStatement extends RestfulStatement implements Prepar
|
||||||
public void setBytes(int parameterIndex, byte[] x) throws SQLException {
|
public void setBytes(int parameterIndex, byte[] x) throws SQLException {
|
||||||
if (isClosed())
|
if (isClosed())
|
||||||
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_STATEMENT_CLOSED);
|
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_STATEMENT_CLOSED);
|
||||||
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_UNSUPPORTED_METHOD);
|
setObject(parameterIndex, x);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -210,19 +220,16 @@ public class RestfulPreparedStatement extends RestfulStatement implements Prepar
|
||||||
public void setObject(int parameterIndex, Object x, int targetSqlType) throws SQLException {
|
public void setObject(int parameterIndex, Object x, int targetSqlType) throws SQLException {
|
||||||
if (isClosed())
|
if (isClosed())
|
||||||
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_STATEMENT_CLOSED);
|
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_STATEMENT_CLOSED);
|
||||||
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_UNSUPPORTED_METHOD);
|
|
||||||
|
setObject(parameterIndex,x);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setObject(int parameterIndex, Object x) throws SQLException {
|
public void setObject(int parameterIndex, Object x) throws SQLException {
|
||||||
if (isClosed())
|
|
||||||
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_STATEMENT_CLOSED);
|
|
||||||
|
|
||||||
if (parameterIndex < 1 && parameterIndex >= parameters.length)
|
if (parameterIndex < 1 && parameterIndex >= parameters.length)
|
||||||
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_PARAMETER_INDEX_OUT_RANGE);
|
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_PARAMETER_INDEX_OUT_RANGE);
|
||||||
|
|
||||||
parameters[parameterIndex - 1] = x;
|
parameters[parameterIndex - 1] = x;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -2,13 +2,18 @@ package com.taosdata.jdbc.rs;
|
||||||
|
|
||||||
import com.alibaba.fastjson.JSONArray;
|
import com.alibaba.fastjson.JSONArray;
|
||||||
import com.alibaba.fastjson.JSONObject;
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import com.google.common.primitives.Ints;
|
||||||
|
import com.google.common.primitives.Longs;
|
||||||
|
import com.google.common.primitives.Shorts;
|
||||||
import com.taosdata.jdbc.AbstractResultSet;
|
import com.taosdata.jdbc.AbstractResultSet;
|
||||||
import com.taosdata.jdbc.TSDBConstants;
|
import com.taosdata.jdbc.TSDBConstants;
|
||||||
import com.taosdata.jdbc.TSDBError;
|
import com.taosdata.jdbc.TSDBError;
|
||||||
import com.taosdata.jdbc.TSDBErrorNumbers;
|
import com.taosdata.jdbc.TSDBErrorNumbers;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
import java.sql.*;
|
import java.sql.*;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Calendar;
|
||||||
|
|
||||||
public class RestfulResultSet extends AbstractResultSet implements ResultSet {
|
public class RestfulResultSet extends AbstractResultSet implements ResultSet {
|
||||||
private volatile boolean isClosed;
|
private volatile boolean isClosed;
|
||||||
|
@ -16,7 +21,6 @@ public class RestfulResultSet extends AbstractResultSet implements ResultSet {
|
||||||
|
|
||||||
private final String database;
|
private final String database;
|
||||||
private final Statement statement;
|
private final Statement statement;
|
||||||
// private final JSONObject resultJson;
|
|
||||||
// data
|
// data
|
||||||
private final ArrayList<ArrayList<Object>> resultSet;
|
private final ArrayList<ArrayList<Object>> resultSet;
|
||||||
// meta
|
// meta
|
||||||
|
@ -32,7 +36,6 @@ public class RestfulResultSet extends AbstractResultSet implements ResultSet {
|
||||||
public RestfulResultSet(String database, Statement statement, JSONObject resultJson) throws SQLException {
|
public RestfulResultSet(String database, Statement statement, JSONObject resultJson) throws SQLException {
|
||||||
this.database = database;
|
this.database = database;
|
||||||
this.statement = statement;
|
this.statement = statement;
|
||||||
// this.resultJson = resultJson;
|
|
||||||
|
|
||||||
// column metadata
|
// column metadata
|
||||||
JSONArray columnMeta = resultJson.getJSONArray("column_meta");
|
JSONArray columnMeta = resultJson.getJSONArray("column_meta");
|
||||||
|
@ -73,7 +76,7 @@ public class RestfulResultSet extends AbstractResultSet implements ResultSet {
|
||||||
case TSDBConstants.TSDB_DATA_TYPE_INT:
|
case TSDBConstants.TSDB_DATA_TYPE_INT:
|
||||||
return row.getInteger(colIndex);
|
return row.getInteger(colIndex);
|
||||||
case TSDBConstants.TSDB_DATA_TYPE_BIGINT:
|
case TSDBConstants.TSDB_DATA_TYPE_BIGINT:
|
||||||
return row.getBigInteger(colIndex);
|
return row.getLong(colIndex);
|
||||||
case TSDBConstants.TSDB_DATA_TYPE_FLOAT:
|
case TSDBConstants.TSDB_DATA_TYPE_FLOAT:
|
||||||
return row.getFloat(colIndex);
|
return row.getFloat(colIndex);
|
||||||
case TSDBConstants.TSDB_DATA_TYPE_DOUBLE:
|
case TSDBConstants.TSDB_DATA_TYPE_DOUBLE:
|
||||||
|
@ -81,9 +84,11 @@ public class RestfulResultSet extends AbstractResultSet implements ResultSet {
|
||||||
case TSDBConstants.TSDB_DATA_TYPE_TIMESTAMP:
|
case TSDBConstants.TSDB_DATA_TYPE_TIMESTAMP:
|
||||||
return new Timestamp(row.getDate(colIndex).getTime());
|
return new Timestamp(row.getDate(colIndex).getTime());
|
||||||
case TSDBConstants.TSDB_DATA_TYPE_BINARY:
|
case TSDBConstants.TSDB_DATA_TYPE_BINARY:
|
||||||
|
return row.getString(colIndex).getBytes();
|
||||||
case TSDBConstants.TSDB_DATA_TYPE_NCHAR:
|
case TSDBConstants.TSDB_DATA_TYPE_NCHAR:
|
||||||
default:
|
|
||||||
return row.getString(colIndex);
|
return row.getString(colIndex);
|
||||||
|
default:
|
||||||
|
return row.get(colIndex);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -130,37 +135,33 @@ public class RestfulResultSet extends AbstractResultSet implements ResultSet {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getString(int columnIndex) throws SQLException {
|
public String getString(int columnIndex) throws SQLException {
|
||||||
if (isClosed())
|
checkAvailability(columnIndex, resultSet.get(pos).size());
|
||||||
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_RESULTSET_CLOSED);
|
|
||||||
if (columnIndex > resultSet.get(pos).size())
|
|
||||||
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_PARAMETER_INDEX_OUT_RANGE, "Column Index out of range, " + columnIndex + " > " + resultSet.get(pos).size());
|
|
||||||
|
|
||||||
columnIndex = getTrueColumnIndex(columnIndex);
|
Object value = resultSet.get(pos).get(columnIndex - 1);
|
||||||
Object value = resultSet.get(pos).get(columnIndex);
|
if (value == null)
|
||||||
return value == null ? null : value.toString();
|
return null;
|
||||||
|
if (value instanceof byte[])
|
||||||
|
return new String((byte[]) value);
|
||||||
|
return value.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean getBoolean(int columnIndex) throws SQLException {
|
public boolean getBoolean(int columnIndex) throws SQLException {
|
||||||
if (isClosed())
|
checkAvailability(columnIndex, resultSet.get(pos).size());
|
||||||
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_RESULTSET_CLOSED);
|
|
||||||
if (columnIndex > resultSet.get(pos).size())
|
|
||||||
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_PARAMETER_INDEX_OUT_RANGE, "Column Index out of range, " + columnIndex + " > " + resultSet.get(pos).size());
|
|
||||||
|
|
||||||
columnIndex = getTrueColumnIndex(columnIndex);
|
Object value = resultSet.get(pos).get(columnIndex - 1);
|
||||||
int result = getInt(columnIndex);
|
if (value == null)
|
||||||
return result == 0 ? false : true;
|
return false;
|
||||||
|
if (value instanceof Boolean)
|
||||||
|
return (boolean) value;
|
||||||
|
return Boolean.valueOf(value.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public byte getByte(int columnIndex) throws SQLException {
|
public byte getByte(int columnIndex) throws SQLException {
|
||||||
if (isClosed())
|
checkAvailability(columnIndex, resultSet.get(pos).size());
|
||||||
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_RESULTSET_CLOSED);
|
|
||||||
if (columnIndex > resultSet.get(pos).size())
|
|
||||||
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_PARAMETER_INDEX_OUT_RANGE, "Column Index out of range, " + columnIndex + " > " + resultSet.get(pos).size());
|
|
||||||
|
|
||||||
columnIndex = getTrueColumnIndex(columnIndex);
|
Object value = resultSet.get(pos).get(columnIndex - 1);
|
||||||
Object value = resultSet.get(pos).get(columnIndex);
|
|
||||||
if (value == null)
|
if (value == null)
|
||||||
return 0;
|
return 0;
|
||||||
long valueAsLong = Long.parseLong(value.toString());
|
long valueAsLong = Long.parseLong(value.toString());
|
||||||
|
@ -179,13 +180,9 @@ public class RestfulResultSet extends AbstractResultSet implements ResultSet {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public short getShort(int columnIndex) throws SQLException {
|
public short getShort(int columnIndex) throws SQLException {
|
||||||
if (isClosed())
|
checkAvailability(columnIndex, resultSet.get(pos).size());
|
||||||
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_RESULTSET_CLOSED);
|
|
||||||
if (columnIndex > resultSet.get(pos).size())
|
|
||||||
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_PARAMETER_INDEX_OUT_RANGE, "Column Index out of range, " + columnIndex + " > " + resultSet.get(pos).size());
|
|
||||||
|
|
||||||
columnIndex = getTrueColumnIndex(columnIndex);
|
Object value = resultSet.get(pos).get(columnIndex - 1);
|
||||||
Object value = resultSet.get(pos).get(columnIndex);
|
|
||||||
if (value == null)
|
if (value == null)
|
||||||
return 0;
|
return 0;
|
||||||
long valueAsLong = Long.parseLong(value.toString());
|
long valueAsLong = Long.parseLong(value.toString());
|
||||||
|
@ -198,13 +195,9 @@ public class RestfulResultSet extends AbstractResultSet implements ResultSet {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getInt(int columnIndex) throws SQLException {
|
public int getInt(int columnIndex) throws SQLException {
|
||||||
if (isClosed())
|
checkAvailability(columnIndex, resultSet.get(pos).size());
|
||||||
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_RESULTSET_CLOSED);
|
|
||||||
if (columnIndex > resultSet.get(pos).size())
|
|
||||||
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_PARAMETER_INDEX_OUT_RANGE, "Column Index out of range, " + columnIndex + " > " + resultSet.get(pos).size());
|
|
||||||
|
|
||||||
columnIndex = getTrueColumnIndex(columnIndex);
|
Object value = resultSet.get(pos).get(columnIndex - 1);
|
||||||
Object value = resultSet.get(pos).get(columnIndex);
|
|
||||||
if (value == null)
|
if (value == null)
|
||||||
return 0;
|
return 0;
|
||||||
long valueAsLong = Long.parseLong(value.toString());
|
long valueAsLong = Long.parseLong(value.toString());
|
||||||
|
@ -217,13 +210,9 @@ public class RestfulResultSet extends AbstractResultSet implements ResultSet {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public long getLong(int columnIndex) throws SQLException {
|
public long getLong(int columnIndex) throws SQLException {
|
||||||
if (isClosed())
|
checkAvailability(columnIndex, resultSet.get(pos).size());
|
||||||
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_RESULTSET_CLOSED);
|
|
||||||
if (columnIndex > resultSet.get(pos).size())
|
|
||||||
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_PARAMETER_INDEX_OUT_RANGE, "Column Index out of range, " + columnIndex + " > " + resultSet.get(pos).size());
|
|
||||||
|
|
||||||
columnIndex = getTrueColumnIndex(columnIndex);
|
Object value = resultSet.get(pos).get(columnIndex - 1);
|
||||||
Object value = resultSet.get(pos).get(columnIndex);
|
|
||||||
if (value == null)
|
if (value == null)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
@ -240,64 +229,99 @@ public class RestfulResultSet extends AbstractResultSet implements ResultSet {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public float getFloat(int columnIndex) throws SQLException {
|
public float getFloat(int columnIndex) throws SQLException {
|
||||||
if (isClosed())
|
checkAvailability(columnIndex, resultSet.get(pos).size());
|
||||||
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_RESULTSET_CLOSED);
|
|
||||||
if (columnIndex > resultSet.get(pos).size())
|
|
||||||
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_PARAMETER_INDEX_OUT_RANGE, "Column Index out of range, " + columnIndex + " > " + resultSet.get(pos).size());
|
|
||||||
|
|
||||||
columnIndex = getTrueColumnIndex(columnIndex);
|
Object value = resultSet.get(pos).get(columnIndex - 1);
|
||||||
return Float.parseFloat(resultSet.get(pos).get(columnIndex).toString());
|
if (value == null)
|
||||||
|
return 0;
|
||||||
|
if (value instanceof Float || value instanceof Double)
|
||||||
|
return (float) value;
|
||||||
|
return Float.parseFloat(value.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public double getDouble(int columnIndex) throws SQLException {
|
public double getDouble(int columnIndex) throws SQLException {
|
||||||
if (isClosed())
|
checkAvailability(columnIndex, resultSet.get(pos).size());
|
||||||
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_RESULTSET_CLOSED);
|
|
||||||
if (columnIndex > resultSet.get(pos).size())
|
|
||||||
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_PARAMETER_INDEX_OUT_RANGE, "Column Index out of range, " + columnIndex + " > " + resultSet.get(pos).size());
|
|
||||||
|
|
||||||
columnIndex = getTrueColumnIndex(columnIndex);
|
Object value = resultSet.get(pos).get(columnIndex - 1);
|
||||||
return Double.parseDouble(resultSet.get(pos).get(columnIndex).toString());
|
if (value == null)
|
||||||
|
return 0;
|
||||||
|
if (value instanceof Double || value instanceof Float)
|
||||||
|
return (double) value;
|
||||||
|
return Double.parseDouble(value.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
private int getTrueColumnIndex(int columnIndex) throws SQLException {
|
@Override
|
||||||
if (columnIndex < 1) {
|
public byte[] getBytes(int columnIndex) throws SQLException {
|
||||||
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_PARAMETER_INDEX_OUT_RANGE
|
checkAvailability(columnIndex, resultSet.get(pos).size());
|
||||||
, "Column Index out of range, " + columnIndex + " < 1");
|
|
||||||
|
Object value = resultSet.get(pos).get(columnIndex - 1);
|
||||||
|
if (value == null)
|
||||||
|
return null;
|
||||||
|
if (value instanceof byte[])
|
||||||
|
return (byte[]) value;
|
||||||
|
if (value instanceof String)
|
||||||
|
return ((String) value).getBytes();
|
||||||
|
if (value instanceof Long)
|
||||||
|
return Longs.toByteArray((long) value);
|
||||||
|
if (value instanceof Integer)
|
||||||
|
return Ints.toByteArray((int) value);
|
||||||
|
if (value instanceof Short)
|
||||||
|
return Shorts.toByteArray((short) value);
|
||||||
|
if (value instanceof Byte)
|
||||||
|
return new byte[]{(byte) value};
|
||||||
|
|
||||||
|
return value.toString().getBytes();
|
||||||
}
|
}
|
||||||
|
|
||||||
int numOfCols = resultSet.get(pos).size();
|
@Override
|
||||||
if (columnIndex > numOfCols) {
|
public Date getDate(int columnIndex) throws SQLException {
|
||||||
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_PARAMETER_INDEX_OUT_RANGE
|
checkAvailability(columnIndex, resultSet.get(pos).size());
|
||||||
, "Column Index out of range, " + columnIndex + " > " + numOfCols);
|
|
||||||
|
Object value = resultSet.get(pos).get(columnIndex - 1);
|
||||||
|
if (value == null)
|
||||||
|
return null;
|
||||||
|
if (value instanceof Timestamp)
|
||||||
|
return new Date(((Timestamp) value).getTime());
|
||||||
|
return Date.valueOf(value.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
return columnIndex - 1;
|
@Override
|
||||||
|
public Time getTime(int columnIndex) throws SQLException {
|
||||||
|
checkAvailability(columnIndex, resultSet.get(pos).size());
|
||||||
|
|
||||||
|
Object value = resultSet.get(pos).get(columnIndex - 1);
|
||||||
|
if (value == null)
|
||||||
|
return null;
|
||||||
|
if (value instanceof Timestamp)
|
||||||
|
return new Time(((Timestamp) value).getTime());
|
||||||
|
return Time.valueOf(value.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Timestamp getTimestamp(int columnIndex) throws SQLException {
|
public Timestamp getTimestamp(int columnIndex) throws SQLException {
|
||||||
if (isClosed())
|
checkAvailability(columnIndex, resultSet.get(pos).size());
|
||||||
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_RESULTSET_CLOSED);
|
|
||||||
|
|
||||||
columnIndex = getTrueColumnIndex(columnIndex);
|
Object value = resultSet.get(pos).get(columnIndex - 1);
|
||||||
String strDate = resultSet.get(pos).get(columnIndex).toString();
|
if (value == null)
|
||||||
// strDate = strDate.substring(1, strDate.length() - 1);
|
return null;
|
||||||
return Timestamp.valueOf(strDate);
|
if (value instanceof Timestamp)
|
||||||
|
return (Timestamp) value;
|
||||||
|
return Timestamp.valueOf(value.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
/*************************************************************************************************************/
|
|
||||||
@Override
|
@Override
|
||||||
public ResultSetMetaData getMetaData() throws SQLException {
|
public ResultSetMetaData getMetaData() throws SQLException {
|
||||||
if (isClosed())
|
if (isClosed())
|
||||||
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_RESULTSET_CLOSED);
|
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_RESULTSET_CLOSED);
|
||||||
|
|
||||||
return this.metaData;
|
return this.metaData;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Object getObject(String columnLabel) throws SQLException {
|
public Object getObject(int columnIndex) throws SQLException {
|
||||||
return getObject(findColumn(columnLabel));
|
checkAvailability(columnIndex, resultSet.get(pos).size());
|
||||||
|
|
||||||
|
return resultSet.get(pos).get(columnIndex - 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -311,6 +335,23 @@ public class RestfulResultSet extends AbstractResultSet implements ResultSet {
|
||||||
return columnIndex + 1;
|
return columnIndex + 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BigDecimal getBigDecimal(int columnIndex) throws SQLException {
|
||||||
|
checkAvailability(columnIndex, resultSet.get(pos).size());
|
||||||
|
|
||||||
|
Object value = resultSet.get(pos).get(columnIndex - 1);
|
||||||
|
if (value == null)
|
||||||
|
return null;
|
||||||
|
|
||||||
|
if (value instanceof Long || value instanceof Integer || value instanceof Short || value instanceof Byte)
|
||||||
|
return new BigDecimal(Long.valueOf(value.toString()));
|
||||||
|
if (value instanceof Double || value instanceof Float)
|
||||||
|
return new BigDecimal(Double.valueOf(value.toString()));
|
||||||
|
if (value instanceof Timestamp)
|
||||||
|
return new BigDecimal(((Timestamp) value).getTime());
|
||||||
|
return new BigDecimal(value.toString());
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isBeforeFirst() throws SQLException {
|
public boolean isBeforeFirst() throws SQLException {
|
||||||
if (isClosed())
|
if (isClosed())
|
||||||
|
@ -471,6 +512,12 @@ public class RestfulResultSet extends AbstractResultSet implements ResultSet {
|
||||||
return this.statement;
|
return this.statement;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Timestamp getTimestamp(int columnIndex, Calendar cal) throws SQLException {
|
||||||
|
//TODO:did not use the specified timezone in cal
|
||||||
|
return getTimestamp(columnIndex);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isClosed() throws SQLException {
|
public boolean isClosed() throws SQLException {
|
||||||
return isClosed;
|
return isClosed;
|
||||||
|
|
|
@ -1 +1,2 @@
|
||||||
com.taosdata.jdbc.TSDBDriver
|
com.taosdata.jdbc.TSDBDriver
|
||||||
|
com.taosdata.jdbc.rs.RestfulDriver
|
||||||
|
|
|
@ -1,266 +0,0 @@
|
||||||
package com.taosdata.jdbc;
|
|
||||||
|
|
||||||
import org.junit.AfterClass;
|
|
||||||
import org.junit.Assert;
|
|
||||||
import org.junit.BeforeClass;
|
|
||||||
import org.junit.Test;
|
|
||||||
|
|
||||||
import javax.sql.rowset.serial.SerialBlob;
|
|
||||||
import javax.sql.rowset.serial.SerialClob;
|
|
||||||
import java.io.UnsupportedEncodingException;
|
|
||||||
import java.sql.*;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.Properties;
|
|
||||||
|
|
||||||
import static org.junit.Assert.assertEquals;
|
|
||||||
|
|
||||||
public class ResultSetTest {
|
|
||||||
static Connection connection;
|
|
||||||
static Statement statement;
|
|
||||||
static String dbName = "test";
|
|
||||||
static String tName = "t0";
|
|
||||||
static String host = "localhost";
|
|
||||||
static ResultSet resSet;
|
|
||||||
|
|
||||||
@BeforeClass
|
|
||||||
public static void createDatabaseAndTable() {
|
|
||||||
try {
|
|
||||||
Class.forName("com.taosdata.jdbc.TSDBDriver");
|
|
||||||
Properties properties = new Properties();
|
|
||||||
properties.setProperty(TSDBDriver.PROPERTY_KEY_TIME_ZONE, "UTC-8");
|
|
||||||
properties.setProperty(TSDBDriver.PROPERTY_KEY_CHARSET, "UTF-8");
|
|
||||||
properties.setProperty(TSDBDriver.PROPERTY_KEY_LOCALE, "en_US.UTF-8");
|
|
||||||
connection = DriverManager.getConnection("jdbc:TAOS://" + host + ":0/", properties);
|
|
||||||
statement = connection.createStatement();
|
|
||||||
statement.executeUpdate("drop database if exists " + dbName);
|
|
||||||
statement.executeUpdate("create database if not exists " + dbName);
|
|
||||||
statement.execute("use " + dbName);
|
|
||||||
statement.executeUpdate("create table if not exists " + dbName + "." + tName + " (ts timestamp, k1 int, k2 bigint, k3 float, k4 double, k5 binary(30), k6 smallint, k7 bool, k8 nchar(20))");
|
|
||||||
} catch (ClassNotFoundException | SQLException e) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testResultSet() {
|
|
||||||
String sql;
|
|
||||||
long ts = 1496732686000l;
|
|
||||||
int v1 = 2147483600;
|
|
||||||
long v2 = ts + 1000;
|
|
||||||
float v3 = 3.1415926f;
|
|
||||||
double v4 = 3.1415926535897;
|
|
||||||
String v5 = "涛思数据,强~!";
|
|
||||||
short v6 = 12;
|
|
||||||
boolean v7 = false;
|
|
||||||
String v8 = "TDengine is powerful";
|
|
||||||
sql = "insert into " + dbName + "." + tName + " values (" + ts + "," + v1 + "," + v2 + "," + v3 + "," + v4
|
|
||||||
+ ",\"" + v5 + "\"," + v6 + "," + v7 + ",\"" + v8 + "\")";
|
|
||||||
try {
|
|
||||||
statement.executeUpdate(sql);
|
|
||||||
assertEquals(1, statement.getUpdateCount());
|
|
||||||
} catch (SQLException e) {
|
|
||||||
assert false : "insert error " + e.getMessage();
|
|
||||||
}
|
|
||||||
try {
|
|
||||||
statement.execute("select * from " + dbName + "." + tName + " where ts = " + ts);
|
|
||||||
resSet = statement.getResultSet();
|
|
||||||
System.out.println(((TSDBResultSet) resSet).getRowData());
|
|
||||||
while (resSet.next()) {
|
|
||||||
assertEquals(ts, resSet.getLong(1));
|
|
||||||
assertEquals(ts, resSet.getLong("ts"));
|
|
||||||
System.out.println(resSet.getTimestamp(1));
|
|
||||||
assertEquals(v1, resSet.getInt(2));
|
|
||||||
assertEquals(v1, resSet.getInt("k1"));
|
|
||||||
assertEquals(v2, resSet.getLong(3));
|
|
||||||
assertEquals(v2, resSet.getLong("k2"));
|
|
||||||
assertEquals(v3, resSet.getFloat(4), 7);
|
|
||||||
assertEquals(v3, resSet.getFloat("k3"), 7);
|
|
||||||
assertEquals(v4, resSet.getDouble(5), 13);
|
|
||||||
assertEquals(v4, resSet.getDouble("k4"), 13);
|
|
||||||
assertEquals(v5, resSet.getString(6));
|
|
||||||
assertEquals(v5, resSet.getString("k5"));
|
|
||||||
assertEquals(v6, resSet.getShort(7));
|
|
||||||
assertEquals(v6, resSet.getShort("k6"));
|
|
||||||
assertEquals(v7, resSet.getBoolean(8));
|
|
||||||
assertEquals(v7, resSet.getBoolean("k7"));
|
|
||||||
assertEquals(v8, resSet.getString(9));
|
|
||||||
assertEquals(v8, resSet.getString("k8"));
|
|
||||||
resSet.getBytes(9);
|
|
||||||
resSet.getObject(6);
|
|
||||||
resSet.getObject("k8");
|
|
||||||
}
|
|
||||||
if (!resSet.isClosed()) {
|
|
||||||
resSet.close();
|
|
||||||
}
|
|
||||||
} catch (SQLException e) {
|
|
||||||
assert false : "insert error " + e.getMessage();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test(expected = SQLException.class)
|
|
||||||
public void testUnsupport() throws SQLException, UnsupportedEncodingException {
|
|
||||||
statement.execute("show databases");
|
|
||||||
resSet = statement.getResultSet();
|
|
||||||
Assert.assertNotNull(resSet.unwrap(TSDBResultSet.class));
|
|
||||||
Assert.assertTrue(resSet.isWrapperFor(TSDBResultSet.class));
|
|
||||||
resSet.getUnicodeStream(null);
|
|
||||||
resSet.getBinaryStream(null);
|
|
||||||
resSet.getAsciiStream("");
|
|
||||||
resSet.getUnicodeStream(null);
|
|
||||||
resSet.getBinaryStream(null);
|
|
||||||
resSet.getWarnings();
|
|
||||||
resSet.clearWarnings();
|
|
||||||
resSet.getCursorName();
|
|
||||||
resSet.getCharacterStream(null);
|
|
||||||
resSet.getCharacterStream(null);
|
|
||||||
resSet.isBeforeFirst();
|
|
||||||
resSet.isAfterLast();
|
|
||||||
resSet.isFirst();
|
|
||||||
resSet.isLast();
|
|
||||||
resSet.beforeFirst();
|
|
||||||
resSet.afterLast();
|
|
||||||
resSet.first();
|
|
||||||
resSet.last();
|
|
||||||
resSet.getRow();
|
|
||||||
resSet.absolute(1);
|
|
||||||
resSet.relative(1);
|
|
||||||
resSet.previous();
|
|
||||||
resSet.setFetchDirection(0);
|
|
||||||
resSet.getFetchDirection();
|
|
||||||
resSet.setFetchSize(0);
|
|
||||||
resSet.getFetchSize();
|
|
||||||
resSet.getConcurrency();
|
|
||||||
resSet.rowUpdated();
|
|
||||||
resSet.rowInserted();
|
|
||||||
resSet.rowDeleted();
|
|
||||||
resSet.updateNull(null);
|
|
||||||
resSet.updateBoolean(0, true);
|
|
||||||
resSet.updateByte(0, (byte) 2);
|
|
||||||
resSet.updateShort(0, (short) 1);
|
|
||||||
resSet.updateInt(0, 0);
|
|
||||||
resSet.updateLong(0, 0l);
|
|
||||||
resSet.updateFloat(0, 3.14f);
|
|
||||||
resSet.updateDouble(0, 3.1415);
|
|
||||||
resSet.updateBigDecimal(null, null);
|
|
||||||
resSet.updateString(null, null);
|
|
||||||
resSet.updateBytes(null, null);
|
|
||||||
resSet.updateDate(null, null);
|
|
||||||
resSet.updateTime(null, null);
|
|
||||||
resSet.updateTimestamp(null, null);
|
|
||||||
resSet.updateAsciiStream(null, null);
|
|
||||||
resSet.updateBinaryStream(null, null);
|
|
||||||
resSet.updateCharacterStream(null, null);
|
|
||||||
resSet.updateObject(null, null);
|
|
||||||
resSet.updateObject(null, null);
|
|
||||||
resSet.updateNull(null);
|
|
||||||
resSet.updateBoolean("", false);
|
|
||||||
resSet.updateByte("", (byte) 1);
|
|
||||||
resSet.updateShort("", (short) 1);
|
|
||||||
resSet.updateInt("", 0);
|
|
||||||
resSet.updateLong("", 0l);
|
|
||||||
resSet.updateFloat("", 3.14f);
|
|
||||||
resSet.updateDouble("", 3.1415);
|
|
||||||
resSet.updateBigDecimal(null, null);
|
|
||||||
resSet.updateString(null, null);
|
|
||||||
resSet.updateBytes(null, null);
|
|
||||||
resSet.updateDate(null, null);
|
|
||||||
resSet.updateTime(null, null);
|
|
||||||
resSet.updateTimestamp(null, null);
|
|
||||||
resSet.updateAsciiStream(null, null);
|
|
||||||
resSet.updateBinaryStream(null, null);
|
|
||||||
resSet.updateCharacterStream(null, null);
|
|
||||||
resSet.updateObject(null, null);
|
|
||||||
resSet.updateObject(null, null);
|
|
||||||
resSet.insertRow();
|
|
||||||
resSet.updateRow();
|
|
||||||
resSet.deleteRow();
|
|
||||||
resSet.refreshRow();
|
|
||||||
resSet.cancelRowUpdates();
|
|
||||||
resSet.moveToInsertRow();
|
|
||||||
resSet.moveToCurrentRow();
|
|
||||||
resSet.getStatement();
|
|
||||||
resSet.getObject(0, new HashMap<>());
|
|
||||||
resSet.getRef(null);
|
|
||||||
resSet.getBlob(null);
|
|
||||||
resSet.getClob(null);
|
|
||||||
resSet.getArray(null);
|
|
||||||
resSet.getObject("", new HashMap<>());
|
|
||||||
resSet.getRef(null);
|
|
||||||
resSet.getBlob(null);
|
|
||||||
resSet.getClob(null);
|
|
||||||
resSet.getArray(null);
|
|
||||||
resSet.getDate(null, null);
|
|
||||||
resSet.getDate(null, null);
|
|
||||||
resSet.getTime(null, null);
|
|
||||||
resSet.getTime(null, null);
|
|
||||||
resSet.getTimestamp(null, null);
|
|
||||||
resSet.getTimestamp(null, null);
|
|
||||||
resSet.getURL(null);
|
|
||||||
resSet.getURL(null);
|
|
||||||
resSet.updateRef(null, null);
|
|
||||||
resSet.updateRef(null, null);
|
|
||||||
resSet.updateBlob(0, new SerialBlob("".getBytes("UTF8")));
|
|
||||||
resSet.updateBlob("", new SerialBlob("".getBytes("UTF8")));
|
|
||||||
resSet.updateClob("", new SerialClob("".toCharArray()));
|
|
||||||
resSet.updateClob(0, new SerialClob("".toCharArray()));
|
|
||||||
resSet.updateArray(null, null);
|
|
||||||
resSet.updateArray(null, null);
|
|
||||||
resSet.getRowId(null);
|
|
||||||
resSet.getRowId(null);
|
|
||||||
resSet.updateRowId(null, null);
|
|
||||||
resSet.updateRowId(null, null);
|
|
||||||
resSet.getHoldability();
|
|
||||||
resSet.updateNString(null, null);
|
|
||||||
resSet.updateNString(null, null);
|
|
||||||
resSet.getNClob(null);
|
|
||||||
resSet.getNClob(null);
|
|
||||||
resSet.getSQLXML(null);
|
|
||||||
resSet.getSQLXML(null);
|
|
||||||
resSet.updateSQLXML(null, null);
|
|
||||||
resSet.updateSQLXML(null, null);
|
|
||||||
resSet.getNCharacterStream(null);
|
|
||||||
resSet.getNCharacterStream(null);
|
|
||||||
resSet.updateNCharacterStream(null, null);
|
|
||||||
resSet.updateNCharacterStream(null, null);
|
|
||||||
resSet.updateAsciiStream(null, null);
|
|
||||||
resSet.updateBinaryStream(null, null);
|
|
||||||
resSet.updateCharacterStream(null, null);
|
|
||||||
resSet.updateAsciiStream(null, null);
|
|
||||||
resSet.updateBinaryStream(null, null);
|
|
||||||
resSet.updateCharacterStream(null, null);
|
|
||||||
resSet.updateNCharacterStream(null, null);
|
|
||||||
resSet.updateNCharacterStream(null, null);
|
|
||||||
resSet.updateAsciiStream(null, null);
|
|
||||||
resSet.updateBinaryStream(null, null);
|
|
||||||
resSet.updateCharacterStream(null, null);
|
|
||||||
resSet.updateAsciiStream(null, null);
|
|
||||||
resSet.updateBinaryStream(null, null);
|
|
||||||
resSet.updateCharacterStream(null, null);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testBatch() throws SQLException {
|
|
||||||
String[] sqls = new String[]{"insert into test.t0 values (1496732686001,2147483600,1496732687000,3.1415925,3.1415926535897," +
|
|
||||||
"'涛思数据,强~',12,0,'TDengine is powerful')", "insert into test.t0 values (1496732686002,2147483600,1496732687000,3.1415925,3.1415926535897," +
|
|
||||||
"'涛思数据,强~',12,1,'TDengine is powerful')"};
|
|
||||||
for (String sql : sqls) {
|
|
||||||
statement.addBatch(sql);
|
|
||||||
}
|
|
||||||
int[] res = statement.executeBatch();
|
|
||||||
assertEquals(res.length, 2);
|
|
||||||
statement.clearBatch();
|
|
||||||
}
|
|
||||||
|
|
||||||
@AfterClass
|
|
||||||
public static void close() {
|
|
||||||
try {
|
|
||||||
statement.executeUpdate("drop database " + dbName);
|
|
||||||
if (statement != null)
|
|
||||||
statement.close();
|
|
||||||
if (connection != null)
|
|
||||||
connection.close();
|
|
||||||
} catch (SQLException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -233,7 +233,7 @@ public class TSDBConnectionTest {
|
||||||
int status = rs.getInt("server_status()");
|
int status = rs.getInt("server_status()");
|
||||||
Assert.assertEquals(1, status);
|
Assert.assertEquals(1, status);
|
||||||
|
|
||||||
conn.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY, ResultSet.HOLD_CURSORS_OVER_COMMIT);
|
conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY, ResultSet.HOLD_CURSORS_OVER_COMMIT);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test(expected = SQLFeatureNotSupportedException.class)
|
@Test(expected = SQLFeatureNotSupportedException.class)
|
||||||
|
|
|
@ -0,0 +1,194 @@
|
||||||
|
package com.taosdata.jdbc;
|
||||||
|
|
||||||
|
import com.taosdata.jdbc.rs.RestfulParameterMetaData;
|
||||||
|
import org.junit.AfterClass;
|
||||||
|
import org.junit.Assert;
|
||||||
|
import org.junit.BeforeClass;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import java.sql.*;
|
||||||
|
|
||||||
|
public class TSDBParameterMetaDataTest {
|
||||||
|
|
||||||
|
private static final String host = "127.0.0.1";
|
||||||
|
private static Connection conn;
|
||||||
|
private static final String sql_insert = "insert into t1 values(?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
|
||||||
|
private static PreparedStatement pstmt_insert;
|
||||||
|
private static final String sql_select = "select * from t1 where ts > ? and ts <= ? and f1 >= ?";
|
||||||
|
private static PreparedStatement pstmt_select;
|
||||||
|
private static ParameterMetaData parameterMetaData_insert;
|
||||||
|
private static ParameterMetaData parameterMetaData_select;
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void getParameterCount() throws SQLException {
|
||||||
|
Assert.assertEquals(10, parameterMetaData_insert.getParameterCount());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void isNullable() throws SQLException {
|
||||||
|
Assert.assertEquals(ParameterMetaData.parameterNullableUnknown, parameterMetaData_insert.isNullable(1));
|
||||||
|
Assert.assertEquals(ParameterMetaData.parameterNullableUnknown, parameterMetaData_insert.isNullable(2));
|
||||||
|
Assert.assertEquals(ParameterMetaData.parameterNullableUnknown, parameterMetaData_insert.isNullable(3));
|
||||||
|
Assert.assertEquals(ParameterMetaData.parameterNullableUnknown, parameterMetaData_insert.isNullable(4));
|
||||||
|
Assert.assertEquals(ParameterMetaData.parameterNullableUnknown, parameterMetaData_insert.isNullable(5));
|
||||||
|
Assert.assertEquals(ParameterMetaData.parameterNullableUnknown, parameterMetaData_insert.isNullable(6));
|
||||||
|
Assert.assertEquals(ParameterMetaData.parameterNullableUnknown, parameterMetaData_insert.isNullable(7));
|
||||||
|
Assert.assertEquals(ParameterMetaData.parameterNullableUnknown, parameterMetaData_insert.isNullable(8));
|
||||||
|
Assert.assertEquals(ParameterMetaData.parameterNullableUnknown, parameterMetaData_insert.isNullable(9));
|
||||||
|
Assert.assertEquals(ParameterMetaData.parameterNullableUnknown, parameterMetaData_insert.isNullable(10));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void isSigned() throws SQLException {
|
||||||
|
Assert.assertEquals(false, parameterMetaData_insert.isSigned(1));
|
||||||
|
Assert.assertEquals(true, parameterMetaData_insert.isSigned(2));
|
||||||
|
Assert.assertEquals(true, parameterMetaData_insert.isSigned(3));
|
||||||
|
Assert.assertEquals(true, parameterMetaData_insert.isSigned(4));
|
||||||
|
Assert.assertEquals(true, parameterMetaData_insert.isSigned(5));
|
||||||
|
Assert.assertEquals(true, parameterMetaData_insert.isSigned(6));
|
||||||
|
Assert.assertEquals(true, parameterMetaData_insert.isSigned(7));
|
||||||
|
Assert.assertEquals(false, parameterMetaData_insert.isSigned(8));
|
||||||
|
Assert.assertEquals(false, parameterMetaData_insert.isSigned(9));
|
||||||
|
Assert.assertEquals(false, parameterMetaData_insert.isSigned(10));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void getPrecision() throws SQLException {
|
||||||
|
Assert.assertEquals(0, parameterMetaData_insert.getPrecision(1));
|
||||||
|
Assert.assertEquals(0, parameterMetaData_insert.getPrecision(2));
|
||||||
|
Assert.assertEquals(0, parameterMetaData_insert.getPrecision(3));
|
||||||
|
Assert.assertEquals(0, parameterMetaData_insert.getPrecision(4));
|
||||||
|
Assert.assertEquals(0, parameterMetaData_insert.getPrecision(5));
|
||||||
|
Assert.assertEquals(0, parameterMetaData_insert.getPrecision(6));
|
||||||
|
Assert.assertEquals(0, parameterMetaData_insert.getPrecision(7));
|
||||||
|
Assert.assertEquals(0, parameterMetaData_insert.getPrecision(8));
|
||||||
|
Assert.assertEquals(5, parameterMetaData_insert.getPrecision(9));
|
||||||
|
Assert.assertEquals(5, parameterMetaData_insert.getPrecision(10));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void getScale() throws SQLException {
|
||||||
|
Assert.assertEquals(0, parameterMetaData_insert.getScale(1));
|
||||||
|
Assert.assertEquals(0, parameterMetaData_insert.getScale(2));
|
||||||
|
Assert.assertEquals(0, parameterMetaData_insert.getScale(3));
|
||||||
|
Assert.assertEquals(0, parameterMetaData_insert.getScale(4));
|
||||||
|
Assert.assertEquals(0, parameterMetaData_insert.getScale(5));
|
||||||
|
Assert.assertEquals(0, parameterMetaData_insert.getScale(6));
|
||||||
|
Assert.assertEquals(0, parameterMetaData_insert.getScale(7));
|
||||||
|
Assert.assertEquals(0, parameterMetaData_insert.getScale(8));
|
||||||
|
Assert.assertEquals(0, parameterMetaData_insert.getScale(9));
|
||||||
|
Assert.assertEquals(0, parameterMetaData_insert.getScale(10));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void getParameterType() throws SQLException {
|
||||||
|
Assert.assertEquals(Types.TIMESTAMP, parameterMetaData_insert.getParameterType(1));
|
||||||
|
Assert.assertEquals(Types.INTEGER, parameterMetaData_insert.getParameterType(2));
|
||||||
|
Assert.assertEquals(Types.BIGINT, parameterMetaData_insert.getParameterType(3));
|
||||||
|
Assert.assertEquals(Types.FLOAT, parameterMetaData_insert.getParameterType(4));
|
||||||
|
Assert.assertEquals(Types.DOUBLE, parameterMetaData_insert.getParameterType(5));
|
||||||
|
Assert.assertEquals(Types.SMALLINT, parameterMetaData_insert.getParameterType(6));
|
||||||
|
Assert.assertEquals(Types.TINYINT, parameterMetaData_insert.getParameterType(7));
|
||||||
|
Assert.assertEquals(Types.BOOLEAN, parameterMetaData_insert.getParameterType(8));
|
||||||
|
Assert.assertEquals(Types.BINARY, parameterMetaData_insert.getParameterType(9));
|
||||||
|
Assert.assertEquals(Types.NCHAR, parameterMetaData_insert.getParameterType(10));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void getParameterTypeName() throws SQLException {
|
||||||
|
Assert.assertEquals(TSDBConstants.jdbcType2TaosTypeName(Types.TIMESTAMP), parameterMetaData_insert.getParameterTypeName(1));
|
||||||
|
Assert.assertEquals(TSDBConstants.jdbcType2TaosTypeName(Types.INTEGER), parameterMetaData_insert.getParameterTypeName(2));
|
||||||
|
Assert.assertEquals(TSDBConstants.jdbcType2TaosTypeName(Types.BIGINT), parameterMetaData_insert.getParameterTypeName(3));
|
||||||
|
Assert.assertEquals(TSDBConstants.jdbcType2TaosTypeName(Types.FLOAT), parameterMetaData_insert.getParameterTypeName(4));
|
||||||
|
Assert.assertEquals(TSDBConstants.jdbcType2TaosTypeName(Types.DOUBLE), parameterMetaData_insert.getParameterTypeName(5));
|
||||||
|
Assert.assertEquals(TSDBConstants.jdbcType2TaosTypeName(Types.SMALLINT), parameterMetaData_insert.getParameterTypeName(6));
|
||||||
|
Assert.assertEquals(TSDBConstants.jdbcType2TaosTypeName(Types.TINYINT), parameterMetaData_insert.getParameterTypeName(7));
|
||||||
|
Assert.assertEquals(TSDBConstants.jdbcType2TaosTypeName(Types.BOOLEAN), parameterMetaData_insert.getParameterTypeName(8));
|
||||||
|
Assert.assertEquals(TSDBConstants.jdbcType2TaosTypeName(Types.BINARY), parameterMetaData_insert.getParameterTypeName(9));
|
||||||
|
Assert.assertEquals(TSDBConstants.jdbcType2TaosTypeName(Types.NCHAR), parameterMetaData_insert.getParameterTypeName(10));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void getParameterClassName() throws SQLException {
|
||||||
|
Assert.assertEquals(Timestamp.class.getName(), parameterMetaData_insert.getParameterClassName(1));
|
||||||
|
Assert.assertEquals(Integer.class.getName(), parameterMetaData_insert.getParameterClassName(2));
|
||||||
|
Assert.assertEquals(Long.class.getName(), parameterMetaData_insert.getParameterClassName(3));
|
||||||
|
Assert.assertEquals(Float.class.getName(), parameterMetaData_insert.getParameterClassName(4));
|
||||||
|
Assert.assertEquals(Double.class.getName(), parameterMetaData_insert.getParameterClassName(5));
|
||||||
|
Assert.assertEquals(Short.class.getName(), parameterMetaData_insert.getParameterClassName(6));
|
||||||
|
Assert.assertEquals(Byte.class.getName(), parameterMetaData_insert.getParameterClassName(7));
|
||||||
|
Assert.assertEquals(Boolean.class.getName(), parameterMetaData_insert.getParameterClassName(8));
|
||||||
|
Assert.assertEquals(byte[].class.getName(), parameterMetaData_insert.getParameterClassName(9));
|
||||||
|
Assert.assertEquals(String.class.getName(), parameterMetaData_insert.getParameterClassName(10));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void getParameterMode() throws SQLException {
|
||||||
|
for (int i = 1; i <= parameterMetaData_insert.getParameterCount(); i++) {
|
||||||
|
int parameterMode = parameterMetaData_insert.getParameterMode(i);
|
||||||
|
Assert.assertEquals(ParameterMetaData.parameterModeUnknown, parameterMode);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void unwrap() throws SQLException {
|
||||||
|
TSDBParameterMetaData unwrap = parameterMetaData_insert.unwrap(TSDBParameterMetaData.class);
|
||||||
|
Assert.assertNotNull(unwrap);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void isWrapperFor() throws SQLException {
|
||||||
|
Assert.assertTrue(parameterMetaData_insert.isWrapperFor(TSDBParameterMetaData.class));
|
||||||
|
}
|
||||||
|
|
||||||
|
@BeforeClass
|
||||||
|
public static void beforeClass() {
|
||||||
|
try {
|
||||||
|
Class.forName("com.taosdata.jdbc.TSDBDriver");
|
||||||
|
conn = DriverManager.getConnection("jdbc:TAOS://" + host + ":6030/?user=root&password=taosdata");
|
||||||
|
try (Statement stmt = conn.createStatement()) {
|
||||||
|
stmt.execute("drop database if exists test_pstmt");
|
||||||
|
stmt.execute("create database if not exists test_pstmt");
|
||||||
|
stmt.execute("use test_pstmt");
|
||||||
|
stmt.execute("create table weather(ts timestamp, f1 int, f2 bigint, f3 float, f4 double, f5 smallint, f6 tinyint, f7 bool, f8 binary(64), f9 nchar(64)) tags(loc nchar(64))");
|
||||||
|
stmt.execute("create table t1 using weather tags('beijing')");
|
||||||
|
}
|
||||||
|
pstmt_insert = conn.prepareStatement(sql_insert);
|
||||||
|
|
||||||
|
pstmt_insert.setTimestamp(1, new Timestamp(System.currentTimeMillis()));
|
||||||
|
pstmt_insert.setObject(2, 111);
|
||||||
|
pstmt_insert.setObject(3, Long.MAX_VALUE);
|
||||||
|
pstmt_insert.setObject(4, 3.14159265354f);
|
||||||
|
pstmt_insert.setObject(5, Double.MAX_VALUE);
|
||||||
|
pstmt_insert.setObject(6, Short.MAX_VALUE);
|
||||||
|
pstmt_insert.setObject(7, Byte.MAX_VALUE);
|
||||||
|
pstmt_insert.setObject(8, true);
|
||||||
|
pstmt_insert.setObject(9, "hello".getBytes());
|
||||||
|
pstmt_insert.setObject(10, "Hello");
|
||||||
|
parameterMetaData_insert = pstmt_insert.getParameterMetaData();
|
||||||
|
|
||||||
|
pstmt_select = conn.prepareStatement(sql_select);
|
||||||
|
pstmt_select.setTimestamp(1, new Timestamp(System.currentTimeMillis()));
|
||||||
|
pstmt_select.setTimestamp(2, new Timestamp(System.currentTimeMillis() + 10000));
|
||||||
|
pstmt_select.setInt(3, 0);
|
||||||
|
parameterMetaData_select = pstmt_select.getParameterMetaData();
|
||||||
|
|
||||||
|
} catch (ClassNotFoundException | SQLException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@AfterClass
|
||||||
|
public static void afterClass() {
|
||||||
|
try {
|
||||||
|
if (pstmt_insert != null)
|
||||||
|
pstmt_insert.close();
|
||||||
|
if (pstmt_select != null)
|
||||||
|
pstmt_select.close();
|
||||||
|
if (conn != null)
|
||||||
|
conn.close();
|
||||||
|
} catch (SQLException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -5,14 +5,16 @@ import org.junit.Assert;
|
||||||
import org.junit.BeforeClass;
|
import org.junit.BeforeClass;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.Serializable;
|
||||||
import java.sql.*;
|
import java.sql.*;
|
||||||
|
|
||||||
public class TSDBPreparedStatementTest {
|
public class TSDBPreparedStatementTest {
|
||||||
private static final String host = "127.0.0.1";
|
private static final String host = "127.0.0.1";
|
||||||
private static Connection conn;
|
private static Connection conn;
|
||||||
private static final String sql_insert = "insert into t1 values(?, ?)";
|
private static final String sql_insert = "insert into t1 values(?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
|
||||||
private static PreparedStatement pstmt_insert;
|
private static PreparedStatement pstmt_insert;
|
||||||
private static final String sql_select = "select * from t1 where ts > ? and ts <= ? and temperature >= ?";
|
private static final String sql_select = "select * from t1 where ts > ? and ts <= ? and f1 >= ?";
|
||||||
private static PreparedStatement pstmt_select;
|
private static PreparedStatement pstmt_select;
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@ -21,7 +23,7 @@ public class TSDBPreparedStatementTest {
|
||||||
long start = end - 1000 * 60 * 60;
|
long start = end - 1000 * 60 * 60;
|
||||||
pstmt_select.setTimestamp(1, new Timestamp(start));
|
pstmt_select.setTimestamp(1, new Timestamp(start));
|
||||||
pstmt_select.setTimestamp(2, new Timestamp(end));
|
pstmt_select.setTimestamp(2, new Timestamp(end));
|
||||||
pstmt_select.setFloat(3, 0);
|
pstmt_select.setInt(3, 0);
|
||||||
|
|
||||||
ResultSet rs = pstmt_select.executeQuery();
|
ResultSet rs = pstmt_select.executeQuery();
|
||||||
Assert.assertNotNull(rs);
|
Assert.assertNotNull(rs);
|
||||||
|
@ -37,48 +39,73 @@ public class TSDBPreparedStatementTest {
|
||||||
@Test
|
@Test
|
||||||
public void executeUpdate() throws SQLException {
|
public void executeUpdate() throws SQLException {
|
||||||
pstmt_insert.setTimestamp(1, new Timestamp(System.currentTimeMillis()));
|
pstmt_insert.setTimestamp(1, new Timestamp(System.currentTimeMillis()));
|
||||||
pstmt_insert.setFloat(2, 3.14f);
|
pstmt_insert.setFloat(4, 3.14f);
|
||||||
int result = pstmt_insert.executeUpdate();
|
int result = pstmt_insert.executeUpdate();
|
||||||
Assert.assertEquals(1, result);
|
Assert.assertEquals(1, result);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void setNull() throws SQLException {
|
public void setNull() throws SQLException {
|
||||||
pstmt_insert.setNull(2, Types.FLOAT);
|
pstmt_insert.setTimestamp(1, new Timestamp(System.currentTimeMillis()));
|
||||||
|
pstmt_insert.setNull(2, Types.INTEGER);
|
||||||
|
int result = pstmt_insert.executeUpdate();
|
||||||
|
Assert.assertEquals(1, result);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void setBoolean() throws SQLException {
|
public void setBoolean() throws SQLException {
|
||||||
pstmt_insert.setBoolean(2, true);
|
pstmt_insert.setTimestamp(1, new Timestamp(System.currentTimeMillis()));
|
||||||
|
pstmt_insert.setBoolean(8, true);
|
||||||
|
int ret = pstmt_insert.executeUpdate();
|
||||||
|
Assert.assertEquals(1, ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test(expected = SQLFeatureNotSupportedException.class)
|
@Test
|
||||||
public void setByte() throws SQLException {
|
public void setByte() throws SQLException {
|
||||||
pstmt_insert.setByte(1, (byte) 0x001);
|
pstmt_insert.setTimestamp(1, new Timestamp(System.currentTimeMillis()));
|
||||||
|
pstmt_insert.setByte(7, (byte) 0x001);
|
||||||
|
int ret = pstmt_insert.executeUpdate();
|
||||||
|
Assert.assertEquals(1, ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void setShort() {
|
public void setShort() throws SQLException {
|
||||||
|
pstmt_insert.setTimestamp(1, new Timestamp(System.currentTimeMillis()));
|
||||||
|
pstmt_insert.setShort(6, (short) 2);
|
||||||
|
int ret = pstmt_insert.executeUpdate();
|
||||||
|
Assert.assertEquals(1, ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void setInt() {
|
public void setInt() throws SQLException {
|
||||||
|
pstmt_insert.setTimestamp(1, new Timestamp(System.currentTimeMillis()));
|
||||||
|
pstmt_insert.setInt(2, 10086);
|
||||||
|
int ret = pstmt_insert.executeUpdate();
|
||||||
|
Assert.assertEquals(1, ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void setLong() {
|
public void setLong() throws SQLException {
|
||||||
|
pstmt_insert.setTimestamp(1, new Timestamp(System.currentTimeMillis()));
|
||||||
|
pstmt_insert.setLong(3, Long.MAX_VALUE);
|
||||||
|
int ret = pstmt_insert.executeUpdate();
|
||||||
|
Assert.assertEquals(1, ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void setFloat() {
|
public void setFloat() throws SQLException {
|
||||||
|
pstmt_insert.setTimestamp(1, new Timestamp(System.currentTimeMillis()));
|
||||||
|
pstmt_insert.setFloat(4, 3.14f);
|
||||||
|
int ret = pstmt_insert.executeUpdate();
|
||||||
|
Assert.assertEquals(1, ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void setDouble() {
|
public void setDouble() throws SQLException {
|
||||||
|
pstmt_insert.setTimestamp(1, new Timestamp(System.currentTimeMillis()));
|
||||||
|
pstmt_insert.setDouble(5, 3.14444);
|
||||||
|
int ret = pstmt_insert.executeUpdate();
|
||||||
|
Assert.assertEquals(1, ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test(expected = SQLFeatureNotSupportedException.class)
|
@Test(expected = SQLFeatureNotSupportedException.class)
|
||||||
|
@ -87,12 +114,56 @@ public class TSDBPreparedStatementTest {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void setString() {
|
public void setString() throws SQLException {
|
||||||
|
pstmt_insert.setTimestamp(1, new Timestamp(System.currentTimeMillis()));
|
||||||
|
pstmt_insert.setString(10, "aaaa");
|
||||||
|
boolean execute = pstmt_insert.execute();
|
||||||
|
Assert.assertFalse(execute);
|
||||||
|
|
||||||
|
pstmt_insert.setTimestamp(1, new Timestamp(System.currentTimeMillis()));
|
||||||
|
pstmt_insert.setString(10, new Person("john", 33, true).toString());
|
||||||
|
Assert.assertFalse(pstmt_insert.execute());
|
||||||
|
|
||||||
|
pstmt_insert.setTimestamp(1, new Timestamp(System.currentTimeMillis()));
|
||||||
|
pstmt_insert.setString(10, new Person("john", 33, true).toString().replaceAll("'", "\""));
|
||||||
|
Assert.assertFalse(pstmt_insert.execute());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test(expected = SQLFeatureNotSupportedException.class)
|
class Person implements Serializable {
|
||||||
public void setBytes() throws SQLException {
|
String name;
|
||||||
pstmt_insert.setBytes(1, new byte[]{});
|
int age;
|
||||||
|
boolean sex;
|
||||||
|
|
||||||
|
public Person(String name, int age, boolean sex) {
|
||||||
|
this.name = name;
|
||||||
|
this.age = age;
|
||||||
|
this.sex = sex;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "Person{" +
|
||||||
|
"name='" + name + '\'' +
|
||||||
|
", age=" + age +
|
||||||
|
", sex=" + sex +
|
||||||
|
'}';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void setBytes() throws SQLException, IOException {
|
||||||
|
pstmt_insert.setTimestamp(1, new Timestamp(System.currentTimeMillis()));
|
||||||
|
|
||||||
|
// ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
||||||
|
// ObjectOutputStream oos = new ObjectOutputStream(baos);
|
||||||
|
// oos.writeObject(new Person("john", 33, true));
|
||||||
|
// oos.flush();
|
||||||
|
// byte[] bytes = baos.toByteArray();
|
||||||
|
// pstmt_insert.setBytes(9, bytes);
|
||||||
|
|
||||||
|
pstmt_insert.setBytes(9, new Person("john", 33, true).toString().getBytes());
|
||||||
|
int ret = pstmt_insert.executeUpdate();
|
||||||
|
Assert.assertEquals(1, ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test(expected = SQLFeatureNotSupportedException.class)
|
@Test(expected = SQLFeatureNotSupportedException.class)
|
||||||
|
@ -106,8 +177,10 @@ public class TSDBPreparedStatementTest {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void setTimestamp() {
|
public void setTimestamp() throws SQLException {
|
||||||
//TODO
|
pstmt_insert.setTimestamp(1, new Timestamp(System.currentTimeMillis()));
|
||||||
|
int ret = pstmt_insert.executeUpdate();
|
||||||
|
Assert.assertEquals(1, ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test(expected = SQLFeatureNotSupportedException.class)
|
@Test(expected = SQLFeatureNotSupportedException.class)
|
||||||
|
@ -121,24 +194,69 @@ public class TSDBPreparedStatementTest {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void clearParameters() {
|
public void clearParameters() throws SQLException {
|
||||||
//TODO
|
pstmt_insert.clearParameters();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void setObject() throws SQLException {
|
public void setObject() throws SQLException {
|
||||||
pstmt_insert.setObject(1, System.currentTimeMillis());
|
pstmt_insert.setObject(1, new Timestamp(System.currentTimeMillis()));
|
||||||
//TODO
|
int ret = pstmt_insert.executeUpdate();
|
||||||
|
Assert.assertEquals(1, ret);
|
||||||
|
|
||||||
|
pstmt_insert.setTimestamp(1, new Timestamp(System.currentTimeMillis()));
|
||||||
|
pstmt_insert.setObject(2, 111);
|
||||||
|
ret = pstmt_insert.executeUpdate();
|
||||||
|
Assert.assertEquals(1, ret);
|
||||||
|
|
||||||
|
pstmt_insert.setTimestamp(1, new Timestamp(System.currentTimeMillis()));
|
||||||
|
pstmt_insert.setObject(3, Long.MAX_VALUE);
|
||||||
|
ret = pstmt_insert.executeUpdate();
|
||||||
|
Assert.assertEquals(1, ret);
|
||||||
|
|
||||||
|
pstmt_insert.setTimestamp(1, new Timestamp(System.currentTimeMillis()));
|
||||||
|
pstmt_insert.setObject(4, 3.14159265354f);
|
||||||
|
ret = pstmt_insert.executeUpdate();
|
||||||
|
Assert.assertEquals(1, ret);
|
||||||
|
|
||||||
|
pstmt_insert.setTimestamp(1, new Timestamp(System.currentTimeMillis()));
|
||||||
|
pstmt_insert.setObject(5, Double.MAX_VALUE);
|
||||||
|
ret = pstmt_insert.executeUpdate();
|
||||||
|
Assert.assertEquals(1, ret);
|
||||||
|
|
||||||
|
pstmt_insert.setTimestamp(1, new Timestamp(System.currentTimeMillis()));
|
||||||
|
pstmt_insert.setObject(6, Short.MAX_VALUE);
|
||||||
|
ret = pstmt_insert.executeUpdate();
|
||||||
|
Assert.assertEquals(1, ret);
|
||||||
|
|
||||||
|
pstmt_insert.setTimestamp(1, new Timestamp(System.currentTimeMillis()));
|
||||||
|
pstmt_insert.setObject(7, Byte.MAX_VALUE);
|
||||||
|
ret = pstmt_insert.executeUpdate();
|
||||||
|
Assert.assertEquals(1, ret);
|
||||||
|
|
||||||
|
pstmt_insert.setTimestamp(1, new Timestamp(System.currentTimeMillis()));
|
||||||
|
pstmt_insert.setObject(8, true);
|
||||||
|
ret = pstmt_insert.executeUpdate();
|
||||||
|
Assert.assertEquals(1, ret);
|
||||||
|
|
||||||
|
pstmt_insert.setTimestamp(1, new Timestamp(System.currentTimeMillis()));
|
||||||
|
pstmt_insert.setObject(9, "hello".getBytes());
|
||||||
|
ret = pstmt_insert.executeUpdate();
|
||||||
|
Assert.assertEquals(1, ret);
|
||||||
|
|
||||||
|
pstmt_insert.setTimestamp(1, new Timestamp(System.currentTimeMillis()));
|
||||||
|
pstmt_insert.setObject(10, "Hello");
|
||||||
|
ret = pstmt_insert.executeUpdate();
|
||||||
|
Assert.assertEquals(1, ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void execute() {
|
public void execute() throws SQLException {
|
||||||
//TODO
|
pstmt_insert.setTimestamp(1, new Timestamp(System.currentTimeMillis()));
|
||||||
}
|
int ret = pstmt_insert.executeUpdate();
|
||||||
|
Assert.assertEquals(1, ret);
|
||||||
|
|
||||||
@Test
|
executeQuery();
|
||||||
public void addBatch() {
|
|
||||||
//TODO:
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test(expected = SQLFeatureNotSupportedException.class)
|
@Test(expected = SQLFeatureNotSupportedException.class)
|
||||||
|
@ -176,11 +294,11 @@ public class TSDBPreparedStatementTest {
|
||||||
pstmt_insert.setURL(1, null);
|
pstmt_insert.setURL(1, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test(expected = SQLFeatureNotSupportedException.class)
|
@Test
|
||||||
public void getParameterMetaData() throws SQLException {
|
public void getParameterMetaData() throws SQLException {
|
||||||
ParameterMetaData parameterMetaData = pstmt_insert.getParameterMetaData();
|
ParameterMetaData parameterMetaData = pstmt_insert.getParameterMetaData();
|
||||||
// Assert.assertNotNull(parameterMetaData);
|
Assert.assertNotNull(parameterMetaData);
|
||||||
//TODO:
|
//TODO: modify the test case
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test(expected = SQLFeatureNotSupportedException.class)
|
@Test(expected = SQLFeatureNotSupportedException.class)
|
||||||
|
@ -215,10 +333,10 @@ public class TSDBPreparedStatementTest {
|
||||||
Class.forName("com.taosdata.jdbc.TSDBDriver");
|
Class.forName("com.taosdata.jdbc.TSDBDriver");
|
||||||
conn = DriverManager.getConnection("jdbc:TAOS://" + host + ":6030/?user=root&password=taosdata");
|
conn = DriverManager.getConnection("jdbc:TAOS://" + host + ":6030/?user=root&password=taosdata");
|
||||||
try (Statement stmt = conn.createStatement()) {
|
try (Statement stmt = conn.createStatement()) {
|
||||||
stmt.execute("drop database if exists test_pstmt");
|
stmt.execute("drop database if exists test_pstmt_jni");
|
||||||
stmt.execute("create database if not exists test_pstmt");
|
stmt.execute("create database if not exists test_pstmt_jni");
|
||||||
stmt.execute("use test_pstmt");
|
stmt.execute("use test_pstmt_jni");
|
||||||
stmt.execute("create table weather(ts timestamp, temperature float) tags(loc nchar(64))");
|
stmt.execute("create table weather(ts timestamp, f1 int, f2 bigint, f3 float, f4 double, f5 smallint, f6 tinyint, f7 bool, f8 binary(64), f9 nchar(64)) tags(loc nchar(64))");
|
||||||
stmt.execute("create table t1 using weather tags('beijing')");
|
stmt.execute("create table t1 using weather tags('beijing')");
|
||||||
}
|
}
|
||||||
pstmt_insert = conn.prepareStatement(sql_insert);
|
pstmt_insert = conn.prepareStatement(sql_insert);
|
||||||
|
@ -231,7 +349,10 @@ public class TSDBPreparedStatementTest {
|
||||||
@AfterClass
|
@AfterClass
|
||||||
public static void afterClass() {
|
public static void afterClass() {
|
||||||
try {
|
try {
|
||||||
|
if (pstmt_insert != null)
|
||||||
|
pstmt_insert.close();
|
||||||
|
if (pstmt_select != null)
|
||||||
|
pstmt_select.close();
|
||||||
if (conn != null)
|
if (conn != null)
|
||||||
conn.close();
|
conn.close();
|
||||||
} catch (SQLException e) {
|
} catch (SQLException e) {
|
||||||
|
|
|
@ -0,0 +1,678 @@
|
||||||
|
package com.taosdata.jdbc;
|
||||||
|
|
||||||
|
import com.google.common.primitives.Ints;
|
||||||
|
import com.google.common.primitives.Longs;
|
||||||
|
import com.google.common.primitives.Shorts;
|
||||||
|
import com.taosdata.jdbc.rs.RestfulResultSet;
|
||||||
|
import org.junit.AfterClass;
|
||||||
|
import org.junit.Assert;
|
||||||
|
import org.junit.BeforeClass;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.io.Reader;
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.sql.*;
|
||||||
|
import java.text.ParseException;
|
||||||
|
import java.text.SimpleDateFormat;
|
||||||
|
|
||||||
|
public class TSDBResultSetTest {
|
||||||
|
|
||||||
|
private static final String host = "127.0.0.1";
|
||||||
|
private static Connection conn;
|
||||||
|
private static Statement stmt;
|
||||||
|
private static ResultSet rs;
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void wasNull() throws SQLException {
|
||||||
|
Assert.assertFalse(rs.wasNull());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void getString() throws SQLException {
|
||||||
|
String f10 = rs.getString("f10");
|
||||||
|
Assert.assertEquals("涛思数据", f10);
|
||||||
|
f10 = rs.getString(10);
|
||||||
|
Assert.assertEquals("涛思数据", f10);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void getBoolean() throws SQLException {
|
||||||
|
Boolean f9 = rs.getBoolean("f9");
|
||||||
|
Assert.assertEquals(true, f9);
|
||||||
|
f9 = rs.getBoolean(9);
|
||||||
|
Assert.assertEquals(true, f9);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void getByte() throws SQLException {
|
||||||
|
byte f8 = rs.getByte("f8");
|
||||||
|
Assert.assertEquals(10, f8);
|
||||||
|
f8 = rs.getByte(8);
|
||||||
|
Assert.assertEquals(10, f8);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void getShort() throws SQLException {
|
||||||
|
short f7 = rs.getShort("f7");
|
||||||
|
Assert.assertEquals(10, f7);
|
||||||
|
f7 = rs.getShort(7);
|
||||||
|
Assert.assertEquals(10, f7);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void getInt() throws SQLException {
|
||||||
|
int f2 = rs.getInt("f2");
|
||||||
|
Assert.assertEquals(1, f2);
|
||||||
|
f2 = rs.getInt(2);
|
||||||
|
Assert.assertEquals(1, f2);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void getLong() throws SQLException {
|
||||||
|
long f3 = rs.getLong("f3");
|
||||||
|
Assert.assertEquals(100, f3);
|
||||||
|
f3 = rs.getLong(3);
|
||||||
|
Assert.assertEquals(100, f3);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void getFloat() throws SQLException {
|
||||||
|
float f4 = rs.getFloat("f4");
|
||||||
|
Assert.assertEquals(3.1415f, f4, 0f);
|
||||||
|
f4 = rs.getFloat(4);
|
||||||
|
Assert.assertEquals(3.1415f, f4, 0f);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void getDouble() throws SQLException {
|
||||||
|
double f5 = rs.getDouble("f5");
|
||||||
|
Assert.assertEquals(3.1415926, f5, 0.0);
|
||||||
|
f5 = rs.getDouble(5);
|
||||||
|
Assert.assertEquals(3.1415926, f5, 0.0);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void getBigDecimal() throws SQLException {
|
||||||
|
BigDecimal f1 = rs.getBigDecimal("f1");
|
||||||
|
Assert.assertEquals(1609430400000l, f1.longValue());
|
||||||
|
|
||||||
|
BigDecimal f2 = rs.getBigDecimal("f2");
|
||||||
|
Assert.assertEquals(1, f2.intValue());
|
||||||
|
|
||||||
|
BigDecimal f3 = rs.getBigDecimal("f3");
|
||||||
|
Assert.assertEquals(100l, f3.longValue());
|
||||||
|
|
||||||
|
BigDecimal f4 = rs.getBigDecimal("f4");
|
||||||
|
Assert.assertEquals(3.1415f, f4.floatValue(), 0.00000f);
|
||||||
|
|
||||||
|
BigDecimal f5 = rs.getBigDecimal("f5");
|
||||||
|
Assert.assertEquals(3.1415926, f5.doubleValue(), 0.0000000);
|
||||||
|
|
||||||
|
BigDecimal f7 = rs.getBigDecimal("f7");
|
||||||
|
Assert.assertEquals(10, f7.intValue());
|
||||||
|
|
||||||
|
BigDecimal f8 = rs.getBigDecimal("f8");
|
||||||
|
Assert.assertEquals(10, f8.intValue());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void getBytes() throws SQLException {
|
||||||
|
byte[] f1 = rs.getBytes("f1");
|
||||||
|
Assert.assertEquals("2021-01-01 00:00:00.0", new String(f1));
|
||||||
|
|
||||||
|
byte[] f2 = rs.getBytes("f2");
|
||||||
|
Assert.assertEquals(1, Ints.fromByteArray(f2));
|
||||||
|
|
||||||
|
byte[] f3 = rs.getBytes("f3");
|
||||||
|
Assert.assertEquals(100l, Longs.fromByteArray(f3));
|
||||||
|
|
||||||
|
byte[] f4 = rs.getBytes("f4");
|
||||||
|
Assert.assertEquals(3.1415f, Float.valueOf(new String(f4)), 0.000000f);
|
||||||
|
|
||||||
|
byte[] f5 = rs.getBytes("f5");
|
||||||
|
Assert.assertEquals(3.1415926, Double.valueOf(new String(f5)), 0.000000f);
|
||||||
|
|
||||||
|
byte[] f6 = rs.getBytes("f6");
|
||||||
|
Assert.assertEquals("abc", new String(f6));
|
||||||
|
|
||||||
|
byte[] f7 = rs.getBytes("f7");
|
||||||
|
Assert.assertEquals((short) 10, Shorts.fromByteArray(f7));
|
||||||
|
|
||||||
|
byte[] f8 = rs.getBytes("f8");
|
||||||
|
Assert.assertEquals(1, f8.length);
|
||||||
|
Assert.assertEquals((byte) 10, f8[0]);
|
||||||
|
|
||||||
|
byte[] f9 = rs.getBytes("f9");
|
||||||
|
Assert.assertEquals("true", new String(f9));
|
||||||
|
|
||||||
|
byte[] f10 = rs.getBytes("f10");
|
||||||
|
Assert.assertEquals("涛思数据", new String(f10));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void getDate() throws SQLException, ParseException {
|
||||||
|
Date f1 = rs.getDate("f1");
|
||||||
|
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
|
||||||
|
Assert.assertEquals(sdf.parse("2021-01-01"), f1);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void getTime() throws SQLException {
|
||||||
|
Time f1 = rs.getTime("f1");
|
||||||
|
Assert.assertEquals("00:00:00", f1.toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void getTimestamp() throws SQLException {
|
||||||
|
Timestamp f1 = rs.getTimestamp("f1");
|
||||||
|
Assert.assertEquals("2021-01-01 00:00:00.0", f1.toString());
|
||||||
|
f1 = rs.getTimestamp(1);
|
||||||
|
Assert.assertEquals("2021-01-01 00:00:00.0", f1.toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(expected = SQLFeatureNotSupportedException.class)
|
||||||
|
public void getAsciiStream() throws SQLException {
|
||||||
|
rs.getAsciiStream("f1");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(expected = SQLFeatureNotSupportedException.class)
|
||||||
|
public void getUnicodeStream() throws SQLException {
|
||||||
|
rs.getUnicodeStream("f1");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(expected = SQLFeatureNotSupportedException.class)
|
||||||
|
public void getBinaryStream() throws SQLException {
|
||||||
|
rs.getBinaryStream("f1");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void getWarnings() throws SQLException {
|
||||||
|
Assert.assertNull(rs.getWarnings());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void clearWarnings() throws SQLException {
|
||||||
|
rs.clearWarnings();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(expected = SQLFeatureNotSupportedException.class)
|
||||||
|
public void getCursorName() throws SQLException {
|
||||||
|
rs.getCursorName();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void getMetaData() throws SQLException {
|
||||||
|
ResultSetMetaData meta = rs.getMetaData();
|
||||||
|
Assert.assertNotNull(meta);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void getObject() throws SQLException, ParseException {
|
||||||
|
Object f1 = rs.getObject("f1");
|
||||||
|
Assert.assertEquals(Timestamp.class, f1.getClass());
|
||||||
|
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss.sss");
|
||||||
|
java.util.Date date = sdf.parse("2021-01-01 00:00:00.000");
|
||||||
|
Assert.assertEquals(new Timestamp(date.getTime()), f1);
|
||||||
|
|
||||||
|
Object f2 = rs.getObject("f2");
|
||||||
|
Assert.assertEquals(Integer.class, f2.getClass());
|
||||||
|
Assert.assertEquals(1, f2);
|
||||||
|
|
||||||
|
Object f3 = rs.getObject("f3");
|
||||||
|
Assert.assertEquals(Long.class, f3.getClass());
|
||||||
|
Assert.assertEquals(100l, f3);
|
||||||
|
|
||||||
|
Object f4 = rs.getObject("f4");
|
||||||
|
Assert.assertEquals(Float.class, f4.getClass());
|
||||||
|
Assert.assertEquals(3.1415f, f4);
|
||||||
|
|
||||||
|
Object f5 = rs.getObject("f5");
|
||||||
|
Assert.assertEquals(Double.class, f5.getClass());
|
||||||
|
Assert.assertEquals(3.1415926, f5);
|
||||||
|
|
||||||
|
Object f6 = rs.getObject("f6");
|
||||||
|
Assert.assertEquals(byte[].class, f6.getClass());
|
||||||
|
Assert.assertEquals("abc", new String((byte[]) f6));
|
||||||
|
|
||||||
|
Object f7 = rs.getObject("f7");
|
||||||
|
Assert.assertEquals(Short.class, f7.getClass());
|
||||||
|
Assert.assertEquals((short) 10, f7);
|
||||||
|
|
||||||
|
Object f8 = rs.getObject("f8");
|
||||||
|
Assert.assertEquals(Byte.class, f8.getClass());
|
||||||
|
Assert.assertEquals((byte) 10, f8);
|
||||||
|
|
||||||
|
Object f9 = rs.getObject("f9");
|
||||||
|
Assert.assertEquals(Boolean.class, f9.getClass());
|
||||||
|
Assert.assertEquals(true, f9);
|
||||||
|
|
||||||
|
Object f10 = rs.getObject("f10");
|
||||||
|
Assert.assertEquals(String.class, f10.getClass());
|
||||||
|
Assert.assertEquals("涛思数据", f10);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(expected = SQLException.class)
|
||||||
|
public void findColumn() throws SQLException {
|
||||||
|
int columnIndex = rs.findColumn("f1");
|
||||||
|
Assert.assertEquals(1, columnIndex);
|
||||||
|
columnIndex = rs.findColumn("f2");
|
||||||
|
Assert.assertEquals(2, columnIndex);
|
||||||
|
columnIndex = rs.findColumn("f3");
|
||||||
|
Assert.assertEquals(3, columnIndex);
|
||||||
|
columnIndex = rs.findColumn("f4");
|
||||||
|
Assert.assertEquals(4, columnIndex);
|
||||||
|
columnIndex = rs.findColumn("f5");
|
||||||
|
Assert.assertEquals(5, columnIndex);
|
||||||
|
columnIndex = rs.findColumn("f6");
|
||||||
|
Assert.assertEquals(6, columnIndex);
|
||||||
|
columnIndex = rs.findColumn("f7");
|
||||||
|
Assert.assertEquals(7, columnIndex);
|
||||||
|
columnIndex = rs.findColumn("f8");
|
||||||
|
Assert.assertEquals(8, columnIndex);
|
||||||
|
columnIndex = rs.findColumn("f9");
|
||||||
|
Assert.assertEquals(9, columnIndex);
|
||||||
|
columnIndex = rs.findColumn("f10");
|
||||||
|
Assert.assertEquals(10, columnIndex);
|
||||||
|
|
||||||
|
rs.findColumn("f11");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(expected = SQLFeatureNotSupportedException.class)
|
||||||
|
public void getCharacterStream() throws SQLException {
|
||||||
|
rs.getCharacterStream(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(expected = SQLFeatureNotSupportedException.class)
|
||||||
|
public void isBeforeFirst() throws SQLException {
|
||||||
|
rs.isBeforeFirst();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(expected = SQLFeatureNotSupportedException.class)
|
||||||
|
public void isAfterLast() throws SQLException {
|
||||||
|
rs.isAfterLast();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(expected = SQLFeatureNotSupportedException.class)
|
||||||
|
public void isFirst() throws SQLException {
|
||||||
|
rs.isFirst();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(expected = SQLFeatureNotSupportedException.class)
|
||||||
|
public void isLast() throws SQLException {
|
||||||
|
rs.isLast();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(expected = SQLFeatureNotSupportedException.class)
|
||||||
|
public void beforeFirst() throws SQLException {
|
||||||
|
rs.beforeFirst();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(expected = SQLFeatureNotSupportedException.class)
|
||||||
|
public void afterLast() throws SQLException {
|
||||||
|
rs.afterLast();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(expected = SQLFeatureNotSupportedException.class)
|
||||||
|
public void first() throws SQLException {
|
||||||
|
rs.first();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(expected = SQLFeatureNotSupportedException.class)
|
||||||
|
public void last() throws SQLException {
|
||||||
|
rs.last();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(expected = SQLFeatureNotSupportedException.class)
|
||||||
|
public void getRow() throws SQLException {
|
||||||
|
int row = rs.getRow();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(expected = SQLFeatureNotSupportedException.class)
|
||||||
|
public void absolute() throws SQLException {
|
||||||
|
rs.absolute(-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(expected = SQLFeatureNotSupportedException.class)
|
||||||
|
public void relative() throws SQLException {
|
||||||
|
rs.relative(-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(expected = SQLFeatureNotSupportedException.class)
|
||||||
|
public void previous() throws SQLException {
|
||||||
|
rs.previous();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void setFetchDirection() throws SQLException {
|
||||||
|
rs.setFetchDirection(ResultSet.FETCH_FORWARD);
|
||||||
|
Assert.assertEquals(ResultSet.FETCH_FORWARD, rs.getFetchDirection());
|
||||||
|
rs.setFetchDirection(ResultSet.FETCH_UNKNOWN);
|
||||||
|
Assert.assertEquals(ResultSet.FETCH_FORWARD, rs.getFetchDirection());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void getFetchDirection() throws SQLException {
|
||||||
|
Assert.assertEquals(ResultSet.FETCH_FORWARD, rs.getFetchDirection());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void setFetchSize() throws SQLException {
|
||||||
|
rs.setFetchSize(0);
|
||||||
|
Assert.assertEquals(0, rs.getFetchSize());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void getFetchSize() throws SQLException {
|
||||||
|
Assert.assertEquals(0, rs.getFetchSize());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void getType() throws SQLException {
|
||||||
|
Assert.assertEquals(ResultSet.TYPE_FORWARD_ONLY, rs.getType());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void getConcurrency() throws SQLException {
|
||||||
|
Assert.assertEquals(ResultSet.CONCUR_READ_ONLY, rs.getConcurrency());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(expected = SQLFeatureNotSupportedException.class)
|
||||||
|
public void rowUpdated() throws SQLException {
|
||||||
|
rs.rowUpdated();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(expected = SQLFeatureNotSupportedException.class)
|
||||||
|
public void rowInserted() throws SQLException {
|
||||||
|
rs.rowInserted();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(expected = SQLFeatureNotSupportedException.class)
|
||||||
|
public void rowDeleted() throws SQLException {
|
||||||
|
rs.rowDeleted();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(expected = SQLFeatureNotSupportedException.class)
|
||||||
|
public void updateNull() throws SQLException {
|
||||||
|
rs.updateNull("f1");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(expected = SQLFeatureNotSupportedException.class)
|
||||||
|
public void updateBoolean() throws SQLException {
|
||||||
|
rs.updateBoolean(1, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(expected = SQLFeatureNotSupportedException.class)
|
||||||
|
public void updateByte() throws SQLException {
|
||||||
|
rs.updateByte(1, new Byte("0"));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(expected = SQLFeatureNotSupportedException.class)
|
||||||
|
public void updateShort() throws SQLException {
|
||||||
|
rs.updateShort(1, new Short("0"));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(expected = SQLFeatureNotSupportedException.class)
|
||||||
|
public void updateInt() throws SQLException {
|
||||||
|
rs.updateInt(1, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(expected = SQLFeatureNotSupportedException.class)
|
||||||
|
public void updateLong() throws SQLException {
|
||||||
|
rs.updateLong(1, 1l);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(expected = SQLFeatureNotSupportedException.class)
|
||||||
|
public void updateFloat() throws SQLException {
|
||||||
|
rs.updateFloat(1, 1f);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(expected = SQLFeatureNotSupportedException.class)
|
||||||
|
public void updateDouble() throws SQLException {
|
||||||
|
rs.updateDouble(1, 1.0);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(expected = SQLFeatureNotSupportedException.class)
|
||||||
|
public void updateBigDecimal() throws SQLException {
|
||||||
|
rs.updateBigDecimal(1, new BigDecimal(1));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(expected = SQLFeatureNotSupportedException.class)
|
||||||
|
public void updateString() throws SQLException {
|
||||||
|
rs.updateString(1, "abc");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(expected = SQLFeatureNotSupportedException.class)
|
||||||
|
public void updateBytes() throws SQLException {
|
||||||
|
rs.updateBytes(1, new byte[]{});
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(expected = SQLFeatureNotSupportedException.class)
|
||||||
|
public void updateDate() throws SQLException {
|
||||||
|
rs.updateDate(1, new Date(System.currentTimeMillis()));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(expected = SQLFeatureNotSupportedException.class)
|
||||||
|
public void updateTime() throws SQLException {
|
||||||
|
rs.updateTime(1, new Time(System.currentTimeMillis()));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(expected = SQLFeatureNotSupportedException.class)
|
||||||
|
public void updateTimestamp() throws SQLException {
|
||||||
|
rs.updateTimestamp(1, new Timestamp(System.currentTimeMillis()));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(expected = SQLFeatureNotSupportedException.class)
|
||||||
|
public void updateAsciiStream() throws SQLException {
|
||||||
|
rs.updateAsciiStream(1, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(expected = SQLFeatureNotSupportedException.class)
|
||||||
|
public void updateBinaryStream() throws SQLException {
|
||||||
|
rs.updateBinaryStream(1, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(expected = SQLFeatureNotSupportedException.class)
|
||||||
|
public void updateCharacterStream() throws SQLException {
|
||||||
|
rs.updateCharacterStream(1, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(expected = SQLFeatureNotSupportedException.class)
|
||||||
|
public void updateObject() throws SQLException {
|
||||||
|
rs.updateObject(1, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(expected = SQLFeatureNotSupportedException.class)
|
||||||
|
public void insertRow() throws SQLException {
|
||||||
|
rs.insertRow();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(expected = SQLFeatureNotSupportedException.class)
|
||||||
|
public void updateRow() throws SQLException {
|
||||||
|
rs.updateRow();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(expected = SQLFeatureNotSupportedException.class)
|
||||||
|
public void deleteRow() throws SQLException {
|
||||||
|
rs.deleteRow();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(expected = SQLFeatureNotSupportedException.class)
|
||||||
|
public void refreshRow() throws SQLException {
|
||||||
|
rs.refreshRow();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(expected = SQLFeatureNotSupportedException.class)
|
||||||
|
public void cancelRowUpdates() throws SQLException {
|
||||||
|
rs.cancelRowUpdates();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(expected = SQLFeatureNotSupportedException.class)
|
||||||
|
public void moveToInsertRow() throws SQLException {
|
||||||
|
rs.moveToInsertRow();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void getStatement() throws SQLException {
|
||||||
|
Statement stmt = rs.getStatement();
|
||||||
|
Assert.assertNotNull(stmt);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(expected = SQLFeatureNotSupportedException.class)
|
||||||
|
public void moveToCurrentRow() throws SQLException {
|
||||||
|
rs.moveToCurrentRow();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(expected = SQLFeatureNotSupportedException.class)
|
||||||
|
public void getRef() throws SQLException {
|
||||||
|
rs.getRef(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(expected = SQLFeatureNotSupportedException.class)
|
||||||
|
public void getBlob() throws SQLException {
|
||||||
|
rs.getBlob("f1");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(expected = SQLFeatureNotSupportedException.class)
|
||||||
|
public void getClob() throws SQLException {
|
||||||
|
rs.getClob("f1");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(expected = SQLFeatureNotSupportedException.class)
|
||||||
|
public void getArray() throws SQLException {
|
||||||
|
rs.getArray("f1");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(expected = SQLFeatureNotSupportedException.class)
|
||||||
|
public void getURL() throws SQLException {
|
||||||
|
rs.getURL("f1");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(expected = SQLFeatureNotSupportedException.class)
|
||||||
|
public void updateRef() throws SQLException {
|
||||||
|
rs.updateRef("f1", null);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(expected = SQLFeatureNotSupportedException.class)
|
||||||
|
public void updateBlob() throws SQLException {
|
||||||
|
rs.updateBlob(1, (InputStream) null);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(expected = SQLFeatureNotSupportedException.class)
|
||||||
|
public void updateClob() throws SQLException {
|
||||||
|
rs.updateClob(1, (Reader) null);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(expected = SQLFeatureNotSupportedException.class)
|
||||||
|
public void updateArray() throws SQLException {
|
||||||
|
rs.updateArray(1, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(expected = SQLFeatureNotSupportedException.class)
|
||||||
|
public void getRowId() throws SQLException {
|
||||||
|
rs.getRowId("f1");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(expected = SQLFeatureNotSupportedException.class)
|
||||||
|
public void updateRowId() throws SQLException {
|
||||||
|
rs.updateRowId(1, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void getHoldability() throws SQLException {
|
||||||
|
Assert.assertEquals(ResultSet.HOLD_CURSORS_OVER_COMMIT, rs.getHoldability());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void isClosed() throws SQLException {
|
||||||
|
Assert.assertFalse(rs.isClosed());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(expected = SQLFeatureNotSupportedException.class)
|
||||||
|
public void updateNString() throws SQLException {
|
||||||
|
rs.updateNString(1, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(expected = SQLFeatureNotSupportedException.class)
|
||||||
|
public void updateNClob() throws SQLException {
|
||||||
|
rs.updateNClob(1, (Reader) null);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(expected = SQLFeatureNotSupportedException.class)
|
||||||
|
public void getNClob() throws SQLException {
|
||||||
|
rs.getNClob("f1");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(expected = SQLFeatureNotSupportedException.class)
|
||||||
|
public void getSQLXML() throws SQLException {
|
||||||
|
rs.getSQLXML("f1");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(expected = SQLFeatureNotSupportedException.class)
|
||||||
|
public void updateSQLXML() throws SQLException {
|
||||||
|
rs.updateSQLXML(1, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void getNString() throws SQLException {
|
||||||
|
String f10 = rs.getNString("f10");
|
||||||
|
Assert.assertEquals("涛思数据", f10);
|
||||||
|
f10 = rs.getNString(10);
|
||||||
|
Assert.assertEquals("涛思数据", f10);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(expected = SQLFeatureNotSupportedException.class)
|
||||||
|
public void getNCharacterStream() throws SQLException {
|
||||||
|
rs.getNCharacterStream("f1");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(expected = SQLFeatureNotSupportedException.class)
|
||||||
|
public void updateNCharacterStream() throws SQLException {
|
||||||
|
rs.updateNCharacterStream(1, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void unwrap() throws SQLException {
|
||||||
|
TSDBResultSet unwrap = rs.unwrap(TSDBResultSet.class);
|
||||||
|
Assert.assertNotNull(unwrap);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void isWrapperFor() throws SQLException {
|
||||||
|
Assert.assertTrue(rs.isWrapperFor(TSDBResultSet.class));
|
||||||
|
}
|
||||||
|
|
||||||
|
@BeforeClass
|
||||||
|
public static void beforeClass() {
|
||||||
|
try {
|
||||||
|
Class.forName("com.taosdata.jdbc.TSDBDriver");
|
||||||
|
conn = DriverManager.getConnection("jdbc:TAOS://" + host + ":6030/?user=root&password=taosdata");
|
||||||
|
stmt = conn.createStatement();
|
||||||
|
stmt.execute("create database if not exists restful_test");
|
||||||
|
stmt.execute("use restful_test");
|
||||||
|
stmt.execute("drop table if exists weather");
|
||||||
|
stmt.execute("create table if not exists weather(f1 timestamp, f2 int, f3 bigint, f4 float, f5 double, f6 binary(64), f7 smallint, f8 tinyint, f9 bool, f10 nchar(64))");
|
||||||
|
stmt.execute("insert into restful_test.weather values('2021-01-01 00:00:00.000', 1, 100, 3.1415, 3.1415926, 'abc', 10, 10, true, '涛思数据')");
|
||||||
|
rs = stmt.executeQuery("select * from restful_test.weather");
|
||||||
|
rs.next();
|
||||||
|
} catch (ClassNotFoundException | SQLException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@AfterClass
|
||||||
|
public static void afterClass() {
|
||||||
|
try {
|
||||||
|
if (rs != null)
|
||||||
|
rs.close();
|
||||||
|
if (stmt != null)
|
||||||
|
stmt.close();
|
||||||
|
if (conn != null)
|
||||||
|
conn.close();
|
||||||
|
} catch (SQLException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,42 @@
|
||||||
|
package com.taosdata.jdbc.cases;
|
||||||
|
|
||||||
|
import com.taosdata.jdbc.TSDBDriver;
|
||||||
|
import org.junit.Assert;
|
||||||
|
import org.junit.Before;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import java.sql.Connection;
|
||||||
|
import java.sql.DriverManager;
|
||||||
|
import java.sql.SQLException;
|
||||||
|
import java.util.Properties;
|
||||||
|
|
||||||
|
public class DriverAutoloadTest {
|
||||||
|
|
||||||
|
private Properties properties;
|
||||||
|
private String host = "127.0.0.1";
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testRestful() throws SQLException {
|
||||||
|
// Class.forName("com.taosdata.jdbc.rs.RestfulDriver");
|
||||||
|
final String url = "jdbc:TAOS-RS://" + host + ":6041/?user=root&password=taosdata";
|
||||||
|
Connection conn = DriverManager.getConnection(url, properties);
|
||||||
|
Assert.assertNotNull(conn);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testJni() throws SQLException {
|
||||||
|
final String url = "jdbc:TAOS://" + host + ":6030/?user=root&password=taosdata";
|
||||||
|
Connection conn = DriverManager.getConnection(url, properties);
|
||||||
|
Assert.assertNotNull(conn);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Before
|
||||||
|
public void before() {
|
||||||
|
properties = new Properties();
|
||||||
|
properties.setProperty(TSDBDriver.PROPERTY_KEY_CHARSET, "UTF-8");
|
||||||
|
properties.setProperty(TSDBDriver.PROPERTY_KEY_LOCALE, "en_US.UTF-8");
|
||||||
|
properties.setProperty(TSDBDriver.PROPERTY_KEY_TIME_ZONE, "UTC-8");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -14,7 +14,6 @@ import java.util.Random;
|
||||||
public class InsertDbwithoutUseDbTest {
|
public class InsertDbwithoutUseDbTest {
|
||||||
|
|
||||||
private static String host = "127.0.0.1";
|
private static String host = "127.0.0.1";
|
||||||
// private static String host = "master";
|
|
||||||
private static Properties properties;
|
private static Properties properties;
|
||||||
private static Random random = new Random(System.currentTimeMillis());
|
private static Random random = new Random(System.currentTimeMillis());
|
||||||
|
|
||||||
|
|
|
@ -10,8 +10,8 @@ import java.util.Properties;
|
||||||
|
|
||||||
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
|
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
|
||||||
public class UnsignedNumberRestfulTest {
|
public class UnsignedNumberRestfulTest {
|
||||||
|
|
||||||
private static final String host = "127.0.0.1";
|
private static final String host = "127.0.0.1";
|
||||||
// private static final String host = "master";
|
|
||||||
private static Connection conn;
|
private static Connection conn;
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|
|
@ -8,7 +8,6 @@ import java.sql.*;
|
||||||
public class AuthenticationTest {
|
public class AuthenticationTest {
|
||||||
|
|
||||||
private static final String host = "127.0.0.1";
|
private static final String host = "127.0.0.1";
|
||||||
// private static final String host = "master";
|
|
||||||
private static final String user = "root";
|
private static final String user = "root";
|
||||||
private static final String password = "taos?data";
|
private static final String password = "taos?data";
|
||||||
private Connection conn;
|
private Connection conn;
|
||||||
|
|
|
@ -12,7 +12,6 @@ import java.util.Properties;
|
||||||
public class RestfulConnectionTest {
|
public class RestfulConnectionTest {
|
||||||
|
|
||||||
private static final String host = "127.0.0.1";
|
private static final String host = "127.0.0.1";
|
||||||
// private static final String host = "master";
|
|
||||||
|
|
||||||
private static Connection conn;
|
private static Connection conn;
|
||||||
|
|
||||||
|
|
|
@ -10,7 +10,6 @@ import java.sql.*;
|
||||||
import java.util.Properties;
|
import java.util.Properties;
|
||||||
|
|
||||||
public class RestfulDatabaseMetaDataTest {
|
public class RestfulDatabaseMetaDataTest {
|
||||||
// private static final String host = "master";
|
|
||||||
private static final String host = "127.0.0.1";
|
private static final String host = "127.0.0.1";
|
||||||
private static final String url = "jdbc:TAOS-RS://" + host + ":6041/?user=root&password=taosdata";
|
private static final String url = "jdbc:TAOS-RS://" + host + ":6041/?user=root&password=taosdata";
|
||||||
private static Connection connection;
|
private static Connection connection;
|
||||||
|
|
|
@ -10,7 +10,6 @@ import java.util.Random;
|
||||||
public class RestfulJDBCTest {
|
public class RestfulJDBCTest {
|
||||||
|
|
||||||
private static final String host = "127.0.0.1";
|
private static final String host = "127.0.0.1";
|
||||||
// private static final String host = "master";
|
|
||||||
private static Connection connection;
|
private static Connection connection;
|
||||||
private Random random = new Random(System.currentTimeMillis());
|
private Random random = new Random(System.currentTimeMillis());
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,194 @@
|
||||||
|
package com.taosdata.jdbc.rs;
|
||||||
|
|
||||||
|
import com.taosdata.jdbc.TSDBConstants;
|
||||||
|
import org.junit.AfterClass;
|
||||||
|
import org.junit.Assert;
|
||||||
|
import org.junit.BeforeClass;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import java.sql.*;
|
||||||
|
|
||||||
|
public class RestfulParameterMetaDataTest {
|
||||||
|
|
||||||
|
private static final String host = "127.0.0.1";
|
||||||
|
private static Connection conn;
|
||||||
|
private static final String sql_insert = "insert into t1 values(?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
|
||||||
|
private static PreparedStatement pstmt_insert;
|
||||||
|
private static final String sql_select = "select * from t1 where ts > ? and ts <= ? and f1 >= ?";
|
||||||
|
private static PreparedStatement pstmt_select;
|
||||||
|
private static ParameterMetaData parameterMetaData_insert;
|
||||||
|
private static ParameterMetaData parameterMetaData_select;
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void getParameterCount() throws SQLException {
|
||||||
|
Assert.assertEquals(10, parameterMetaData_insert.getParameterCount());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void isNullable() throws SQLException {
|
||||||
|
Assert.assertEquals(ParameterMetaData.parameterNullableUnknown, parameterMetaData_insert.isNullable(1));
|
||||||
|
Assert.assertEquals(ParameterMetaData.parameterNullableUnknown, parameterMetaData_insert.isNullable(2));
|
||||||
|
Assert.assertEquals(ParameterMetaData.parameterNullableUnknown, parameterMetaData_insert.isNullable(3));
|
||||||
|
Assert.assertEquals(ParameterMetaData.parameterNullableUnknown, parameterMetaData_insert.isNullable(4));
|
||||||
|
Assert.assertEquals(ParameterMetaData.parameterNullableUnknown, parameterMetaData_insert.isNullable(5));
|
||||||
|
Assert.assertEquals(ParameterMetaData.parameterNullableUnknown, parameterMetaData_insert.isNullable(6));
|
||||||
|
Assert.assertEquals(ParameterMetaData.parameterNullableUnknown, parameterMetaData_insert.isNullable(7));
|
||||||
|
Assert.assertEquals(ParameterMetaData.parameterNullableUnknown, parameterMetaData_insert.isNullable(8));
|
||||||
|
Assert.assertEquals(ParameterMetaData.parameterNullableUnknown, parameterMetaData_insert.isNullable(9));
|
||||||
|
Assert.assertEquals(ParameterMetaData.parameterNullableUnknown, parameterMetaData_insert.isNullable(10));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void isSigned() throws SQLException {
|
||||||
|
Assert.assertEquals(false, parameterMetaData_insert.isSigned(1));
|
||||||
|
Assert.assertEquals(true, parameterMetaData_insert.isSigned(2));
|
||||||
|
Assert.assertEquals(true, parameterMetaData_insert.isSigned(3));
|
||||||
|
Assert.assertEquals(true, parameterMetaData_insert.isSigned(4));
|
||||||
|
Assert.assertEquals(true, parameterMetaData_insert.isSigned(5));
|
||||||
|
Assert.assertEquals(true, parameterMetaData_insert.isSigned(6));
|
||||||
|
Assert.assertEquals(true, parameterMetaData_insert.isSigned(7));
|
||||||
|
Assert.assertEquals(false, parameterMetaData_insert.isSigned(8));
|
||||||
|
Assert.assertEquals(false, parameterMetaData_insert.isSigned(9));
|
||||||
|
Assert.assertEquals(false, parameterMetaData_insert.isSigned(10));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void getPrecision() throws SQLException {
|
||||||
|
Assert.assertEquals(0, parameterMetaData_insert.getPrecision(1));
|
||||||
|
Assert.assertEquals(0, parameterMetaData_insert.getPrecision(2));
|
||||||
|
Assert.assertEquals(0, parameterMetaData_insert.getPrecision(3));
|
||||||
|
Assert.assertEquals(0, parameterMetaData_insert.getPrecision(4));
|
||||||
|
Assert.assertEquals(0, parameterMetaData_insert.getPrecision(5));
|
||||||
|
Assert.assertEquals(0, parameterMetaData_insert.getPrecision(6));
|
||||||
|
Assert.assertEquals(0, parameterMetaData_insert.getPrecision(7));
|
||||||
|
Assert.assertEquals(0, parameterMetaData_insert.getPrecision(8));
|
||||||
|
Assert.assertEquals(5, parameterMetaData_insert.getPrecision(9));
|
||||||
|
Assert.assertEquals(5, parameterMetaData_insert.getPrecision(10));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void getScale() throws SQLException {
|
||||||
|
Assert.assertEquals(0, parameterMetaData_insert.getScale(1));
|
||||||
|
Assert.assertEquals(0, parameterMetaData_insert.getScale(2));
|
||||||
|
Assert.assertEquals(0, parameterMetaData_insert.getScale(3));
|
||||||
|
Assert.assertEquals(0, parameterMetaData_insert.getScale(4));
|
||||||
|
Assert.assertEquals(0, parameterMetaData_insert.getScale(5));
|
||||||
|
Assert.assertEquals(0, parameterMetaData_insert.getScale(6));
|
||||||
|
Assert.assertEquals(0, parameterMetaData_insert.getScale(7));
|
||||||
|
Assert.assertEquals(0, parameterMetaData_insert.getScale(8));
|
||||||
|
Assert.assertEquals(0, parameterMetaData_insert.getScale(9));
|
||||||
|
Assert.assertEquals(0, parameterMetaData_insert.getScale(10));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void getParameterType() throws SQLException {
|
||||||
|
Assert.assertEquals(Types.TIMESTAMP, parameterMetaData_insert.getParameterType(1));
|
||||||
|
Assert.assertEquals(Types.INTEGER, parameterMetaData_insert.getParameterType(2));
|
||||||
|
Assert.assertEquals(Types.BIGINT, parameterMetaData_insert.getParameterType(3));
|
||||||
|
Assert.assertEquals(Types.FLOAT, parameterMetaData_insert.getParameterType(4));
|
||||||
|
Assert.assertEquals(Types.DOUBLE, parameterMetaData_insert.getParameterType(5));
|
||||||
|
Assert.assertEquals(Types.SMALLINT, parameterMetaData_insert.getParameterType(6));
|
||||||
|
Assert.assertEquals(Types.TINYINT, parameterMetaData_insert.getParameterType(7));
|
||||||
|
Assert.assertEquals(Types.BOOLEAN, parameterMetaData_insert.getParameterType(8));
|
||||||
|
Assert.assertEquals(Types.BINARY, parameterMetaData_insert.getParameterType(9));
|
||||||
|
Assert.assertEquals(Types.NCHAR, parameterMetaData_insert.getParameterType(10));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void getParameterTypeName() throws SQLException {
|
||||||
|
Assert.assertEquals(TSDBConstants.jdbcType2TaosTypeName(Types.TIMESTAMP), parameterMetaData_insert.getParameterTypeName(1));
|
||||||
|
Assert.assertEquals(TSDBConstants.jdbcType2TaosTypeName(Types.INTEGER), parameterMetaData_insert.getParameterTypeName(2));
|
||||||
|
Assert.assertEquals(TSDBConstants.jdbcType2TaosTypeName(Types.BIGINT), parameterMetaData_insert.getParameterTypeName(3));
|
||||||
|
Assert.assertEquals(TSDBConstants.jdbcType2TaosTypeName(Types.FLOAT), parameterMetaData_insert.getParameterTypeName(4));
|
||||||
|
Assert.assertEquals(TSDBConstants.jdbcType2TaosTypeName(Types.DOUBLE), parameterMetaData_insert.getParameterTypeName(5));
|
||||||
|
Assert.assertEquals(TSDBConstants.jdbcType2TaosTypeName(Types.SMALLINT), parameterMetaData_insert.getParameterTypeName(6));
|
||||||
|
Assert.assertEquals(TSDBConstants.jdbcType2TaosTypeName(Types.TINYINT), parameterMetaData_insert.getParameterTypeName(7));
|
||||||
|
Assert.assertEquals(TSDBConstants.jdbcType2TaosTypeName(Types.BOOLEAN), parameterMetaData_insert.getParameterTypeName(8));
|
||||||
|
Assert.assertEquals(TSDBConstants.jdbcType2TaosTypeName(Types.BINARY), parameterMetaData_insert.getParameterTypeName(9));
|
||||||
|
Assert.assertEquals(TSDBConstants.jdbcType2TaosTypeName(Types.NCHAR), parameterMetaData_insert.getParameterTypeName(10));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void getParameterClassName() throws SQLException {
|
||||||
|
Assert.assertEquals(Timestamp.class.getName(), parameterMetaData_insert.getParameterClassName(1));
|
||||||
|
Assert.assertEquals(Integer.class.getName(), parameterMetaData_insert.getParameterClassName(2));
|
||||||
|
Assert.assertEquals(Long.class.getName(), parameterMetaData_insert.getParameterClassName(3));
|
||||||
|
Assert.assertEquals(Float.class.getName(), parameterMetaData_insert.getParameterClassName(4));
|
||||||
|
Assert.assertEquals(Double.class.getName(), parameterMetaData_insert.getParameterClassName(5));
|
||||||
|
Assert.assertEquals(Short.class.getName(), parameterMetaData_insert.getParameterClassName(6));
|
||||||
|
Assert.assertEquals(Byte.class.getName(), parameterMetaData_insert.getParameterClassName(7));
|
||||||
|
Assert.assertEquals(Boolean.class.getName(), parameterMetaData_insert.getParameterClassName(8));
|
||||||
|
Assert.assertEquals(byte[].class.getName(), parameterMetaData_insert.getParameterClassName(9));
|
||||||
|
Assert.assertEquals(String.class.getName(), parameterMetaData_insert.getParameterClassName(10));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void getParameterMode() throws SQLException {
|
||||||
|
for (int i = 1; i <= parameterMetaData_insert.getParameterCount(); i++) {
|
||||||
|
int parameterMode = parameterMetaData_insert.getParameterMode(i);
|
||||||
|
Assert.assertEquals(ParameterMetaData.parameterModeUnknown, parameterMode);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void unwrap() throws SQLException {
|
||||||
|
RestfulParameterMetaData unwrap = parameterMetaData_insert.unwrap(RestfulParameterMetaData.class);
|
||||||
|
Assert.assertNotNull(unwrap);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void isWrapperFor() throws SQLException {
|
||||||
|
Assert.assertTrue(parameterMetaData_insert.isWrapperFor(RestfulParameterMetaData.class));
|
||||||
|
}
|
||||||
|
|
||||||
|
@BeforeClass
|
||||||
|
public static void beforeClass() {
|
||||||
|
try {
|
||||||
|
Class.forName("com.taosdata.jdbc.rs.RestfulDriver");
|
||||||
|
conn = DriverManager.getConnection("jdbc:TAOS-RS://" + host + ":6041/?user=root&password=taosdata");
|
||||||
|
try (Statement stmt = conn.createStatement()) {
|
||||||
|
stmt.execute("drop database if exists test_pstmt");
|
||||||
|
stmt.execute("create database if not exists test_pstmt");
|
||||||
|
stmt.execute("use test_pstmt");
|
||||||
|
stmt.execute("create table weather(ts timestamp, f1 int, f2 bigint, f3 float, f4 double, f5 smallint, f6 tinyint, f7 bool, f8 binary(64), f9 nchar(64)) tags(loc nchar(64))");
|
||||||
|
stmt.execute("create table t1 using weather tags('beijing')");
|
||||||
|
}
|
||||||
|
pstmt_insert = conn.prepareStatement(sql_insert);
|
||||||
|
|
||||||
|
pstmt_insert.setTimestamp(1, new Timestamp(System.currentTimeMillis()));
|
||||||
|
pstmt_insert.setObject(2, 111);
|
||||||
|
pstmt_insert.setObject(3, Long.MAX_VALUE);
|
||||||
|
pstmt_insert.setObject(4, 3.14159265354f);
|
||||||
|
pstmt_insert.setObject(5, Double.MAX_VALUE);
|
||||||
|
pstmt_insert.setObject(6, Short.MAX_VALUE);
|
||||||
|
pstmt_insert.setObject(7, Byte.MAX_VALUE);
|
||||||
|
pstmt_insert.setObject(8, true);
|
||||||
|
pstmt_insert.setObject(9, "hello".getBytes());
|
||||||
|
pstmt_insert.setObject(10, "Hello");
|
||||||
|
parameterMetaData_insert = pstmt_insert.getParameterMetaData();
|
||||||
|
|
||||||
|
pstmt_select = conn.prepareStatement(sql_select);
|
||||||
|
pstmt_select.setTimestamp(1, new Timestamp(System.currentTimeMillis()));
|
||||||
|
pstmt_select.setTimestamp(2, new Timestamp(System.currentTimeMillis() + 10000));
|
||||||
|
pstmt_select.setInt(3, 0);
|
||||||
|
parameterMetaData_select = pstmt_select.getParameterMetaData();
|
||||||
|
|
||||||
|
} catch (ClassNotFoundException | SQLException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@AfterClass
|
||||||
|
public static void afterClass() {
|
||||||
|
try {
|
||||||
|
if (pstmt_insert != null)
|
||||||
|
pstmt_insert.close();
|
||||||
|
if (pstmt_select != null)
|
||||||
|
pstmt_select.close();
|
||||||
|
if (conn != null)
|
||||||
|
conn.close();
|
||||||
|
} catch (SQLException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -5,11 +5,12 @@ import org.junit.Assert;
|
||||||
import org.junit.BeforeClass;
|
import org.junit.BeforeClass;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.Serializable;
|
||||||
import java.sql.*;
|
import java.sql.*;
|
||||||
|
|
||||||
public class RestfulPreparedStatementTest {
|
public class RestfulPreparedStatementTest {
|
||||||
private static final String host = "127.0.0.1";
|
private static final String host = "127.0.0.1";
|
||||||
// private static final String host = "master";
|
|
||||||
private static Connection conn;
|
private static Connection conn;
|
||||||
private static final String sql_insert = "insert into t1 values(?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
|
private static final String sql_insert = "insert into t1 values(?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
|
||||||
private static PreparedStatement pstmt_insert;
|
private static PreparedStatement pstmt_insert;
|
||||||
|
@ -38,48 +39,73 @@ public class RestfulPreparedStatementTest {
|
||||||
@Test
|
@Test
|
||||||
public void executeUpdate() throws SQLException {
|
public void executeUpdate() throws SQLException {
|
||||||
pstmt_insert.setTimestamp(1, new Timestamp(System.currentTimeMillis()));
|
pstmt_insert.setTimestamp(1, new Timestamp(System.currentTimeMillis()));
|
||||||
pstmt_insert.setFloat(2, 3.14f);
|
pstmt_insert.setFloat(4, 3.14f);
|
||||||
int result = pstmt_insert.executeUpdate();
|
int result = pstmt_insert.executeUpdate();
|
||||||
Assert.assertEquals(1, result);
|
Assert.assertEquals(1, result);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void setNull() throws SQLException {
|
public void setNull() throws SQLException {
|
||||||
pstmt_insert.setNull(2, Types.FLOAT);
|
pstmt_insert.setTimestamp(1, new Timestamp(System.currentTimeMillis()));
|
||||||
|
pstmt_insert.setNull(2, Types.INTEGER);
|
||||||
|
int result = pstmt_insert.executeUpdate();
|
||||||
|
Assert.assertEquals(1, result);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void setBoolean() throws SQLException {
|
public void setBoolean() throws SQLException {
|
||||||
pstmt_insert.setBoolean(2, true);
|
pstmt_insert.setTimestamp(1, new Timestamp(System.currentTimeMillis()));
|
||||||
|
pstmt_insert.setBoolean(8, true);
|
||||||
|
int ret = pstmt_insert.executeUpdate();
|
||||||
|
Assert.assertEquals(1, ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test(expected = SQLFeatureNotSupportedException.class)
|
@Test
|
||||||
public void setByte() throws SQLException {
|
public void setByte() throws SQLException {
|
||||||
pstmt_insert.setByte(1, (byte) 0x001);
|
pstmt_insert.setTimestamp(1, new Timestamp(System.currentTimeMillis()));
|
||||||
|
pstmt_insert.setByte(7, (byte) 0x001);
|
||||||
|
int ret = pstmt_insert.executeUpdate();
|
||||||
|
Assert.assertEquals(1, ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void setShort() {
|
public void setShort() throws SQLException {
|
||||||
|
pstmt_insert.setTimestamp(1, new Timestamp(System.currentTimeMillis()));
|
||||||
|
pstmt_insert.setShort(6, (short) 2);
|
||||||
|
int ret = pstmt_insert.executeUpdate();
|
||||||
|
Assert.assertEquals(1, ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void setInt() {
|
public void setInt() throws SQLException {
|
||||||
|
pstmt_insert.setTimestamp(1, new Timestamp(System.currentTimeMillis()));
|
||||||
|
pstmt_insert.setInt(2, 10086);
|
||||||
|
int ret = pstmt_insert.executeUpdate();
|
||||||
|
Assert.assertEquals(1, ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void setLong() {
|
public void setLong() throws SQLException {
|
||||||
|
pstmt_insert.setTimestamp(1, new Timestamp(System.currentTimeMillis()));
|
||||||
|
pstmt_insert.setLong(3, Long.MAX_VALUE);
|
||||||
|
int ret = pstmt_insert.executeUpdate();
|
||||||
|
Assert.assertEquals(1, ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void setFloat() {
|
public void setFloat() throws SQLException {
|
||||||
|
pstmt_insert.setTimestamp(1, new Timestamp(System.currentTimeMillis()));
|
||||||
|
pstmt_insert.setFloat(4, 3.14f);
|
||||||
|
int ret = pstmt_insert.executeUpdate();
|
||||||
|
Assert.assertEquals(1, ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void setDouble() {
|
public void setDouble() throws SQLException {
|
||||||
|
pstmt_insert.setTimestamp(1, new Timestamp(System.currentTimeMillis()));
|
||||||
|
pstmt_insert.setDouble(5, 3.14444);
|
||||||
|
int ret = pstmt_insert.executeUpdate();
|
||||||
|
Assert.assertEquals(1, ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test(expected = SQLFeatureNotSupportedException.class)
|
@Test(expected = SQLFeatureNotSupportedException.class)
|
||||||
|
@ -88,12 +114,56 @@ public class RestfulPreparedStatementTest {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void setString() {
|
public void setString() throws SQLException {
|
||||||
|
pstmt_insert.setTimestamp(1, new Timestamp(System.currentTimeMillis()));
|
||||||
|
pstmt_insert.setString(10, "aaaa");
|
||||||
|
boolean execute = pstmt_insert.execute();
|
||||||
|
Assert.assertFalse(execute);
|
||||||
|
|
||||||
|
pstmt_insert.setTimestamp(1, new Timestamp(System.currentTimeMillis()));
|
||||||
|
pstmt_insert.setString(10, new Person("john", 33, true).toString());
|
||||||
|
Assert.assertFalse(pstmt_insert.execute());
|
||||||
|
|
||||||
|
pstmt_insert.setTimestamp(1, new Timestamp(System.currentTimeMillis()));
|
||||||
|
pstmt_insert.setString(10, new Person("john", 33, true).toString().replaceAll("'", "\""));
|
||||||
|
Assert.assertFalse(pstmt_insert.execute());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test(expected = SQLFeatureNotSupportedException.class)
|
class Person implements Serializable {
|
||||||
public void setBytes() throws SQLException {
|
String name;
|
||||||
pstmt_insert.setBytes(1, new byte[]{});
|
int age;
|
||||||
|
boolean sex;
|
||||||
|
|
||||||
|
public Person(String name, int age, boolean sex) {
|
||||||
|
this.name = name;
|
||||||
|
this.age = age;
|
||||||
|
this.sex = sex;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "Person{" +
|
||||||
|
"name='" + name + '\'' +
|
||||||
|
", age=" + age +
|
||||||
|
", sex=" + sex +
|
||||||
|
'}';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void setBytes() throws SQLException, IOException {
|
||||||
|
pstmt_insert.setTimestamp(1, new Timestamp(System.currentTimeMillis()));
|
||||||
|
|
||||||
|
// ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
||||||
|
// ObjectOutputStream oos = new ObjectOutputStream(baos);
|
||||||
|
// oos.writeObject(new Person("john", 33, true));
|
||||||
|
// oos.flush();
|
||||||
|
// byte[] bytes = baos.toByteArray();
|
||||||
|
// pstmt_insert.setBytes(9, bytes);
|
||||||
|
|
||||||
|
pstmt_insert.setBytes(9, new Person("john", 33, true).toString().getBytes());
|
||||||
|
int ret = pstmt_insert.executeUpdate();
|
||||||
|
Assert.assertEquals(1, ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test(expected = SQLFeatureNotSupportedException.class)
|
@Test(expected = SQLFeatureNotSupportedException.class)
|
||||||
|
@ -107,8 +177,10 @@ public class RestfulPreparedStatementTest {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void setTimestamp() {
|
public void setTimestamp() throws SQLException {
|
||||||
//TODO
|
pstmt_insert.setTimestamp(1, new Timestamp(System.currentTimeMillis()));
|
||||||
|
int ret = pstmt_insert.executeUpdate();
|
||||||
|
Assert.assertEquals(1, ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test(expected = SQLFeatureNotSupportedException.class)
|
@Test(expected = SQLFeatureNotSupportedException.class)
|
||||||
|
@ -122,24 +194,69 @@ public class RestfulPreparedStatementTest {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void clearParameters() {
|
public void clearParameters() throws SQLException {
|
||||||
//TODO
|
pstmt_insert.clearParameters();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void setObject() throws SQLException {
|
public void setObject() throws SQLException {
|
||||||
pstmt_insert.setObject(1, System.currentTimeMillis());
|
pstmt_insert.setObject(1, new Timestamp(System.currentTimeMillis()));
|
||||||
//TODO
|
int ret = pstmt_insert.executeUpdate();
|
||||||
|
Assert.assertEquals(1, ret);
|
||||||
|
|
||||||
|
pstmt_insert.setTimestamp(1, new Timestamp(System.currentTimeMillis()));
|
||||||
|
pstmt_insert.setObject(2, 111);
|
||||||
|
ret = pstmt_insert.executeUpdate();
|
||||||
|
Assert.assertEquals(1, ret);
|
||||||
|
|
||||||
|
pstmt_insert.setTimestamp(1, new Timestamp(System.currentTimeMillis()));
|
||||||
|
pstmt_insert.setObject(3, Long.MAX_VALUE);
|
||||||
|
ret = pstmt_insert.executeUpdate();
|
||||||
|
Assert.assertEquals(1, ret);
|
||||||
|
|
||||||
|
pstmt_insert.setTimestamp(1, new Timestamp(System.currentTimeMillis()));
|
||||||
|
pstmt_insert.setObject(4, 3.14159265354f);
|
||||||
|
ret = pstmt_insert.executeUpdate();
|
||||||
|
Assert.assertEquals(1, ret);
|
||||||
|
|
||||||
|
pstmt_insert.setTimestamp(1, new Timestamp(System.currentTimeMillis()));
|
||||||
|
pstmt_insert.setObject(5, Double.MAX_VALUE);
|
||||||
|
ret = pstmt_insert.executeUpdate();
|
||||||
|
Assert.assertEquals(1, ret);
|
||||||
|
|
||||||
|
pstmt_insert.setTimestamp(1, new Timestamp(System.currentTimeMillis()));
|
||||||
|
pstmt_insert.setObject(6, Short.MAX_VALUE);
|
||||||
|
ret = pstmt_insert.executeUpdate();
|
||||||
|
Assert.assertEquals(1, ret);
|
||||||
|
|
||||||
|
pstmt_insert.setTimestamp(1, new Timestamp(System.currentTimeMillis()));
|
||||||
|
pstmt_insert.setObject(7, Byte.MAX_VALUE);
|
||||||
|
ret = pstmt_insert.executeUpdate();
|
||||||
|
Assert.assertEquals(1, ret);
|
||||||
|
|
||||||
|
pstmt_insert.setTimestamp(1, new Timestamp(System.currentTimeMillis()));
|
||||||
|
pstmt_insert.setObject(8, true);
|
||||||
|
ret = pstmt_insert.executeUpdate();
|
||||||
|
Assert.assertEquals(1, ret);
|
||||||
|
|
||||||
|
pstmt_insert.setTimestamp(1, new Timestamp(System.currentTimeMillis()));
|
||||||
|
pstmt_insert.setObject(9, "hello".getBytes());
|
||||||
|
ret = pstmt_insert.executeUpdate();
|
||||||
|
Assert.assertEquals(1, ret);
|
||||||
|
|
||||||
|
pstmt_insert.setTimestamp(1, new Timestamp(System.currentTimeMillis()));
|
||||||
|
pstmt_insert.setObject(10, "Hello");
|
||||||
|
ret = pstmt_insert.executeUpdate();
|
||||||
|
Assert.assertEquals(1, ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void execute() {
|
public void execute() throws SQLException {
|
||||||
//TODO
|
pstmt_insert.setTimestamp(1, new Timestamp(System.currentTimeMillis()));
|
||||||
}
|
int ret = pstmt_insert.executeUpdate();
|
||||||
|
Assert.assertEquals(1, ret);
|
||||||
|
|
||||||
@Test
|
executeQuery();
|
||||||
public void addBatch() {
|
|
||||||
//TODO:
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test(expected = SQLFeatureNotSupportedException.class)
|
@Test(expected = SQLFeatureNotSupportedException.class)
|
||||||
|
@ -180,8 +297,8 @@ public class RestfulPreparedStatementTest {
|
||||||
@Test
|
@Test
|
||||||
public void getParameterMetaData() throws SQLException {
|
public void getParameterMetaData() throws SQLException {
|
||||||
ParameterMetaData parameterMetaData = pstmt_insert.getParameterMetaData();
|
ParameterMetaData parameterMetaData = pstmt_insert.getParameterMetaData();
|
||||||
Assert.assertNull(parameterMetaData);
|
Assert.assertNotNull(parameterMetaData);
|
||||||
//TODO:
|
//TODO: modify the test case
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test(expected = SQLFeatureNotSupportedException.class)
|
@Test(expected = SQLFeatureNotSupportedException.class)
|
||||||
|
|
|
@ -10,7 +10,6 @@ import java.sql.*;
|
||||||
public class RestfulResultSetMetaDataTest {
|
public class RestfulResultSetMetaDataTest {
|
||||||
|
|
||||||
private static final String host = "127.0.0.1";
|
private static final String host = "127.0.0.1";
|
||||||
// private static final String host = "master";
|
|
||||||
|
|
||||||
private static Connection conn;
|
private static Connection conn;
|
||||||
private static Statement stmt;
|
private static Statement stmt;
|
||||||
|
|
|
@ -1,5 +1,8 @@
|
||||||
package com.taosdata.jdbc.rs;
|
package com.taosdata.jdbc.rs;
|
||||||
|
|
||||||
|
import com.google.common.primitives.Ints;
|
||||||
|
import com.google.common.primitives.Longs;
|
||||||
|
import com.google.common.primitives.Shorts;
|
||||||
import org.junit.AfterClass;
|
import org.junit.AfterClass;
|
||||||
import org.junit.Assert;
|
import org.junit.Assert;
|
||||||
import org.junit.BeforeClass;
|
import org.junit.BeforeClass;
|
||||||
|
@ -9,11 +12,12 @@ import java.io.InputStream;
|
||||||
import java.io.Reader;
|
import java.io.Reader;
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.sql.*;
|
import java.sql.*;
|
||||||
|
import java.text.ParseException;
|
||||||
|
import java.text.SimpleDateFormat;
|
||||||
|
|
||||||
public class RestfulResultSetTest {
|
public class RestfulResultSetTest {
|
||||||
|
|
||||||
private static final String host = "127.0.0.1";
|
private static final String host = "127.0.0.1";
|
||||||
// private static final String host = "master";
|
|
||||||
|
|
||||||
private static Connection conn;
|
private static Connection conn;
|
||||||
private static Statement stmt;
|
private static Statement stmt;
|
||||||
|
@ -88,24 +92,75 @@ public class RestfulResultSetTest {
|
||||||
Assert.assertEquals(3.1415926, f5, 0.0);
|
Assert.assertEquals(3.1415926, f5, 0.0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test(expected = SQLFeatureNotSupportedException.class)
|
@Test
|
||||||
public void getBigDecimal() throws SQLException {
|
public void getBigDecimal() throws SQLException {
|
||||||
rs.getBigDecimal("f1");
|
BigDecimal f1 = rs.getBigDecimal("f1");
|
||||||
|
Assert.assertEquals(1609430400000l, f1.longValue());
|
||||||
|
|
||||||
|
BigDecimal f2 = rs.getBigDecimal("f2");
|
||||||
|
Assert.assertEquals(1, f2.intValue());
|
||||||
|
|
||||||
|
BigDecimal f3 = rs.getBigDecimal("f3");
|
||||||
|
Assert.assertEquals(100l, f3.longValue());
|
||||||
|
|
||||||
|
BigDecimal f4 = rs.getBigDecimal("f4");
|
||||||
|
Assert.assertEquals(3.1415f, f4.floatValue(), 0.00000f);
|
||||||
|
|
||||||
|
BigDecimal f5 = rs.getBigDecimal("f5");
|
||||||
|
Assert.assertEquals(3.1415926, f5.doubleValue(), 0.0000000);
|
||||||
|
|
||||||
|
BigDecimal f7 = rs.getBigDecimal("f7");
|
||||||
|
Assert.assertEquals(10, f7.intValue());
|
||||||
|
|
||||||
|
BigDecimal f8 = rs.getBigDecimal("f8");
|
||||||
|
Assert.assertEquals(10, f8.intValue());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test(expected = SQLFeatureNotSupportedException.class)
|
@Test
|
||||||
public void getBytes() throws SQLException {
|
public void getBytes() throws SQLException {
|
||||||
rs.getBytes("f1");
|
byte[] f1 = rs.getBytes("f1");
|
||||||
|
Assert.assertEquals("2021-01-01 00:00:00.0", new String(f1));
|
||||||
|
|
||||||
|
byte[] f2 = rs.getBytes("f2");
|
||||||
|
Assert.assertEquals(1, Ints.fromByteArray(f2));
|
||||||
|
|
||||||
|
byte[] f3 = rs.getBytes("f3");
|
||||||
|
Assert.assertEquals(100l, Longs.fromByteArray(f3));
|
||||||
|
|
||||||
|
byte[] f4 = rs.getBytes("f4");
|
||||||
|
Assert.assertEquals(3.1415f, Float.valueOf(new String(f4)), 0.000000f);
|
||||||
|
|
||||||
|
byte[] f5 = rs.getBytes("f5");
|
||||||
|
Assert.assertEquals(3.1415926, Double.valueOf(new String(f5)), 0.000000f);
|
||||||
|
|
||||||
|
byte[] f6 = rs.getBytes("f6");
|
||||||
|
Assert.assertEquals("abc", new String(f6));
|
||||||
|
|
||||||
|
byte[] f7 = rs.getBytes("f7");
|
||||||
|
Assert.assertEquals((short) 10, Shorts.fromByteArray(f7));
|
||||||
|
|
||||||
|
byte[] f8 = rs.getBytes("f8");
|
||||||
|
Assert.assertEquals(1, f8.length);
|
||||||
|
Assert.assertEquals((byte) 10, f8[0]);
|
||||||
|
|
||||||
|
byte[] f9 = rs.getBytes("f9");
|
||||||
|
Assert.assertEquals("true", new String(f9));
|
||||||
|
|
||||||
|
byte[] f10 = rs.getBytes("f10");
|
||||||
|
Assert.assertEquals("涛思数据", new String(f10));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test(expected = SQLFeatureNotSupportedException.class)
|
@Test
|
||||||
public void getDate() throws SQLException {
|
public void getDate() throws SQLException, ParseException {
|
||||||
rs.getDate("f1");
|
Date f1 = rs.getDate("f1");
|
||||||
|
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
|
||||||
|
Assert.assertEquals(sdf.parse("2021-01-01"), f1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test(expected = SQLFeatureNotSupportedException.class)
|
@Test
|
||||||
public void getTime() throws SQLException {
|
public void getTime() throws SQLException {
|
||||||
rs.getTime("f1");
|
Time f1 = rs.getTime("f1");
|
||||||
|
Assert.assertEquals("00:00:00", f1.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@ -152,9 +207,49 @@ public class RestfulResultSetTest {
|
||||||
Assert.assertNotNull(meta);
|
Assert.assertNotNull(meta);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test(expected = SQLFeatureNotSupportedException.class)
|
@Test
|
||||||
public void getObject() throws SQLException {
|
public void getObject() throws SQLException, ParseException {
|
||||||
rs.getObject("f1");
|
Object f1 = rs.getObject("f1");
|
||||||
|
Assert.assertEquals(Timestamp.class, f1.getClass());
|
||||||
|
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss.sss");
|
||||||
|
java.util.Date date = sdf.parse("2021-01-01 00:00:00.000");
|
||||||
|
Assert.assertEquals(new Timestamp(date.getTime()), f1);
|
||||||
|
|
||||||
|
Object f2 = rs.getObject("f2");
|
||||||
|
Assert.assertEquals(Integer.class, f2.getClass());
|
||||||
|
Assert.assertEquals(1, f2);
|
||||||
|
|
||||||
|
Object f3 = rs.getObject("f3");
|
||||||
|
Assert.assertEquals(Long.class, f3.getClass());
|
||||||
|
Assert.assertEquals(100l, f3);
|
||||||
|
|
||||||
|
Object f4 = rs.getObject("f4");
|
||||||
|
Assert.assertEquals(Float.class, f4.getClass());
|
||||||
|
Assert.assertEquals(3.1415f, f4);
|
||||||
|
|
||||||
|
Object f5 = rs.getObject("f5");
|
||||||
|
Assert.assertEquals(Double.class, f5.getClass());
|
||||||
|
Assert.assertEquals(3.1415926, f5);
|
||||||
|
|
||||||
|
Object f6 = rs.getObject("f6");
|
||||||
|
Assert.assertEquals(byte[].class, f6.getClass());
|
||||||
|
Assert.assertEquals("abc", new String((byte[]) f6));
|
||||||
|
|
||||||
|
Object f7 = rs.getObject("f7");
|
||||||
|
Assert.assertEquals(Short.class, f7.getClass());
|
||||||
|
Assert.assertEquals((short) 10, f7);
|
||||||
|
|
||||||
|
Object f8 = rs.getObject("f8");
|
||||||
|
Assert.assertEquals(Byte.class, f8.getClass());
|
||||||
|
Assert.assertEquals((byte) 10, f8);
|
||||||
|
|
||||||
|
Object f9 = rs.getObject("f9");
|
||||||
|
Assert.assertEquals(Boolean.class, f9.getClass());
|
||||||
|
Assert.assertEquals(true, f9);
|
||||||
|
|
||||||
|
Object f10 = rs.getObject("f10");
|
||||||
|
Assert.assertEquals(String.class, f10.getClass());
|
||||||
|
Assert.assertEquals("涛思数据", f10);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test(expected = SQLException.class)
|
@Test(expected = SQLException.class)
|
||||||
|
|
|
@ -12,7 +12,6 @@ import java.util.UUID;
|
||||||
|
|
||||||
public class RestfulStatementTest {
|
public class RestfulStatementTest {
|
||||||
private static final String host = "127.0.0.1";
|
private static final String host = "127.0.0.1";
|
||||||
// private static final String host = "master";
|
|
||||||
private static Connection conn;
|
private static Connection conn;
|
||||||
private static Statement stmt;
|
private static Statement stmt;
|
||||||
|
|
||||||
|
|
|
@ -12,7 +12,6 @@ import java.sql.*;
|
||||||
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
|
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
|
||||||
public class SQLTest {
|
public class SQLTest {
|
||||||
private static final String host = "127.0.0.1";
|
private static final String host = "127.0.0.1";
|
||||||
// private static final String host = "master";
|
|
||||||
private static Connection connection;
|
private static Connection connection;
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.taosdata.jdbc</groupId>
|
<groupId>com.taosdata.jdbc</groupId>
|
||||||
<artifactId>taos-jdbcdriver</artifactId>
|
<artifactId>taos-jdbcdriver</artifactId>
|
||||||
<version>2.0.20</version>
|
<version>2.0.22</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue