Babelfish for Aurora Postgresql未返回生成的行ID

发布于 2025-02-13 16:55:03 字数 2401 浏览 1 评论 0原文

我们最近将SQL Server数据库转换为AWS Aurora PostgreSQL(v.13.6)。

我们正在使用 babelfish for Aurora PostgreSQL与Java 8&amp&amp and java&amp&amp in ; JDBC& SQL Server驱动程序。在测试时,我们发现Babelfish不会在SQL插入语句上返回生成的行ID(下面代码)。 如何解决此问题?

SQL Server驱动程序:

<dependency>
    <groupId>com.microsoft.sqlserver</groupId>
    <artifactId>mssql-jdbc</artifactId>
    <version>10.2.1.jre8</version>
 </dependency>

但是,使用PostgreSQL URL&amp; Postgres驱动程序。 (返回生成的行ID)

Postgres驱动程序:

<dependency>
    <groupId>org.postgresql</groupId>
    <artifactId>postgresql</artifactId>
    <version>42.4.0</version>
</dependency>

测试代码:

    private void testInsert(String dbUrl, String sql) {
        logger.debug("dbUrl: {}", dbUrl);
        try (Connection conn = DriverManager.getConnection(
                dbUrl, DBUtil.DB_USERNAME, DBUtil.DB_PASSWORD);
             PreparedStatement ps = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS)) {
            setValues(ps);
            conn.setAutoCommit(false); // begin Transaction
            logger.debug("executeUpdate: {}", sql);

            int rows = ps.executeUpdate();

            logger.debug("rows: {}", rows);
            
            try (ResultSet rs = ps.getGeneratedKeys()) {
                logger.debug("rs: {}", rs);
                if (rs.next()) {
                    Long id = rs.getLong(1);
                    logger.debug("id: {}", id);
                }
                else {
                    logger.debug("ResultSet is empty");
                }
            }
          
            conn.rollback();
 //           conn.commit();
        } catch (SQLException e) {
            logger.error(null, e);
        }
    }

输出:

# results with Babelfish URL & SQL Server driver: (returns 0 for row ID)
rows: 1
rs: SQLServerResultSet:1
id: 0

# results with PostgreSQL URL & postgres driver: (returns the row ID)
rows: 1
rs: org.postgresql.jdbc.PgResultSet@2aceadd4
id: 1548

We recently converted our SQL Server database to AWS Aurora PostgreSQL(v.13.6).

We're using Babelfish for Aurora PostgreSQL to connect to the database with Java 8 & JDBC & SQL Server driver. While testing, we discovered that Babelfish does NOT return generated row id on SQL insert statements (code below). How can this be fixed?

SQL Server driver:

<dependency>
    <groupId>com.microsoft.sqlserver</groupId>
    <artifactId>mssql-jdbc</artifactId>
    <version>10.2.1.jre8</version>
 </dependency>

However, the same test code works when using the PostgreSQL URL & postgres driver. (returns the generated row id)

Postgres driver:

<dependency>
    <groupId>org.postgresql</groupId>
    <artifactId>postgresql</artifactId>
    <version>42.4.0</version>
</dependency>

Test code:

    private void testInsert(String dbUrl, String sql) {
        logger.debug("dbUrl: {}", dbUrl);
        try (Connection conn = DriverManager.getConnection(
                dbUrl, DBUtil.DB_USERNAME, DBUtil.DB_PASSWORD);
             PreparedStatement ps = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS)) {
            setValues(ps);
            conn.setAutoCommit(false); // begin Transaction
            logger.debug("executeUpdate: {}", sql);

            int rows = ps.executeUpdate();

            logger.debug("rows: {}", rows);
            
            try (ResultSet rs = ps.getGeneratedKeys()) {
                logger.debug("rs: {}", rs);
                if (rs.next()) {
                    Long id = rs.getLong(1);
                    logger.debug("id: {}", id);
                }
                else {
                    logger.debug("ResultSet is empty");
                }
            }
          
            conn.rollback();
 //           conn.commit();
        } catch (SQLException e) {
            logger.error(null, e);
        }
    }

Output:

# results with Babelfish URL & SQL Server driver: (returns 0 for row ID)
rows: 1
rs: SQLServerResultSet:1
id: 0

# results with PostgreSQL URL & postgres driver: (returns the row ID)
rows: 1
rs: org.postgresql.jdbc.PgResultSet@2aceadd4
id: 1548

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文