猿问

JDBC如何映射java.sql.types类中MySQL中不存在的SQL类型?

java.sql.types类中,有一些类型很容易映射到 MySQL 类型。例如,VARCHARjava.sql.types类中映射到VARCHARMySQL 中。

但是,我不确定当 MySQL 中不存在类似类型时,java.sql.types 类中的类型如何JAVA_OBJECT映射到 MySQL 中的类型。在这种情况下,JDBC 会做什么?


猛跑小猪
浏览 142回答 2
2回答

FFIVE

如果 JDBC 驱动程序不支持您尝试使用的类型 - 它会尝试将其映射到支持的最接近的可能数据类型。如果它不能做到这一点 -SQLException被抛出。JDBC 只是一个用于处理数据库的接口。数据库可能不支持 API 的某些部分。在这种情况下会发生什么完全取决于驱动程序的实现。这对所有 JDBC 驱动程序都很常见。

慕的地8271018

如您所知,每个 RDBMS 都会发布其 JDBC 实现,而 JDBC 会尝试将 Java 的数据类型映射到数据库的数据类型。如果没有合适的映射选项,JDBC 将抛出java.sql.SQLException: Invalid column type.根据 MySQL 的文档,它不支持,但IBM Informix和OracleJAVA_OBJECT似乎支持它。同时,如果你想插入一个 Java 对象到一个表中,你可以将它映射到BLOB. 假设您使用以下命令创建了一个表:CREATE TABLE java_objects (   id INT AUTO_INCREMENT,   name varchar(128),   object_value BLOB,   primary key (id));您可以使用此示例代码插入您的对象。public long insertAnObject(String className, Object javaObject){    int id = -1;    try    {        PreparedStatement preparedStatement = connection.prepareStatement("INSERT INTO java_objects(name, object_value) VALUES (?, ?)");        // set input parameters        preparedStatement.setString(1, className);        preparedStatement.setObject(2, javaObject);        preparedStatement.executeUpdate();        // get the generated key for the id        ResultSet resultSet = preparedStatement.getGeneratedKeys();        if (resultSet.next())        {            id = resultSet.getInt(1);        }        resultSet.close();        preparedStatement.close();        return id;    } catch (SQLException e)    {        e.printStackTrace();    }    return id;}
随时随地看视频慕课网APP

相关分类

Java
我要回答