Oracleのセットアップ:
CREATE TABLE test.parent_table (
id INT PRIMARY KEY
);
CREATE TABLE test.child_table (
id INT PRIMARY KEY,
parent_id INT REFERENCES parent_table (id),
prev_id INT REFERENCES child_table (id)
);
Javaコード:
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
public class DescribeDB {
public static void main(String[] args)
{
try{
Class.forName("oracle.jdbc.OracleDriver");
Connection con = DriverManager.getConnection(
"jdbc:oracle:thin:@localhost:1521:XE",
"username",
"password"
);
DatabaseMetaData md = con.getMetaData();
ResultSet rs = md.getImportedKeys(
con.getCatalog(),
"TEST",
"CHILD_TABLE"
);
while (rs.next()) {
System.out.println(
String.format(
"%s.%s.%s references %s.%s.%s",
rs.getString("FKTABLE_SCHEM"),
rs.getString("FKTABLE_NAME"),
rs.getString("FKCOLUMN_NAME"),
rs.getString("PKTABLE_SCHEM"),
rs.getString("PKTABLE_NAME"),
rs.getString("PKCOLUMN_NAME")
)
);
}
} catch(ClassNotFoundException | SQLException e) {
System.out.println(e);
}
}
}
出力:
TEST.CHILD_TABLE.PREV_ID references TEST.CHILD_TABLE.ID
TEST.CHILD_TABLE.PARENT_ID references TEST.PARENT_TABLE.ID
出典
2016-05-30 20:25:10
MT0
あなたは[getImportedKeys() ''](探していますhttp:// docs.oracle.com/javase/8/docs/api/java/sql/DatabaseMetaData.html#getImportedKeys-java.lang.String-java.lang.String-java.lang.String-)および['getExportedKeys()' ](http://docs.oracle.com/javase/8/docs/api/java/sql/DatabaseMetaData.html#getExportedKeys-java.lang.String-java.lang.String-java.lang.String-) –
しかし、私はテーブルの外部キーまたはプライマリキーを必要としません、私はそれを含むテーブルの名前が欲しい、私は外国人またはプライマリキーを持っていない、私は1つのテーブルの名前を持っている – WhiteShadow
これらの呼び出し**は**テーブルの名前を返す、JavaDocsを慎重に読んでください。そのような情報を返すことができる唯一のJava APIです。あなたが望んでいなければ、 'all_constraints'からその情報を取得する独自のクエリを作成する必要があります –