簡體   English   中英

JDBC 規范是否定義了如果為列名沖突的查詢調用“ResultSet.getObject(String)”會發生什么?

[英]Does the JDBC specification define what happens if you call `ResultSet.getObject(String)` for a query which has conflicting column names?

我在一些 Java 代碼中發現了一個 SQL 查詢,如下所示:

SELECT * FROM tableA JOIN tableB ON ...

tableAtableB都包含名為id的字段,執行此查詢的 Java 代碼執行以下操作:

Integer id = (Integer)rs.getObject("id");

JDBC 規范對將返回哪個字段值有什么要說的嗎? 我還沒有找到任何可以說這種或另一種方式的東西。 我看到一些數據庫拋出錯誤,但 MySQL/MariaDB(這里使用的數據庫)沒有抱怨,返回的值似乎是tableA.id ,或者名稱為“id”的“最左邊”字段。

我問在這種情況下是否存在規范定義的行為,或者是否取決於數據庫和/或 JDBC 驅動程序來決定如何表現。

不用說,當我查看代碼時,我會修復它以使其可預測且明確地工作,但我對答案很好奇。

ResultSet的 API 文檔回答了您的問題:

用作 getter 方法輸入的列名不區分大小寫。 當使用列名調用 getter 方法並且多個列具有相同名稱時,將返回第一個匹配列的值。

JDBC 4.3 規范文檔第 15.2.3 節檢索值還說:

列從左到右編號,因為它們出現在查詢的 select 列表中,從 1 開始。

提供給 getter 方法的列標簽不區分大小寫。 如果 select 列表多次包含同一列,則將返回該列的第一個實例。

可以使用方法findColumn檢索列 label 的第一個實例的索引。 如果未找到指定的列,則方法findColumn將引發SQLException

因此,如果一個結果集有多個具有相同(不區分大小寫(,))名稱的列。 然后返回第一個匹配列的值。

暫無
暫無

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

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