質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
JDBC

JDBC(Java DataBase Connectivity)は、Javaとリーレーショナルデータベースに接続させる基本的なAPIです。Java上でSQLステートメントを発行することで、データベースの種類に影響を受ないDB操作を可能とします。

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

1回答

1077閲覧

Javaでpostgresqlのテーブルコメントを取得しようとしてもNULLになります。

tera001

総合スコア6

JDBC

JDBC(Java DataBase Connectivity)は、Javaとリーレーショナルデータベースに接続させる基本的なAPIです。Java上でSQLステートメントを発行することで、データベースの種類に影響を受ないDB操作を可能とします。

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2020/03/27 15:43

編集2020/03/27 15:47

Javaでpostgresqlのテーブルコメントを取得しようとしてもNULLになります。

以下の方法でpostgresqlのテーブルコメントが取得できたと思うのですが、nullになってしまいます。
何が間違っているのでしょうか?

該当のソースコード

java

1 public static void main(String args[]) throws SQLException { 2 Connection conn = null; 3 Properties props = new Properties(); 4 props.setProperty("useInformationSchema", "true"); 5 props.setProperty("user", "postgres"); 6 props.setProperty("password", "postgres"); 7 conn = DriverManager.getConnection("jdbc:postgresql://localhost:5432/postgres", props); 8 DatabaseMetaData dmd = conn.getMetaData(); 9 ResultSet rs = dmd.getTables(null, null, "sample1", null); 10 while (rs.next()) { 11 System.out.println(rs.getString("REMARKS")); 12 } 13 } 14

試したこと

rs.getString(1);
rs.getString(2);
.
.
.
と出力させてみましたが、rs.getString(6);でインデックス範囲外エラーとなり、内容は
null
null
sample1
TABLE
null
でした。(sample1……テーブル名です。)

補足情報(FW/ツールのバージョンなど)

以下を使用しています。
・Eclipse
・postgresql-9.1-901-1.jdbc4.jar
・PostgreSQL12

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

xebme

2020/03/28 00:13 編集

追記をお願いします。 ・コメントの内容を知りたいので、SQLを使用してsample1テーブルのコメントを表示してください。 ・"REMARKS"列があるかどうか、ResultSetMetaDataを使って確認してください。
hoshi-takanori

2020/03/28 06:32

該当のソースコードでコメント取得できましたよ。 SQL create table sample1 (name text); comment on table sample1 is 'table comment'; Java 実行結果 table comment
tera001

2020/03/28 10:57

>・コメントの内容を知りたいので、SQLを使用してsample1テーブルのコメントを表示してください。SQLにてテーブルコメントを表示することはできました。 select pg_stat_user_tables.relname as TABLE_NAME ,pg_description.description as TABLE_COMMENT from pg_stat_user_tables ,pg_description where pg_stat_user_tables.relname in ( select relname as TABLE_NAME from pg_stat_user_tables ) and pg_stat_user_tables.relid=pg_description.objoid and pg_description.objsubid=0 ; table_name | table_comment ------------+--------------- sample1 | サンプル >・"REMARKS"列があるかどうか、ResultSetMetaDataを使って確認してください。 getTables()で取得したResultSetではなく、ResultSetMetaDataでしょうか?? ResultSetには ・table_cat ・table_schem ・table_name ・table_type ・remarks がフィールドとして存在していました。
tera001

2020/03/28 12:18

42.2.11に入れなおしましたら取得できました! 申し訳ありません。 mvnrepositoryで検索して取得するjdbcdriverを間違えていたようです。 ありがとうございました!
guest

回答1

0

ベストアンサー

ちょっとバージョンが違いますけど...。提示されていないのでわかりませんが、コメントのつけかたがちがうのかしら。

bash

1$ cat build.gradle 2... 3dependencies { 4 // https://mvnrepository.com/artifact/org.postgresql/postgresql 5 compile group: 'org.postgresql', name: 'postgresql', version: '42.2.11'

bash

1$ psql test 2psql (11.7 (Debian 11.7-0+deb10u1)) 3test=> drop table test; 4DROP TABLE 5test=> create table test (id text); 6CREATE TABLE 7test=> comment on table test is 'ほげげ'; 8COMMENT

java

1import java.sql.*; 2public class Main { 3 public static void main(String args[]) throws Exception { 4 final Connection conn = DriverManager.getConnection("jdbc:postgresql://localhost:5432/test", "hoge", "hoge"); 5 final DatabaseMetaData dmd = conn.getMetaData(); 6 final ResultSet rs = dmd.getTables(null, null, "test", null); 7 while (rs.next()) { 8 System.out.println(rs.getString("TABLE_NAME")); 9 System.out.println(rs.getString("REMARKS")); 10 } 11 } 12} 13// test 14// ほげげ

投稿2020/03/28 06:30

shiketa

総合スコア3971

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tera001

2020/03/28 12:21

申し訳ありません。jdbcDriverのバージョンが問題でした。 ご丁寧にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問