簡體   English   中英

使用JDBC ResultSet設置PostgreSQL枚舉

[英]Setting PostgreSQL enums using a JDBC ResultSet

我正在嘗試將數據從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中,我有一個enum('A','B','C')類型的列mycol enum('A','B','C')

在PostgreSQL中,我有mycol類型mytable_mycol_enum其中包含CREATE TYPE mytable_mycol_enum AS ENUM ('A','B','C')

如何設置枚舉值?

你必須轉換值,以便postgresql理解它:

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

您可能必須使用命名的insert語句,而不是示例中的通用語句。 另外,首先在psql中嘗試查看它是否有效。

HTH

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM