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

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

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

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

Java

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

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

Q&A

解決済

1回答

230閲覧

for文の処理後、〇〇_$1となっている$を無くしたいです

rinimaruranran

総合スコア36

PostgreSQL

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

Java

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

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

0グッド

0クリップ

投稿2018/11/29 10:52

編集2018/11/29 10:54

前提・実現したいこと

初心者のため、わかりにくい部分がありましたら申し訳ございません。
データベースにある、hoge_0~hoge_99というテーブルそれぞれに同じSQL文の処理を実行させたいです。

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

for文で繰り返しの処理を書き、hoge_0は正常に実行されているようですが、次の処理でhoge_$1というテーブルを指定してSQL文が走ってしまっています。
そのため、nested exception is org.postgresql.util.PSQLException: ERROR: relation "hoge_$1" does not existというエラー文が出ています。

この$はどのような仕組みで発生してしまっているのでしょうか。
また、どのようにすればこの$を付けることなく、hoge_1,hoge_2...としていけるでしょうか。

ご存知の方いらっしゃいましたら、ご教示お願いいたします。

該当のソースコード

Java

1■■■■■■■■■■■■■■■■■■■■Controller.java■■■■■■■■■■■■■■■■■■■■ 2:略 3@Autowired 4 private HogeDao HogeDao; 5 6@RequestMapping(value = "/hogeData", method = RequestMethod.GET) 7 @CrossOrigin 8 public Optional<Hoge> hogeData() { 9 List<Integer> ids = new ArrayList<Integer>(); 10 Integer fugaId = 10000; 11 for (int i = 0; i < 100; i++) { 12 ids.add(HogeDao.selectById(i, fugaId)); 13 } 14 return null; 15 } 16:略

Java

1■■■■■■■■■■■■■■■■■■■■HogeDao.java■■■■■■■■■■■■■■■■■■■■ 2:略 3/** 4 */ 5@ConfigAutowireable 6@Dao(config = DomaConfig.class) 7public interface HogeDao { 8 9 /** 10 * @param i 11 * @param fugaId 12 * @return the Hoge entity 13 */ 14 @Select 15 Integer selectById(int i, Integer fugaId); 16:略

SQL

1■■■■■■■■■■■■■■■■■■■■selectyId.sql■■■■■■■■■■■■■■■■■■■■ 2select 3 id 4from 5 hoge_/* i */1 6where 7 fugaId = /* fugaId */1

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2018/11/29 11:28

つ tostring
guest

回答1

0

ベストアンサー

hoge_/* i /の形式が間違っている気がします。 ※0がうまくいくのが不明
/
#~*/を使うようにしてください。テーブル名自体を渡せるはずです。
参考ページです。
https://doma.readthedocs.io/ja/stable/sql/#id13

以下のようにすることも検討してみてください。
一回のSQLで検索できます。

sql

1select id from ( 2 select id,fugaId from hoge_0 union all 3 select id,fugaId from hoge_1 union all 4 select id,fugaId from hoge_2 union all 5 ・・・ 6 select id,fugaId from hoge_99 7) tmp 8where tmp.fugaId = /* fugaId */1

java

1List<Integer> selectById(int i, Integer fugaId);

Doma好きです。もっと広まればいいのに

投稿2018/11/30 23:42

hinoko58

総合スコア112

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

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

rinimaruranran

2018/12/03 02:11

ありがとうございます! /*#~*/を使う事で、$記号が消えてfor文がうまく回りました! また、コントローラーでは、 @RequestMapping(value = "/hogeData", method = RequestMethod.GET) @CrossOrigin public List<Integer> hogeData() { List<Integer> ids = new ArrayList<Integer>(); Integer i = 0; Integer fugaId = 100000; for (i = 0; i < 100; i++) { ids.addAll(HogeDao.selectById(i, fugaId)); } return ids; } このように記載する事で、求めていた結果が得られました。 的確なアドバイスを頂き、無事解決することができました! ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問