# HG changeset patch # User Martin van Dinther <martin.van.dinther@monetdbsolutions.com> # Date 1675351643 -3600 # Node ID 0a22044eee9c1b84fb98af47eb877124a29f92ac # Parent 55c14e65b4be06ac65ec13f3500546d810227db7 Optimize setBytes() implementation. For the 16 hex codes use a char[] and direct array indexing instead of a String and calling charAt(). diff --git a/src/main/java/org/monetdb/jdbc/MonetPreparedStatement.java b/src/main/java/org/monetdb/jdbc/MonetPreparedStatement.java --- a/src/main/java/org/monetdb/jdbc/MonetPreparedStatement.java +++ b/src/main/java/org/monetdb/jdbc/MonetPreparedStatement.java @@ -764,7 +764,7 @@ public class MonetPreparedStatement setValue(parameterIndex, Byte.toString(x)); } - static final String HEXES = "0123456789ABCDEF"; + static final char[] HEXES = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'}; /** * Sets the designated parameter to the given Java array of bytes. The * driver converts this to an SQL VARBINARY or LONGVARBINARY (depending @@ -787,8 +787,9 @@ public class MonetPreparedStatement hex.append("blob '"); // add a casting prefix // convert the bytes into hex codes for (int i = 0; i < len; i++) { - hex.append(HEXES.charAt((x[i] & 0xF0) >> 4)) - .append(HEXES.charAt((x[i] & 0x0F))); + byte b = x[i]; + hex.append(HEXES[(b & 0xF0) >> 4]) + .append(HEXES[(b & 0x0F)]); } hex.append("'"); // end of hex string value setValue(parameterIndex, hex.toString());