java.sql.DatabaseMetaDataとjava.sql.ResultSetを使う
結論としては1発で両方は取れない
たとえば以下のようなテーブル構造(MYSQL)
CREATE TABLE IF NOT EXISTS usertable (
id int(11) NOT NULL auto_increment,
job char(255) default NULL,
sex char(255) NOT NULL default ”,
hobby char(255) default NULL,
PRIMARY KEY (id)
);
//データーベースに接続
//主キー名を取得(テーブル名を指定)
Connection con = DriverManager.getConnection(dburl,user,pass);
DatabaseMetaData dbmd = con.getMetaData();
ResultSet rs = dbmd.getPrimaryKeys(null, null, "usertable");
while (rs.next()) {
System.out.println(rs.getString("COLUMN_NAME")); //名前 :id
System.out.println(rs.getString("PK_NAME")); //主キーであるか(nullの場
合あり):PRIMARY
System.out.println(rs.getString("KEY_SEQ")); //列番号 : 1(列目)
}
//指定したカラム名の情報を取得
ResultSet rs = dbmd.getColumns(null, null, "usertable","id");
while (rs.next()) {
System.out.println(rs.getString("COLUMN_NAME")); //名前 :id
System.out.println(rs.getString("TYPE_NAME")); //型: int
}