2012-08-12 124 views
1

您好我想获取给定表的foreig关键,我用这个代码:JDBC MySQL的meta.getExportedKeys()返回空结果

ResultSet rs = meta.getImportedKeys(_con.getCatalog(), null, _tableName); 
     while (rs.next()) 
     { 
      //get the foreignKeys 
     } 
ResultSet rs2 = meta.getExportedKeys(_con.getCatalog(), null, _tableName); 
     while (rs2.next()) 
     { 
      //get the foreignKeys 
     } 

结果集是空的,虽然表包含一个外键,并且是另一个表的外键,

getImportedKeys工作正常。

感谢您的任何建议。

表:

CREATE TABLE `COMMANDE` (
    `COMMANDE_ID` int(11) NOT NULL, 
    `CLIENT_ID` int(100) DEFAULT NULL, 
    `TOURNEE_ID` int(100) DEFAULT NULL, 
    PRIMARY KEY (`COMMANDE_ID`), 
    KEY `CLIENT_ID` (`CLIENT_ID`), 
    KEY `TOURNEE_ID` (`TOURNEE_ID`), 
    CONSTRAINT `commande_ibfk_1` FOREIGN KEY (`CLIENT_ID`) REFERENCES `CLIENT` (`CLIENT_ID`), 
    CONSTRAINT `commande_ibfk_2` FOREIGN KEY (`TOURNEE_ID`) REFERENCES `TOURNEE` (`TOURNEE_ID`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

CREATE TABLE `CLIENT` (
    `CLIENT_ID` int(100) NOT NULL, 
    `LIBELLE` varchar(100) DEFAULT NULL, 
    PRIMARY KEY (`CLIENT_ID`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

我试着用两个表的代码。

+0

莫非你显示该选项卡的示例le定义,包括主键和外键? – 2012-08-12 15:44:39

+0

我编辑了我的问题,我试了两个。纠正我,如果我错了,但与表CLIENT运行时,我应该看到它的一个外键在COMMANDE在getExportedKeys()正确? – 2012-08-12 20:33:09

+0

你有没有检查过你的DDL语句?他们是否在你的系统上执行? – Sujay 2012-08-13 05:53:59

回答

2

我认为问题来自JDBC中方法的相当好奇的命名,以及难以描述的描述。

为了得到一个表的主键,你应该使用getPrimaryKeys(),得到一个表的外键(和它们引用的主键),使用getImportedKeys()

还有其他方法 - getExportedKeys()公开对外引用指定表的键(所以表参数指定与主键表) - getCrossReference()是上述所有的组合:你需要在约束双方指定表

+0

是的,但表上的CLIENT的getExportedKeys()应该给我它在表COMMANDE中的外键否?这实际上是我想要的,我该怎么做? – 2012-08-14 06:23:01

+0

你正在使用哪个驱动程序,我用Connector/J 5.1.21试过了,它按预期工作 – 2012-08-14 17:50:28

+0

我正在使用5.1.6,我会尝试新的驱动程序。谢谢 – 2012-08-16 08:08:10