【问题标题】:Setting PostgreSQL enums using a JDBC ResultSet使用 JDBC ResultSet 设置 PostgreSQL 枚举
【发布时间】:2011-05-30 11:08:14
【问题描述】:

我正在尝试将数据从 MySQL 数据库复制到等效的 PostgreSQL 数据库,并使用 JDBC 通过 Java 进行加载/插入。每当我尝试复制枚举列时都会收到此错误:

org.postgresql.util.PSQLException:错误:列“mycol”的类型为 mytable_mycol_enum,但表达式的类型为字符变
提示:您需要重写或转换表达式。
位置:194

Java 代码(简化和匿名):

Class.forName("com.mysql.jdbc.Driver").newInstance();
Connection mysqlConn = DriverManager.getConnection(
    "jdbc:mysql://localhost/mysqldb", "user", "pass");
Class.forName("org.postgresql.Driver").newInstance();
Connection pgConn = DriverManager.getConnection(
    "jdbc:postgresql://othercomp/pgdb", "user", "pass");

Statement selStatement = mysqlConn.createStatement();
ResultSet selSet = selStatement.executeQuery("SELECT * FROM mytable");

Statement insStatement = pgConn.createStatement(
    ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_UPDATABLE);
Resultset insSet = insStatement.executeQuery("SELECT * FROM mytable WHERE 0=1");
insSet.moveToInsertRow();

while(selSet.next())
{
    ResultSetMetaData metaData = selSet.getMetaData();
    for (int i = 1; i <= metaData.getColumnCount(); i++)
    {
        String colName = metaData.getColumnName(i);
        Object obj = selSet.getObject(colName);
        insertSet.updateObject(colName, obj);
    }
    insertSet.insertRow();
}

这适用于没有枚举列的表,但是

在 MySQL 中,我有一个 mycol 类型的列 enum('A','B','C')

在 PostgreSQL 中,我有 mycol 类型的 mytable_mycol_enumCREATE TYPE mytable_mycol_enum AS ENUM ('A','B','C')

如何设置枚举值?

【问题讨论】:

    标签: postgresql jdbc


    【解决方案1】:

    你必须转换值,以便 postgresql 理解它:

    插入 mytable (mycol) 值 ('A'::mytable_mycol_enum)

    您可能必须使用命名插入语句,而不是示例中的通用语句。另外,先在psql中试试看是否有效。

    HTH

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-17
      • 2023-03-31
      • 1970-01-01
      • 1970-01-01
      • 2014-01-01
      • 1970-01-01
      相关资源
      最近更新 更多