gpt4 book ai didi

postgresql - 使用 JDBC ResultSet 设置 PostgreSQL 枚举

转载 作者:行者123 更新时间:2023-11-29 11:33:05 24 4
gpt4 key购买 nike

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

org.postgresql.util.PSQLException: ERROR: column "mycol" is of type mytable_mycol_enum but expression is of type character varying
Hint: You will need to rewrite or cast the expression.
Position: 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 理解它:

insert into mytable (mycol) values ('A'::mytable_mycol_enum)

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

HTH

关于postgresql - 使用 JDBC ResultSet 设置 PostgreSQL 枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4527311/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com