如何在java中获取超级表信息?

时间:2012-04-25 02:02:28

标签: java mysql jdbc

我的数据库有很多父表和子表。这些表包含与父表有链接的外键。我想用java获取子表的父表信息?我怎样才能实现?

For ex,consider the student and mark table,
The student table contains the information like studentID,name.
studentID-Primary key
The marks table contains the markId,studentId,Sub1,sub2,sub3 etc
markId-Primarykey
studentID-Foreignkey refers Student table

我的表创建查询是,

CREATE TABLE `Student12` (
  `studentId` SMALLINT  NOT NULL AUTO_INCREMENT,
  `name` VARCHAR(50)  NOT NULL,
  PRIMARY KEY (`studentId`)
)
ENGINE = InnoDB;


CREATE TABLE `Marks` (
  `markId` SMALLINT  NOT NULL AUTO_INCREMENT,
  `subject1` SMALLINT  NOT NULL,
  `subject2` SMALLINT  NOT NULL,
  `studentId` SMALLINT  NOT NULL,
  PRIMARY KEY (`markId`),
  CONSTRAINT `FK_Marks_Student` FOREIGN KEY `FK_Marks_Student` (`studentId`)
    REFERENCES `Student12` (`studentId`)
    ON DELETE RESTRICT
    ON UPDATE RESTRICT
)
ENGINE = InnoDB;

如果我将标记表名称作为输入,如何获取其父表或超级表名学生以及有关学生表的信息?任何帮助都应该是值得注意的。

3 个答案:

答案 0 :(得分:0)

这完全取决于表的创建方式。外键不是必须创建的,它们可以是一个表中的简单列,与另一个表没有明确的关系。如果您非常确定明确创建了链接(foreign keys已定义),那么您可以使用information_schema。但是如果没有定义foreign key(在我见过的大多数数据库中都是如此),那么你就无法找到数据库中的链接。您必须查看代码(如果有可用的话)并尝试找到线索。

答案 1 :(得分:0)

JDBC DatasetMetaData接口提供了一些可能有用的方法。 (以下文本是从javadoc中复制的。

当然,只有在SQL表DDL中将相关列声明为外键时,这些才有效。

答案 2 :(得分:0)

您可以使用DatabaseMetaData检索有关外键的信息 和引用的表。我不确定它是否适用于所有类型的MySql表。 原则是使用以下代码(未测试)来检索有关超级表的信息

ResultSet rs = null;
DatabaseMetaData dm = conn.getMetaData( );

// get super tables of table marks
ResultSet rs = dm.getSuperTables( null , null, "marks" );
while( rs.next( ) ) {

   System.out.println(String.format("Table Catalog %s", rs.getString("TABLE_CAT") );
   System.out.println(String.format("Table Schema %s", rs.getString("TABLE_SCHEM") );
   System.out.println(String.format("Table Name %s", rs.getString("TABLE_NAME") );
   System.out.println(String.format("Table Name %s", rs.getString("SUPERTABLE_NAME") );
}

您可以使用这些信息来获取有关引用表的其他信息 和foreigen和引用的主键:

ResultSet rs = dm.getCrossReference( null , null , "student" , null , null , "marks" );
System.out.println(String.format("Exported Keys Info Table %s.", "marks"));
while( rs.next( ) ) {

   String pkey = rs.getString("PKCOLUMN_NAME");
   String ptab = rs.getString("PKTABLE_NAME");
   String fkey = rs.getString("FKCOLUMN_NAME");
   String ftab = rs.getString("FKTABLE_NAME");
   System.out.println("primary key table = " + ptab);
   System.out.println("primary key = " + pkey);
   System.out.println("foreign key table = " + ftab);
   System.out.println("foreign key = " + fkey);
}

最后,您可以通过

检索有关超级表的信息
ResultSet rs = dm.getTables(null,null,"student" ,null);
System.out.println("Table name:");
while (rs.next()){
     String table = rs.getString("TABLE_NAME");
     System.out.println(table);
}