質問編集履歴

4

やりたかったことを画像にしてわかりやすくしました。また数日自分で学習をし直し、問題修正にあたってようやく解決できました。

2024/03/02 14:02

投稿

arias
arias

スコア0

test CHANGED
File without changes
test CHANGED
@@ -13,7 +13,23 @@
13
13
  先週の金曜日から今日まで50時間以上同じところで悩んでいます。できれば一人で解決したかったのですが、ここ二日は考えすぎて睡眠もとれず徹夜状態で頭がおかしくなりそうで相談させていただくことにしました。よろしくお願いします。
14
14
  プログラミングをはじめて2か月にも満たない初心者で突っ込みどころの多いコードだと思います。
15
15
  他にロジッククラスやBOクラスがありますがそちらは特に問題ではないと思っていますが、非常に多いので、問題のありそうだと思われるところを抜粋しますがもし足りない情報があれば追加します。
16
- SELECTの部分もかなり不安があるので本当はのせたいのですが9000字という制限で全部はれないですごめんなさい。
16
+
17
+ ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2024-03-02/65de5223-d00b-434c-8312-5e918363354b.png)
18
+ 上記の画像のように表示されてしまっていました。このテキストと画像を同時に投稿した場合には独立せず同じ枠内で表示したかったのです。SELECTクエリではA,B,Cそれぞれをデータベース上で確認をして、全てのデータを重複せずに取得できることを確認しています。
19
+ この後行った修正は、残っている原因として考えられるものはA,B,Cで取得したレコードを全て一つのリストにまとめていましたが、これを順番に取り出す過程で関連させたい画像とテキストデータが結びついていないからでは?という発想に至り、Mapオブジェクトを作成してみることにしました。これでそれぞれA,B,Cから取得したレコードをMapオブジェクトにしてから一つのリストにまとめましたがこれでも表示は変わりませんでした。
20
+ データベースからの取得してくるクエリで、UNIONというものを教えてもらい、それでやってみたら思い通りの表示が可能になりました。以下使用したクエリ
21
+ String queryA = "SELECT * FROM (";
22
+ queryA += "SELECT m.mutter_id AS mutter_id, m.name AS name, m.text AS text, m.tweet_date AS tweet_date, f.name AS file_name, f.content AS content, f.content_type AS content_type, f.uploaded_at AS uploaded_at ";
23
+ queryA += "FROM MUTTERS m ";
24
+ queryA += "LEFT JOIN FILEPATHS f ON m.mutter_id = f.mutter_id ";
25
+ queryA += "UNION ";
26
+ queryA += "SELECT m.mutter_id AS mutter_id, f.name AS name, m.text AS text, m.tweet_date AS tweet_date, m.name AS file_name, f.content AS content, f.content_type AS content_type, f.uploaded_at AS uploaded_at ";
27
+ queryA += "FROM MUTTERS m ";
28
+ queryA += "RIGHT JOIN FILEPATHS f ON m.mutter_id = f.mutter_id ";
29
+ queryA += ") AS result ORDER BY COALESCE(tweet_date, uploaded_at) DESC";
30
+
31
+ このクエリを使用しただけで表示が改善されたので、データベースからの取得が間違っていたのだと思います。(まだ具体的に以前使用していたクエリの問題点ははっきりしていません)
32
+ この後、取得したレコードの表示順でまた問題が発生したため最後の AS result ORDER BY COALESCE(tweet_date, uploaded_at) DESC";というものを調べて外側で並び替えを行えるというものだったのでこれを使用したら並び替えもうまくできました。
17
33
 
18
34
 
19
35
 
@@ -214,6 +230,7 @@
214
230
  - [ ] 知人に聞いた
215
231
  - [x] その他
216
232
 
233
+
217
234
  ##### 上記の詳細・結果
218
235
  特に改善はみられず、むしろ最初のころより冗長になってる気もします…
219
236
  他にはAIを使用してエラーチェックなど行っています。

3

メソッドの説明を修正しました

2024/02/28 16:06

投稿

arias
arias

スコア0

test CHANGED
File without changes
test CHANGED
@@ -101,7 +101,7 @@
101
101
 
102
102
 
103
103
 
104
- //画像とテキスト両方を投稿した場合の処理
104
+ //画像のみの投稿の処理
105
105
  public boolean create(Image image) {
106
106
  try (Connection conn = DriverManager.getConnection(JDBC_URL, DB_USER, DB_PASS)) {
107
107
  String sql = "INSERT INTO FILEPATHS (content, content_type, uploaded_at) VALUES (?, ?, ?)";
@@ -118,7 +118,7 @@
118
118
  }
119
119
  }
120
120
 
121
-
121
+ //画像とテキストが投稿された場合の処理
122
122
  public boolean insertTextAndImage(Mutter mutter, Image image) {
123
123
  try (Connection conn = DriverManager.getConnection(JDBC_URL, DB_USER, DB_PASS)) {
124
124
  conn.setAutoCommit(false); // トランザクションを開始

2

実現したいことの修正

2024/02/28 13:16

投稿

arias
arias

スコア0

test CHANGED
File without changes
test CHANGED
@@ -1,7 +1,7 @@
1
1
  ### 実現したいこと
2
2
  現在java H2データベースを使用してTwitter(X)のようなつぶやきアプリの制作をしています。
3
3
  画像を格納するテーブルと、テキストを格納するテーブルの2つがあります。
4
- 画像とテキストデータを関連付けて表示させたいです。(関連付けて投稿したつもりでもテキストのみ、と画像のみという判定になってしまう)
4
+ 画像とテキストデータを関連付けて表示させたいです。(関連付けて投稿したつもりでも識別子がうまく付与されずにテキストのみ、と画像のみという判定になってしまう)
5
5
 
6
6
  ### 発生している問題・分からないこと
7
7
  ユーザー情報登録→それを使用してログイン→メイン画面(実際につぶやきをするタイムライン)

1

タイトルの修正

2024/02/28 13:13

投稿

arias
arias

スコア0

test CHANGED
@@ -1 +1 @@
1
- 画像データとテキストデータの関連付け。java H2データベースを使用してつぶやアプリの制作をしてい
1
+ データベースを利用した画像データとテキストデータの関連付けができません
test CHANGED
@@ -1,5 +1,5 @@
1
1
  ### 実現したいこと
2
- 現在Twitter(X)のようなつぶやきアプリの制作をしています。
2
+ 現在java H2データベースを使用してTwitter(X)のようなつぶやきアプリの制作をしています。
3
3
  画像を格納するテーブルと、テキストを格納するテーブルの2つがあります。
4
4
  画像とテキストデータを関連付けて表示させたいです。(関連付けて投稿したつもりでもテキストのみ、と画像のみという判定になってしまう)
5
5