为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

猛跑小猪 2023-04-13 10:41:59
在java.sql.types类中,有一些类型很容易映射到 MySQL 类型。例如,VARCHAR在java.sql.types类中映射到VARCHARMySQL 中。但是,我不确定当 MySQL 中不存在类似类型时,java.sql.types 类中的类型如何JAVA_OBJECT映射到 MySQL 中的类型。在这种情况下,JDBC 会做什么?
查看完整描述

2 回答

?
FFIVE

TA贡献1797条经验 获得超6个赞

如果 JDBC 驱动程序不支持您尝试使用的类型 - 它会尝试将其映射到支持的最接近的可能数据类型。如果它不能做到这一点 -SQLException被抛出。

JDBC 只是一个用于处理数据库的接口。数据库可能不支持 API 的某些部分。在这种情况下会发生什么完全取决于驱动程序的实现。这对所有 JDBC 驱动程序都很常见。


查看完整回答
反对 回复 2023-04-13
?
慕的地8271018

TA贡献1796条经验 获得超4个赞

如您所知,每个 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;

}


查看完整回答
反对 回复 2023-04-13
  • 2 回答
  • 0 关注
  • 141 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信