国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MySQL > 正文

使用 JDBC API 獲取 Mysql 的 表字段 時,返回為空 的解決方案

2024-07-24 12:59:23
字體:
來源:轉載
供稿:網友

針對 MySQL 數據庫,考慮下面這種場景

用戶 A ,創建了一個 database,取名為 test,test中有一個表,叫 tab001

test 的 jdbc url 則為: jdbc:mysql://localhost:3306/test

用戶 B ,創建了一個 database,取名為 demo,demo中有一個表,叫 tab002

demo 的 jdbc url 則為: jdbc:mysql://localhost:3306/demo

用戶Btab002 的權限開放給了 用戶A

請問,在給定 用戶A的jdbc url、用戶名、密碼的情況下,如何通過 JDBC 的 API 獲取 tab002 中的所有字段?

我們知道,JDBC 中獲取表的字段的 API 為:

Connection connection = DriverManager.getConnection(jdbc_url, userName, passWord);DatabaseMetaData dbMetaData = connection.getMetaData();// 獲取指定 catalog 下的指定 schema 下的指定 table 的所有字段ResultSet colRet = dbMetaData.getColumns(catalog, schema, table, "%");

所以,針對上面這種場景,我們可能會直接寫出如下處理代碼:

ResultSet colRet = dbMetaData.getColumns(null, "demo", "tab002", "%");

但是,當你這么做了之后,你會發現,你獲取到的 ResultSet 中是不會包括任何 column 的信息的。

所以,我一度懷疑 mysql 的jdbc driver 在實現 JDBC 的接口時,是有Bug存在的。

但是,當我在萬能的 stack overflow 上找到了下面的答案之后,突然發現的另外的解法: DatabaseMetaData#getColumns returns an empty ResultSet

按照上面的鏈接里的做法,我將代碼改成了如下:

ResultSet colRet = dbMetaData.getColumns("demo", null, "tab002", "%");

Bingo! 你會發現,tab002 中的所有字段都獲取到了。

當然,上面的鏈接里,也有人反應這種做法是 NG 的,所以,這種做法可能跟 jdbc driver 的版本、mysql 的版本 有關系,我的測試環境是:

Mysql 版本: 5.1.73jdbc driver 版本: 5.1.38
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 汉寿县| 德昌县| 阿巴嘎旗| 潮州市| 榆树市| 涟水县| 平塘县| 容城县| 图片| 寻乌县| 丹棱县| 阿图什市| 阿勒泰市| 日喀则市| 石泉县| 夏邑县| 小金县| 余庆县| 上思县| 龙岩市| 定襄县| 晋宁县| 涞源县| 马鞍山市| 南溪县| 汨罗市| 平凉市| 望江县| 通山县| 米易县| 德保县| 论坛| 屏南县| 泰和县| 白山市| 逊克县| 化德县| 鹤庆县| 西平县| 平阴县| 文成县|