🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
GlassFish

GlassFishは、Java EE準拠のアプリケーションサーバの名称です。

Java EE

Java EE(Java Enterprise Edition)はJavaベースのテクノロジーとその相互運用の仕様をまとめたものです。サーバとクライアントのアーキテクチャを規定し、特定アプリケーションのクラス用に定義されたテクノロジー設定のプロファイルを使用します。

PostgreSQL

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

Java

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

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

Q&A

解決済

1回答

1692閲覧

javaからPostresに接続してSELECTしたい

I_am_

総合スコア23

GlassFish

GlassFishは、Java EE準拠のアプリケーションサーバの名称です。

Java EE

Java EE(Java Enterprise Edition)はJavaベースのテクノロジーとその相互運用の仕様をまとめたものです。サーバとクライアントのアーキテクチャを規定し、特定アプリケーションのクラス用に定義されたテクノロジー設定のプロファイルを使用します。

PostgreSQL

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

Java

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

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

0グッド

0クリップ

投稿2021/02/11 17:05

編集2021/02/12 01:24

前提・実現したいこと

javaからPostgreSQLに接続してSELECTしたいです。
基礎のところなのですが、詰まってます。

PostgreSQLにSelectがかからなのです。

発生している問題・エラーメッセージ

Exceptionを出力してみると以下のエラーがでます。

org.postgresql.util.PSQLException: この ResultSet に列名 ID ありません。

該当のソースコード

java

1package connection.sql; 2 3import java.sql.Connection; 4import java.sql.DriverManager; 5import java.sql.PreparedStatement; 6import java.sql.ResultSet; 7 8import jakarta.activation.DataSource; 9import jakarta.annotation.Resource; 10 11@Resource(lookup = "") 12public class ConectSql { 13 public static String Sampleposgre() throws Exception { 14 DataSource ds; 15 String url = "jdbc:postgresql://localhost:5432/sample_login"; 16 String user = "user"; 17 String password = "password"; 18 String get_sql = ""; 19 String exceptionMessage = ""; 20 21 22 try { 23 24 Connection conn = DriverManager.getConnection(url,user,password); 25 //SELECT文を準備 26 String sql = "SELECT * FROM ms_user"; 27 PreparedStatement pStmt = conn.prepareStatement(sql); 28 29 ResultSet rs = pStmt.executeQuery(); 30 31 //結果を表示 32 while (rs.next()) { 33 String login_id = rs.getString("ID"); 34 String login_name = rs.getString("NAME"); 35 String login_password = rs.getString("PASSWORD"); 36 37 get_sql = login_id + login_name + login_password; 38 // System.out.println(login_id + " " + login_name + " " + login_password); 39 } 40 } catch (Exception e) { 41 exceptionMessage = e.getClass().getName() + ": " + e.getMessage(); 42 } 43 //return get_sql; 44 return exceptionMessage; 45 } 46} 47

###テーブルの定義
イメージ説明

試したこと

https://blog.payara.fish/using-postgresql-with-payara-server
glassfishの管理コンソールからjdbcの設定はしました。

基礎だと思うのですが、SELECTがPostgreSQLにかからない原因を特定できませんでした。
設定のところでミスをしているのではないかと思うのですが、Pingは通りました。

何かここをみると原因がわかるなど、教えて欲しいです。
よろしくお願いします。

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

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

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

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

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

hoshi-takanori

2021/02/11 17:23

ms_user のテーブル定義はどうなってますか?
m.ts10806

2021/02/11 23:06

>Postres PostgreSQLです。
I_am_

2021/02/12 01:07

テーブルの定義を追記しました。
m.ts10806

2021/02/12 01:08

>Postres PostgreSQLです。 固有名詞はコピペするくらいの慎重さがないと動くものも動きません
I_am_

2021/02/12 01:25

>m.ts10806 ご指摘ありがとうございます。 細かなところ気を使えるようにします。
guest

回答1

0

ベストアンサー

何かここをみると原因がわかるなど、教えて欲しいです。

についてですが、

org.postgresql.util.PSQLException: この ResultSet に列名 ID ありません。

このメッセージが出ているという事は、ResultSet rs = pStmt.executeQuery();
実行されているので、接続関連のエラーは考えにくく、pingを取る意味はないでしょう。
もっと言うならpingは疎通確認はするのですがサービスに対しては分からないので、telnetコマンドでポート確認するか、psqlで対話ツールを起動して接続を確認しますね。

後はエラーメッセージをちゃんと読みましょう。
(SQLは実行できたが、)IDという列名はないからエラーを吐いたってだけかと思います。

例えばSQLでこんな感じに実行できる場合。列はidnameupdated_dateの3つです。

sql

1hoge=> select * from t_person; 2 id | name | updated_date 3----+-------+-------------- 4 1 | mahny | 2021-02-12 5 2 | cia | 2021-02-12 6 3 | mary | 2021-02-12

Java側で取得できるデータはこんな感じですね。

java

1// ResultSet rsはSQLを既に実行しているとして… 2while (rs.next()) { 3 int id = rs.getInt("id"); 4 String name = rs.getString("name"); 5 Date updatedDate = rs.getDate("updated_date"); 6 7 // ~(略)~ 8}

仮に、同じエラーを起こそうとしたらこんな感じになりますね。
hoshi-takanoriさんの指摘通り、テーブル構成と列名の確認ですかね。

java

1// ResultSet rsはSQLを既に実行しているとして… 2while (rs.next()) { 3 int id = rs.getInt("id2"); // ここで例外発生 4 String name = rs.getString("name"); 5 Date updatedDate = rs.getDate("updated_date"); 6 7 // ~(略)~ 8}

頑張ってください。

投稿2021/02/11 18:30

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

I_am_

2021/02/12 01:23

ありがとうございます。 SQLは実行できたという意味だったのですね、、 getInt()の部分を定義に合わせたらできました。 エラーの意味を理解できるようにがんばります。
退会済みユーザー

退会済みユーザー

2021/02/12 08:21

> SQLは実行できたという意味だったのですね 似ている様ですが、まるで違います。 プログラムは単に「ResultSetに 列名 ID はない」と言っているだけです。 DBの入出力の手続きが 1. プログラムからDBに接続する 2. SQLを実行する 3. SQLの実行結果を取得する(※エラーメッセージはこれに失敗したと言っている) 4. DBから切断する のような流れがある事を私が知っているからSQLは実行できているだろうと予測しただけです。 エラーメッセージには【SQLは実行できた】という意味はありません。 事実を突き詰める為の状況確認と、問題解決の為の対策は一緒くたに考えると泥沼にハマりますよw
I_am_

2021/02/12 10:03

>mahnyさん 確かに、検討外れは解決しないですね、、 そのあたり俯瞰的に捉えられるようにがんばります。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問