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

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

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

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Java

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

Swing

SwingはJavaに標準で付属するグラフィック関連のクラスライブラリを指します。

Q&A

解決済

1回答

893閲覧

DBの値をJavaのJTextFieldにて表示

mmatt

総合スコア5

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Java

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

Swing

SwingはJavaに標準で付属するグラフィック関連のクラスライブラリを指します。

0グッド

0クリップ

投稿2021/04/07 05:37

編集2021/04/07 08:26

目的は表題の件です。

大まかな流れは下記の通りです。
GUIの作成完了

DBとの接続完了

テキストフィールド内に表示 失敗

テキストフィールド内でDB修正成功(コードの記載無し)

実行結果はテキストフィールド内は空白になり、エラー等は無いです。

DBのmenteテーブルの情報ですが
レコード数、フィールド数共にカラムに対して1個づつになります。
1個づつのため while(rs.next()) は無くてもいいのかなと思っています。

どこの個所を修正すればいいか、ご教授お願いします。
(ネット等で調査して原因だと思った箇所については、手あたり次第試しています。
何を試したかは多すぎて記載しないです)

現時点で試しているのは、下記をインスタンス化して、public Mente() { クラスに
textField.set(a1)と追記して成功するか調査中です。
ただpublic Mente() { クラスにstaticを付けると下記のエラーが出ています。
インスタンス化や変数の使い方や仕様の理解が足りていないため、ソースを書きながら勉強中です。

String a0 = rs.getString("名前");
String a1 = rs.getString("性別");
String a2 = rs.getString("年齢");
String a3 = rs.getString("身長");
String a4 = rs.getString("体重");

型 Menteのコンストラクターに対する不正な修飾子です。public、protected および private
のみ許可されています

Jlist等は使用する気はありません。

仕様バージョン等
Windows10
jdk15.0
mySQLserver 5.7
mySQL Workbench8.0

JFrame

1import java.awt.EventQueue; 2import java.sql.Connection; 3import java.sql.DriverManager; 4import java.sql.PreparedStatement; 5import java.sql.ResultSet; 6import java.sql.SQLException; 7 8import javax.swing.JFrame; 9import javax.swing.JLabel; 10import javax.swing.JPanel; 11import javax.swing.border.EmptyBorder; 12import javax.swing.JTextField; 13 14public class Mente extends JFrame { 15 16 private JPanel contentPane; 17 private JLabel lblNewLabel; 18 private JTextField textField; 19 private JTextField textField_1; 20 private JTextField textField_2; 21 private JTextField textField_3; 22 private JTextField textField_4; 23 24 /** 25 * Launch the application. 26 */ 27 public static void main(String[] args) { 28 EventQueue.invokeLater(new Runnable() { 29 public void run() { 30 try { 31 Mente frame = new Mente(); 32 frame.setVisible(true); 33 } catch (Exception e) { 34 e.printStackTrace(); 35 } 36 } 37 }); 38 } 39 40 /** 41 * Create the frame. 42 */ 43 public Mente() { 44 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 45 setBounds(100, 100, 634, 446); 46 contentPane = new JPanel(); 47 contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); 48 setContentPane(contentPane); 49 contentPane.setLayout(null); 50 51 lblNewLabel = new JLabel("New label"); 52 lblNewLabel.setBounds(0, 0, 620, 76); 53 contentPane.add(lblNewLabel); 54 55 textField = new JTextField(); 56 textField.setBounds(44, 86, 86, 19); 57 contentPane.add(textField); 58 textField.setColumns(10); 59 60 textField_1 = new JTextField(); 61 textField_1.setBounds(44, 127, 86, 19); 62 contentPane.add(textField_1); 63 textField_1.setColumns(10); 64 65 textField_2 = new JTextField(); 66 textField_2.setBounds(44, 180, 86, 19); 67 contentPane.add(textField_2); 68 textField_2.setColumns(10); 69 70 textField_3 = new JTextField(); 71 textField_3.setBounds(44, 245, 86, 19); 72 contentPane.add(textField_3); 73 textField_3.setColumns(10); 74 75 textField_4 = new JTextField(); 76 textField_4.setBounds(44, 288, 86, 19); 77 contentPane.add(textField_4); 78 textField_4.setColumns(10); 79 } 80 81 82 public void connection() { 83 //DBをテキストフィールドに表示 84 85 //文字コードの設定 86 String dburi = "mysql://127.0.01:3306/mm" 87 + "?useUnicode=true&characterEncoding=utf8"; 88 try{ 89 //DBとの接続 90 Class.forName("com.mysql.cj.jdbc.Driver"); 91 Connection conn = DriverManager.getConnection( 92 "jdbc:"+dburi,"root","psw"); 93 94 95 String sql1 ="select * from mente_;"; 96 PreparedStatement st = conn.prepareStatement(sql1); 97 System.out.println("MySQLに接続できました!"); 98 ResultSet rs =st.executeQuery(sql1); 99 100 JTextField aryTF[]=new JTextField[5]; 101 aryTF[0] = textField; 102 aryTF[1] = textField_1; 103 aryTF[2] = textField_2; 104 aryTF[3] = textField_3; 105 aryTF[4] = textField_4; 106 107 108 while(rs.next()) { 109 String a0 = rs.getString("名前"); 110 String a1 = rs.getString("性別"); 111 String a2 = rs.getString("年齢"); 112 String a3 = rs.getString("身長"); 113 String a4 = rs.getString("体重"); 114 115 aryTF[0].setText(a0); 116 aryTF[1].setText(a1); 117 aryTF[2].setText(a2); 118 aryTF[3].setText(a3); 119 aryTF[4].setText(a4); 120 121 } 122 123 124 125 st.close(); 126 conn.close(); 127 rs.close(); 128 129 }catch(ClassNotFoundException | SQLException e) { 130 System.out.println("SQLExeception:" + e.getMessage()); 131 } 132 } 133} 134

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

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

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

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

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

dodox86

2021/04/07 06:59

> どこの個所を修正すればいいか、ご教授お願いします。 質問者さんご本人はもしかしたら悪気無く、気が付かぬまま投稿しているのかもしれませんが、これは完全な作業依頼です。 > どこの個所を修正すればいいか、ご教授お願いします。 なぜ、ご自身で書いた(はずの)コードのどの場所を修正すべきか、第三者である閲覧者、回答者が考えなければならないのか。「どこを直したらよいか」と言う文言は、大抵の場合、ご自身で周辺のコードを理解していないところから出てきます。 > listを使う事は検討しましたが、Jlistを使うメリットが > いまいち分からないし、下記のコードは質問用にテキストフィールド数は少なくなっています。 > なのでJlistやJtable等の使用は極力避けたいです。 なぜ、質問者さんの要望を極力取り入れ、閲覧者、回答者がそのコードを考え、提供しなければならないのか。確かに言えることのひとつは、teratailは、課題と要望を投稿すると第三者が寄ってたかって無償で解決してくれるサイトではありません。 [推奨していない質問] https://teratail.com/help/avoid-asking
mmatt

2021/04/07 07:38

作業依頼ではありません。 なぜならこの質問を見た全員の人に、回答の義務はないからです。 >大抵の場合、ご自身で周辺のコードを理解していないところから出てきます。 その通りです、だからこのサイト使って、質問しています。 >なぜ、質問者さんの要望を極力取り入れ、閲覧者、回答者がそのコードを考え、提供しなければならないのか。 書いた意図は要望ではありません、条件を詳細に明記しているだけです。 確かに言えることのひとつは、teratailは、明確な質問と詳細の条件を投稿すると、作業依頼とはき違えてしまう、回答者がいることが分かりました。
mmatt

2021/04/07 08:12

質問の仕方が悪いと修正依頼ありましたので、一部修正します。
K_3578

2021/04/07 08:39

>作業依頼ではありません。 いやこんなの出来の悪い仕様書書いてこの通りに作ってくれって言ってるようにしか見えませんよ。 >なぜならこの質問を見た全員の人に、回答の義務はないからです。 回答の義務とか以前に作業依頼と取れるような内容の質問が非推奨だと言っているのです。 >確かに言えることのひとつは、teratailは、明確な質問と詳細の条件を投稿すると、作業依頼とはき違えてしまう、回答者がいることが分かりました。 皮肉にもなってない皮肉考えてる暇があったら自分の手と頭動かしなされ。
mmatt

2021/04/07 08:44

レスバするつもりは毛頭ありませんので、返信は控えさせて頂きます。
K_3578

2021/04/07 08:49

それはこっちの台詞なんですが。 ヘルプも読めない、丸投げする、指摘されたら屁理屈こねるだけならteratail利用されなければよろしいのでは? ヘルプに > teratailはサポートセンターではなく、思考するエンジニアの為のQ&Aコミュニティです と書いてあるので思考するエンジニアになってから出直して下さい。以上。
guest

回答1

0

ベストアンサー

connectionメソッドに、データベースを検索しJTextFieldへ書き出す処理が書かれていますが、
何処からも呼び出されていないです。

例えば、メソッドを呼び出してあげると、処理が走ります。
※後に書きますが、良くない例です。

java

1... 2 public static void main(String[] args) { 3 EventQueue.invokeLater(new Runnable() { 4 public void run() { 5 try { 6 Mente frame = new Mente(); 7 frame.setVisible(true); 8 frame.connection(); // 当該処理の呼び出し。 9 } catch (Exception e) { 10 e.printStackTrace(); 11 } 12 } 13 }); 14 } 15...

ただし、
DB検索のような、I/Oを伴う重い処理はUIスレッドで処理すべきではありません。
SwingWorkerなどを使い、UIスレッドとは別スレッドで処理すべきなのでご注意ください。
UIスレッドで思い処理を行うと、処理中はマウス等の入力に対するイベントや、描画されずにウィンドーが白くなったりします。

投稿2021/04/07 14:40

yskszk63

総合スコア161

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

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

mmatt

2021/04/08 02:29

回答ありがとうございます。 良くない例で一度試してみましたが、表示させることが出来ました。 public void connection メソッド内の処理は問題ないことが確認出来ましたし、 やはり、初歩的なプログラムの理解が足りていない事が分かりました。 ご指摘の通り、UIスレッドでの処理は控えます。 swingWorkerなるものは全く知りませんでした。 swingWorkerを現在調べてまして、下記のような形でコードを書こうと思っています。 テキストフィールドでDBの修正する為にactionPerformed(ActionEvent e)メソッドが既に記述してあるので、 それの中でswingWorkerのdoInBackgroundメソッドにconnection メソッドを呼び出そうと思っています。 問題も解決できたし、知識も増えました。 回答ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問