This is an automated email from the ASF dual-hosted git repository.

rong pushed a commit to branch fix-jdbc-getbytes
in repository https://gitbox.apache.org/repos/asf/iotdb.git

commit 400a60869b84c60e64920b632584d2fe7fbf26bc
Author: Steve Yurong Su <[email protected]>
AuthorDate: Wed Jun 5 12:40:46 2024 +0800

    JDBC: Fix ArrayOutOfBoundException when calling getBytes
---
 .../main/java/org/apache/iotdb/jdbc/IoTDBJDBCResultSet.java  | 12 ++++++++++--
 .../src/main/java/org/apache/iotdb/rpc/IoTDBRpcDataSet.java  |  8 +++++++-
 2 files changed, 17 insertions(+), 3 deletions(-)

diff --git 
a/iotdb-client/jdbc/src/main/java/org/apache/iotdb/jdbc/IoTDBJDBCResultSet.java 
b/iotdb-client/jdbc/src/main/java/org/apache/iotdb/jdbc/IoTDBJDBCResultSet.java
index 60fa9c98373..ab6009343aa 100644
--- 
a/iotdb-client/jdbc/src/main/java/org/apache/iotdb/jdbc/IoTDBJDBCResultSet.java
+++ 
b/iotdb-client/jdbc/src/main/java/org/apache/iotdb/jdbc/IoTDBJDBCResultSet.java
@@ -377,7 +377,11 @@ public class IoTDBJDBCResultSet implements ResultSet {
   @Override
   public byte[] getBytes(int columnIndex) throws SQLException {
     try {
-      return ioTDBRpcDataSet.getDataType(columnIndex).equals(TSDataType.BLOB)
+      final TSDataType dataType = ioTDBRpcDataSet.getDataType(columnIndex);
+      if (dataType == null) {
+        return null;
+      }
+      return dataType.equals(TSDataType.BLOB)
           ? ioTDBRpcDataSet.getBinary(columnIndex).getValues()
           : ioTDBRpcDataSet.getString(columnIndex).getBytes(charset);
     } catch (StatementExecutionException e) {
@@ -388,7 +392,11 @@ public class IoTDBJDBCResultSet implements ResultSet {
   @Override
   public byte[] getBytes(String columnName) throws SQLException {
     try {
-      return ioTDBRpcDataSet.getDataType(columnName).equals(TSDataType.BLOB)
+      final TSDataType dataType = ioTDBRpcDataSet.getDataType(columnName);
+      if (dataType == null) {
+        return null;
+      }
+      return dataType.equals(TSDataType.BLOB)
           ? ioTDBRpcDataSet.getBinary(columnName).getValues()
           : ioTDBRpcDataSet.getString(columnName).getBytes(charset);
     } catch (StatementExecutionException e) {
diff --git 
a/iotdb-client/service-rpc/src/main/java/org/apache/iotdb/rpc/IoTDBRpcDataSet.java
 
b/iotdb-client/service-rpc/src/main/java/org/apache/iotdb/rpc/IoTDBRpcDataSet.java
index c32e310b65f..014c5eedae1 100644
--- 
a/iotdb-client/service-rpc/src/main/java/org/apache/iotdb/rpc/IoTDBRpcDataSet.java
+++ 
b/iotdb-client/service-rpc/src/main/java/org/apache/iotdb/rpc/IoTDBRpcDataSet.java
@@ -528,7 +528,13 @@ public class IoTDBRpcDataSet {
   }
 
   public TSDataType getDataType(String columnName) throws 
StatementExecutionException {
-    return columnTypeDeduplicatedList.get(columnOrdinalMap.get(columnName) - 
START_INDEX);
+    if (columnName.equals(TIMESTAMP_STR)) {
+      return TSDataType.INT64;
+    }
+    final int index = columnOrdinalMap.get(columnName) - START_INDEX;
+    return index < 0 || index >= columnTypeDeduplicatedList.size()
+        ? null
+        : columnTypeDeduplicatedList.get(index);
   }
 
   public int findColumn(String columnName) {

Reply via email to