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

type-system.mddocs/

Type System

MySQL Connector/J type system for mapping between MySQL database types, JDBC types, and Java types.

Capabilities

MysqlType Enum

Comprehensive enumeration of MySQL data types with JDBC type mapping and conversion support.

package com.mysql.cj;

import java.sql.SQLType;

public enum MysqlType implements SQLType {
    // Numeric types - Integer
    BIT("BIT", java.sql.Types.BIT, Boolean.class),
    TINYINT("TINYINT", java.sql.Types.TINYINT, Integer.class),
    TINYINT_UNSIGNED("TINYINT UNSIGNED", java.sql.Types.SMALLINT, Integer.class),
    SMALLINT("SMALLINT", java.sql.Types.SMALLINT, Integer.class),
    SMALLINT_UNSIGNED("SMALLINT UNSIGNED", java.sql.Types.INTEGER, Integer.class),
    MEDIUMINT("MEDIUMINT", java.sql.Types.INTEGER, Integer.class),
    MEDIUMINT_UNSIGNED("MEDIUMINT UNSIGNED", java.sql.Types.INTEGER, Integer.class),
    INT("INT", java.sql.Types.INTEGER, Integer.class),
    INT_UNSIGNED("INT UNSIGNED", java.sql.Types.BIGINT, Long.class),
    BIGINT("BIGINT", java.sql.Types.BIGINT, Long.class),
    BIGINT_UNSIGNED("BIGINT UNSIGNED", java.sql.Types.BIGINT, java.math.BigInteger.class),

    // Numeric types - Floating point
    FLOAT("FLOAT", java.sql.Types.REAL, Float.class),
    FLOAT_UNSIGNED("FLOAT UNSIGNED", java.sql.Types.REAL, Float.class),
    DOUBLE("DOUBLE", java.sql.Types.DOUBLE, Double.class),
    DOUBLE_UNSIGNED("DOUBLE UNSIGNED", java.sql.Types.DOUBLE, Double.class),
    DECIMAL("DECIMAL", java.sql.Types.DECIMAL, java.math.BigDecimal.class),
    DECIMAL_UNSIGNED("DECIMAL UNSIGNED", java.sql.Types.DECIMAL, java.math.BigDecimal.class),

    // Boolean type
    BOOLEAN("BOOLEAN", java.sql.Types.BOOLEAN, Boolean.class),

    // Date and time types
    DATE("DATE", java.sql.Types.DATE, java.sql.Date.class),
    TIME("TIME", java.sql.Types.TIME, java.sql.Time.class),
    DATETIME("DATETIME", java.sql.Types.TIMESTAMP, java.sql.Timestamp.class),
    TIMESTAMP("TIMESTAMP", java.sql.Types.TIMESTAMP, java.sql.Timestamp.class),
    YEAR("YEAR", java.sql.Types.DATE, java.sql.Date.class),

    // String types
    CHAR("CHAR", java.sql.Types.CHAR, String.class),
    VARCHAR("VARCHAR", java.sql.Types.VARCHAR, String.class),
    TINYTEXT("TINYTEXT", java.sql.Types.VARCHAR, String.class),
    TEXT("TEXT", java.sql.Types.LONGVARCHAR, String.class),
    MEDIUMTEXT("MEDIUMTEXT", java.sql.Types.LONGVARCHAR, String.class),
    LONGTEXT("LONGTEXT", java.sql.Types.LONGVARCHAR, String.class),

    // Binary types
    BINARY("BINARY", java.sql.Types.BINARY, byte[].class),
    VARBINARY("VARBINARY", java.sql.Types.VARBINARY, byte[].class),
    TINYBLOB("TINYBLOB", java.sql.Types.VARBINARY, byte[].class),
    BLOB("BLOB", java.sql.Types.LONGVARBINARY, byte[].class),
    MEDIUMBLOB("MEDIUMBLOB", java.sql.Types.LONGVARBINARY, byte[].class),
    LONGBLOB("LONGBLOB", java.sql.Types.LONGVARBINARY, byte[].class),

    // Special types
    JSON("JSON", java.sql.Types.LONGVARCHAR, String.class),
    ENUM("ENUM", java.sql.Types.CHAR, String.class),
    SET("SET", java.sql.Types.CHAR, String.class),
    GEOMETRY("GEOMETRY", java.sql.Types.BINARY, byte[].class),
    VECTOR("VECTOR", java.sql.Types.LONGVARBINARY, byte[].class),

    // Null and unknown
    NULL("NULL", java.sql.Types.NULL, Void.class),
    UNKNOWN("UNKNOWN", java.sql.Types.OTHER, Object.class);

    // Primary public API methods (commonly used)
    public String getName();
    public int getJdbcType();
    public String getClassName();

    public static MysqlType getByName(String mysqlTypeName);
    public static MysqlType getByJdbcType(int jdbcType);

    // Advanced/internal methods (protocol-level, rarely needed by applications)
    public Integer getVendorTypeNumber();
    public boolean isDecimal();
    public Integer getAllowedFlags();
    public long getPrecision();
    public String getCreateParams();
    public static boolean isBinary(MysqlType mysqlType);
    public static boolean supportsConvert(int fromType, int toType);
}

Usage:

import com.mysql.cj.MysqlType;
import java.sql.PreparedStatement;

// Get MysqlType by name
MysqlType type = MysqlType.getByName("VARCHAR");
System.out.println("JDBC Type: " + type.getJdbcType());
System.out.println("Java Class: " + type.getClassName());

// Use with PreparedStatement.setNull()
PreparedStatement pstmt = conn.prepareStatement("INSERT INTO users (name, age) VALUES (?, ?)");
pstmt.setNull(1, MysqlType.VARCHAR);

// Check type properties
if (MysqlType.INT.isDecimal()) {
    // Handle numeric type
}

// Check conversion support
boolean canConvert = MysqlType.supportsConvert(
    java.sql.Types.VARCHAR,
    java.sql.Types.INTEGER
);

Field Flags

Note: These are internal protocol-level constants within the MysqlType enum, not part of the standard public API. They are package-private and used internally by the driver for MySQL protocol communication. Most applications will not need to use these directly.

package com.mysql.cj;

// Internal protocol constants (package-private)
public enum MysqlType {
    // ... enum constants ...

    // Field flags (internal use)
    static final int FIELD_FLAG_NOT_NULL = 1;
    static final int FIELD_FLAG_PRIMARY_KEY = 2;
    static final int FIELD_FLAG_UNIQUE_KEY = 4;
    static final int FIELD_FLAG_MULTIPLE_KEY = 8;
    static final int FIELD_FLAG_BLOB = 16;
    static final int FIELD_FLAG_UNSIGNED = 32;
    static final int FIELD_FLAG_ZEROFILL = 64;
    static final int FIELD_FLAG_BINARY = 128;
    static final int FIELD_FLAG_ENUM = 256;
    static final int FIELD_FLAG_AUTO_INCREMENT = 512;
    static final int FIELD_FLAG_TIMESTAMP = 1024;
    static final int FIELD_FLAG_SET = 2048;
    static final int FIELD_FLAG_NO_DEFAULT_VALUE = 4096;
    static final int FIELD_FLAG_ON_UPDATE_NOW = 8192;
    static final int FIELD_FLAG_NUM = 32768;
}

Protocol Type Numbers

Note: These are internal protocol-level constants used by the driver for MySQL wire protocol communication. They are package-private and rarely needed by application code. Most applications should use the MysqlType enum constants instead.

package com.mysql.cj;

// Internal protocol constants (package-private)
public enum MysqlType {
    // ... enum constants ...

    // Protocol type numbers (internal use)
    static final int FIELD_TYPE_DECIMAL = 0;
    static final int FIELD_TYPE_TINY = 1;
    static final int FIELD_TYPE_SHORT = 2;
    static final int FIELD_TYPE_LONG = 3;
    static final int FIELD_TYPE_FLOAT = 4;
    static final int FIELD_TYPE_DOUBLE = 5;
    static final int FIELD_TYPE_NULL = 6;
    static final int FIELD_TYPE_TIMESTAMP = 7;
    static final int FIELD_TYPE_LONGLONG = 8;
    static final int FIELD_TYPE_INT24 = 9;
    static final int FIELD_TYPE_DATE = 10;
    static final int FIELD_TYPE_TIME = 11;
    static final int FIELD_TYPE_DATETIME = 12;
    static final int FIELD_TYPE_YEAR = 13;
    static final int FIELD_TYPE_VARCHAR = 15;
    static final int FIELD_TYPE_BIT = 16;
    static final int FIELD_TYPE_JSON = 245;
    static final int FIELD_TYPE_NEWDECIMAL = 246;
    static final int FIELD_TYPE_ENUM = 247;
    static final int FIELD_TYPE_SET = 248;
    static final int FIELD_TYPE_TINY_BLOB = 249;
    static final int FIELD_TYPE_MEDIUM_BLOB = 250;
    static final int FIELD_TYPE_LONG_BLOB = 251;
    static final int FIELD_TYPE_BLOB = 252;
    static final int FIELD_TYPE_VAR_STRING = 253;
    static final int FIELD_TYPE_STRING = 254;
    static final int FIELD_TYPE_GEOMETRY = 255;
}

Charset Mapping

Note: CharsetMapping is an internal implementation class with package-private methods. Most applications should handle charset conversions automatically through connection properties (characterEncoding, connectionCollation) rather than calling CharsetMapping directly.

Charset constants and limited static accessor methods for collation and encoding mappings.

package com.mysql.cj;

public class CharsetMapping {
    // Charset name constants (public static final Strings)
    public static final String MYSQL_CHARSET_NAME_utf8mb4 = "utf8mb4";
    public static final String MYSQL_CHARSET_NAME_utf8mb3 = "utf8mb3";
    public static final String MYSQL_CHARSET_NAME_latin1 = "latin1";
    // ... and many more charset name constants

    // Internal static methods (package-private - not part of public API)
    // Most charset conversion is handled automatically by the driver
    // Use connection properties: characterEncoding, connectionCollation
}

Usage:

// For most applications, character encoding is handled automatically via connection properties
String url = "jdbc:mysql://localhost:3306/mydb?characterEncoding=UTF-8";
Connection conn = DriverManager.getConnection(url, "user", "pass");

// Or use charset name constants if needed
String charset = CharsetMapping.MYSQL_CHARSET_NAME_utf8mb4;

Server Version

Representation and comparison of MySQL server versions.

package com.mysql.cj;

public class ServerVersion implements Comparable<ServerVersion> {
    // Constructors
    public ServerVersion(int major, int minor, int subminor);
    public ServerVersion(String completeVersion, int major, int minor, int subminor);

    // Version components
    public int getMajor();
    public int getMinor();
    public int getSubminor();

    // String representation
    public String toString();

    // Comparison
    public boolean meetsMinimum(ServerVersion version);
    public int compareTo(ServerVersion other);

    // Static factory (parses version string and creates ServerVersion)
    public static ServerVersion parseVersion(String versionString);
}

Usage:

import com.mysql.cj.ServerVersion;

// Create version using numeric components
ServerVersion v1 = new ServerVersion(8, 0, 33);
System.out.println("Major: " + v1.getMajor()); // 8
System.out.println("Minor: " + v1.getMinor()); // 0
System.out.println("Subminor: " + v1.getSubminor()); // 33

// Or parse version string using static factory
ServerVersion v2 = ServerVersion.parseVersion("8.0.33-MySQL");

// Check minimum version
ServerVersion required = new ServerVersion(8, 0, 0);
if (v2.meetsMinimum(required)) {
    System.out.println("Server version is compatible");
}

// Compare versions
int comparison = v1.compareTo(v2);
System.out.println("Comparison: " + comparison); // 0 (equal)

Constants

Global constants used throughout the driver.

package com.mysql.cj;

public class Constants {
    // Version information
    public static final String CJ_NAME = "MySQL Connector/J";
    public static final String CJ_FULL_NAME = "mysql-connector-j";
    public static final String CJ_VERSION = "9.2.0";
    public static final String CJ_MAJOR_VERSION = "9";
    public static final String CJ_MINOR_VERSION = "2";
    public static final String CJ_LICENSE = "GPL-2.0 with FOSS exception";

    // Character encoding
    public static final String UTF8MB4 = "utf8mb4";
    public static final String UTF8MB3 = "utf8mb3";

    // Buffer sizes
    public static final int IO_BUFFER_SIZE = 16384;

    // Time constants
    public static final long MILLIS_I18N = 1000L;
    public static final long SECONDS_I18N = 1L;

    // SQL states
    public static final String SQL_STATE_GENERAL_ERROR = "HY000";
    public static final String SQL_STATE_COMMUNICATION_LINK_FAILURE = "08S01";
    public static final String SQL_STATE_ILLEGAL_ARGUMENT = "S1009";
    public static final String SQL_STATE_MEMORY_ALLOCATION_ERROR = "S1001";
    public static final String SQL_STATE_CONNECTION_NOT_OPEN = "08003";
    public static final String SQL_STATE_CONNECTION_IN_USE = "08002";
    public static final String SQL_STATE_CONNECTION_REJECTED = "08004";
    public static final String SQL_STATE_CONNECTION_FAILURE = "08006";
    public static final String SQL_STATE_TRANSACTION_RESOLUTION_UNKNOWN = "08007";
    public static final String SQL_STATE_INVALID_AUTH_SPEC = "28000";
    public static final String SQL_STATE_INVALID_TRANSACTION_STATE = "25000";
    public static final String SQL_STATE_FEATURE_NOT_SUPPORTED = "0A000";
    public static final String SQL_STATE_INVALID_COLUMN_NUMBER = "S1002";
    public static final String SQL_STATE_DRIVER_NOT_CAPABLE = "S1C00";
    public static final String SQL_STATE_TIMEOUT_EXPIRED = "S1T00";
    public static final String SQL_STATE_CLI_SPECIFIC_CONDITION = "HY000";
}

Messages

Internationalized message strings and resource bundles.

package com.mysql.cj;

public class Messages {
    // Get localized message
    public static String getString(String key);
    public static String getString(String key, Object[] args);

    // Check if key exists
    public static boolean containsKey(String key);
}

Usage:

import com.mysql.cj.Messages;

// Get error message
String msg = Messages.getString("ConnectionImpl.UnableToConnect");
System.out.println(msg);

// Get parameterized message
String paramMsg = Messages.getString(
    "ConnectionImpl.BadURL",
    new Object[] { "invalid-url" }
);
System.out.println(paramMsg);

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