CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/maven-com-mysql--mysql-connector-j

JDBC Type 4 driver for MySQL with X DevAPI support for document store operations

Overview
Eval results
Files

utilities.mddocs/

Utilities

Utility classes for string manipulation, time handling, encoding, and other common operations used throughout the driver.

WARNING: Most utilities documented in this file are internal implementation classes located in com.mysql.cj.util and other core-impl packages. These are NOT part of the official public API and may change without notice between versions. Use at your own risk. Only rely on public API interfaces from com.mysql.cj.jdbc and com.mysql.cj.xdevapi packages for stable, supported functionality.

Capabilities

String Utilities

Comprehensive string manipulation utilities.

package com.mysql.cj.util;

public class StringUtils {
    // String to byte array conversion
    public static String toString(byte[] bytes);
    public static String toString(byte[] bytes, int offset, int length);
    public static String toString(byte[] bytes, String encoding);
    public static String toString(byte[] bytes, int offset, int length, String encoding);
    
    public static byte[] getBytes(String s);
    public static byte[] getBytes(String s, String encoding);
    public static byte[] getBytes(char[] chars);
    public static byte[] getBytes(char[] chars, String encoding);

    // String checks
    public static boolean isNullOrEmpty(String str);
    public static boolean isEmptyOrWhitespaceOnly(String str);

    // Comment stripping
    public static String stripComments(String src, String stringOpens, String stringCloses,
                                      boolean slashStarComments, boolean slashSlashComments,
                                      boolean hashComments, boolean dashDashComments);

    // Case-insensitive operations
    public static int indexOfIgnoreCase(String searchIn, String searchFor);
    public static int indexOfIgnoreCase(int startingPosition, String searchIn, String searchFor);
    public static int lastIndexOfIgnoreCase(String searchIn, String searchFor);
    public static boolean startsWithIgnoreCase(String searchIn, String searchFor);
    public static boolean endsWithIgnoreCase(String searchIn, String searchFor);

    // String splitting
    public static List<String> split(String stringVal, String delimiter, boolean trim);
    public static String[] split(String stringVal, String delimiter, String markers,
                                String markerCloses, boolean trim);

    // String joining
    public static String join(Collection<?> collection, String delimiter);
    public static String join(Object[] array, String delimiter);

    // Escaping
    public static String escapeQuote(String x, String quoteChar);

    // Wildcards
    public static String wildcardCompareToRegex(String wildcard);

    // Padding
    public static String padString(String stringVal, int length);
    public static String safeTrim(String toTrim);

    // Other utilities
    public static boolean isValidIdChar(char c);
    public static String stripEnclosure(String source, String prefix, String suffix);
    public static String getUniqueSavepointId();
}

Usage:

// Convert strings to bytes with encoding
byte[] bytes = StringUtils.getBytes("Hello", "UTF-8");
String str = StringUtils.toString(bytes, "UTF-8");

// Check if string is null or empty
if (StringUtils.isNullOrEmpty(userName)) {
    throw new IllegalArgumentException("Username required");
}

// Case-insensitive search
int index = StringUtils.indexOfIgnoreCase("SELECT * FROM users", "from");

// Split string
List<String> parts = StringUtils.split("host1,host2,host3", ",", true);

// Join strings
String joined = StringUtils.join(parts, ", ");

// Strip SQL comments
String sql = "SELECT * FROM users /* comment */ WHERE id = 1";
String stripped = StringUtils.stripComments(sql, "'\"", "'\"", true, true, true, true);

String Inspector

Advanced string inspection with marker support.

package com.mysql.cj.util;

public class StringInspector {
    // Constructor - requires all parameters for full marker-aware parsing
    public StringInspector(String source, String openingMarkers, String closingMarkers,
                          String overridingMarkers, Set<SearchMode> defaultSearchMode);

    // Search methods
    public int indexOfIgnoreCase(String searchFor, Set<SearchMode> searchMode);

    public int indexOf(String searchFor);

    // Character checks
    public boolean startsWith(String searchFor);
    public char charAt(int index);

    // Length
    public int length();
}

public enum SearchMode {
    ALLOW_BACKSLASH_ESCAPE,
    SKIP_BETWEEN_MARKERS,
    SKIP_BLOCK_COMMENTS,
    SKIP_LINE_COMMENTS,
    SKIP_WHITE_SPACE;
}

Usage:

import java.util.EnumSet;

String sql = "SELECT * FROM users WHERE name = 'O''Reilly'";
// Full constructor with opening markers, closing markers, overriding markers, and search modes
StringInspector inspector = new StringInspector(sql, "'\"", "'\"", "",
    EnumSet.of(SearchMode.SKIP_BETWEEN_MARKERS));

// Find WHERE keyword ignoring string literals
int wherePos = inspector.indexOfIgnoreCase("WHERE",
    EnumSet.of(SearchMode.SKIP_BETWEEN_MARKERS));

Time Utilities

Date and time conversion utilities.

Note: TimeUtil is primarily an internal implementation class. For date/time conversion, most applications should use standard java.sql types and ResultSet methods (getTimestamp(), getDate(), getTime()) which handle conversions automatically.

package com.mysql.cj.util;

public class TimeUtil {
    // Time adjustment methods (internal use - adjust times between calendars/timezones)
    public static Time adjustTime(Time time, Calendar fromCal, Calendar toCal);
    public static Timestamp adjustTimestamp(Timestamp timestamp, Calendar fromCal, Calendar toCal);
    public static Timestamp adjustTimestamp(Timestamp timestamp, TimeZone fromTz, TimeZone toTz);

    // Timezone utilities
    public static TimeZone getCanonicalTimeZone(String timezoneStr);
}

Usage:

// Adjust timezone (internal implementation detail - normally handled by driver)
TimeZone serverTz = TimeZone.getTimeZone("UTC");
TimeZone clientTz = TimeZone.getTimeZone("America/New_York");
Timestamp ts = new Timestamp(System.currentTimeMillis());
Timestamp adjusted = TimeUtil.adjustTimestamp(ts, serverTz, clientTz);

Base64 Decoder

Base64 decoding utility.

package com.mysql.cj.util;

public class Base64Decoder {
    // Constructor
    public Base64Decoder();

    // Decode operations
    public byte[] decode(byte[] base64Data, int offset, int length);
}

Usage:

Base64Decoder decoder = new Base64Decoder();
String base64 = "SGVsbG8gV29ybGQ=";
byte[] base64Bytes = base64.getBytes("UTF-8");
byte[] decoded = decoder.decode(base64Bytes, 0, base64Bytes.length);
String text = new String(decoded, "UTF-8");  // "Hello World"

DNS SRV Utilities

DNS SRV record lookup and sorting.

package com.mysql.cj.util;

public class DnsSrv {
    // SRV record representation
    public static class SrvRecord {
        public String getHost();
        public int getPort();
        public int getPriority();
        public int getWeight();
    }

    // Lookup SRV records
    public static List<SrvRecord> lookupSrvRecords(String serviceName);

    // Sort SRV records according to RFC 2782
    public static List<SrvRecord> sortSrvRecords(List<SrvRecord> records);
}

Usage:

// Lookup MySQL SRV records
List<DnsSrv.SrvRecord> records = DnsSrv.lookupSrvRecords("_mysql._tcp.example.com");

// Sort by priority and weight
List<DnsSrv.SrvRecord> sorted = DnsSrv.sortSrvRecords(records);

for (DnsSrv.SrvRecord record : sorted) {
    System.out.println(record.getHost() + ":" + record.getPort() +
                      " (priority: " + record.getPriority() +
                      ", weight: " + record.getWeight() + ")");
}

LRU Cache

Least Recently Used cache implementation.

package com.mysql.cj.util;

public class LRUCache<K, V> {
    // Constructor
    public LRUCache(int maxElements);

    // Cache operations
    public void put(K key, V value);
    public V get(K key);
    public void clear();
    public int size();
    public void remove(K key);
}

Usage:

// Create LRU cache for prepared statements
LRUCache<String, PreparedStatement> stmtCache = new LRUCache<>(100);

// Cache prepared statement
stmtCache.put(sql, pstmt);

// Retrieve from cache
PreparedStatement cached = stmtCache.get(sql);
if (cached != null) {
    // Reuse cached statement
}

Data Type Utilities

Utilities for data type manipulation.

package com.mysql.cj.util;

public class DataTypeUtil {
    // JDBC type mapping
    public static int getJdbcType(String mysqlType);
    public static String getJavaClassName(int jdbcType);

    // Character encoding
    public static String getJavaEncodingFromMysqlCharset(String mysqlCharset);
    public static String getMysqlCharsetFromJavaEncoding(String javaEncoding);

    // Type checks
    public static boolean isNumericalType(int jdbcType);
    public static boolean isCharacterType(int jdbcType);
    public static boolean isBinaryType(int jdbcType);
    public static boolean isDateTimeType(int jdbcType);
}

Usage:

// Convert MySQL type to JDBC type
int jdbcType = DataTypeUtil.getJdbcType("VARCHAR");

// Get Java class for JDBC type
String javaClass = DataTypeUtil.getJavaClassName(Types.VARCHAR);

// Character set conversion
String javaEncoding = DataTypeUtil.getJavaEncodingFromMysqlCharset("utf8mb4");

Escape Tokenizer

Tokenizer for JDBC escape sequences.

package com.mysql.cj.util;

public class EscapeTokenizer {
    // Constructor
    public EscapeTokenizer(String s);

    // Tokenization
    public boolean hasMoreTokens();
    public String nextToken();
    public char getLastChar();
}

Usage:

String sql = "{call myproc(?, ?)}";
EscapeTokenizer tokenizer = new EscapeTokenizer(sql);

while (tokenizer.hasMoreTokens()) {
    String token = tokenizer.nextToken();
    // Process token
}

Lazy String

Lazy string evaluation for efficient memory usage.

package com.mysql.cj.util;

public class LazyString {
    // Constructor
    public LazyString(byte[] buffer, int offset, int length, String encoding);

    // String operations
    public String toString();
    public int length();
}

SASLprep

SASL string preparation (RFC 4013).

package com.mysql.cj.util;

public class SaslPrep {
    // Prepare string according to SASLprep profile
    public static String prepare(String str);
    public static String prepare(String str, boolean allowUnassigned);
}

Usage:

// Prepare password for SASL authentication
String password = "pässwörd";
String prepared = SaslPrep.prepare(password);

Sequential ID Lease

Sequential ID allocation for connection pools.

package com.mysql.cj.util;

public class SequentialIdLease {
    // Constructor
    public SequentialIdLease();

    // Allocate ID
    public int allocate();

    // Release ID
    public void release(int id);
}

Usage:

SequentialIdLease idLease = new SequentialIdLease();

// Allocate ID for new connection
int connId = idLease.allocate();

// Use connection...

// Release ID when connection closed
idLease.release(connId);

Utility Methods

General utility methods.

package com.mysql.cj.util;

public class Util {
    // Version checks
    public static boolean isJdbc4();
    public static boolean isJdbc42();

    // Stack trace
    public static String stackTraceToString(Throwable t);

    // MySQL edition checks
    public static boolean isCommunityEdition(String serverVersion);
    public static boolean isEnterpriseEdition(String serverVersion);

    // System properties
    public static String getSystemProperty(String key);

    // Class loading
    public static <T> T getInstance(String className, Class<T> interfaceClass);
}

Log Utilities

See logging-monitoring.md for LogUtils details.

Test Utilities

Utilities for testing (not for production use).

package com.mysql.cj.util;

public class TestUtils {
    // Get properties from test suite
    public static Properties getPropertiesFromTestsuiteUrl();

    // Build test URL
    public static String getBuildTestUrl(Properties props);

    // Get test connection
    public static Connection getConnection() throws SQLException;

    // Check if running in test environment
    public static boolean isRunningOnTestServer();
}

Per-VM Server Config Cache Factory

Factory for creating server configuration caches.

package com.mysql.cj.util;

public class PerVmServerConfigCacheFactory {
    // Get or create cache for server
    public static CacheAdapter<String, Map<String, String>> getCacheAdapter(String serverConfigCacheKey);
}

Install with Tessl CLI

npx tessl i tessl/maven-com-mysql--mysql-connector-j

docs

authentication.md

configuration.md

exceptions.md

index.md

interceptors.md

jdbc-advanced.md

jdbc-core.md

jdbc-high-availability.md

logging-monitoring.md

type-system.md

utilities.md

xdevapi-core.md

xdevapi-crud.md

xdevapi-sql.md

tile.json