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

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

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

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

Java

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

Swing

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

Q&A

1回答

978閲覧

ボタンでレコードを順次表示する方法

mmatt

総合スコア5

MySQL

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

Java

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

Swing

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

0グッド

0クリップ

投稿2021/04/20 06:03

編集2021/04/20 07:47

表題の件で
ボタンの押下後、レコードを順次表示する方法が分かりません。
実装したいボタンは、以下の4つです。
1.次のレコードを表示 2.前のレコードを表示
3.先頭のレコードを表示 4.最後のレコードを表示

現在、下記のコードで先頭行のレコードは表示できています。

調べたことは
各ボタンに下記のメソッドを使用するのだろうと思いますが
1.next() 2.previous() 3.first() 4.last()
メソッドを各ボタンに実装するコードの書き方が分かりません。

リザルトセットのリファレンスは読みましたが、解決できませんでした。
サンプルコードも検索してみましたが見つけれませんでした。

サンプルコード、参考サイト等があれば、ご教授お願いします。

Java

1public void DB_hyouzi() { 2 //DBをテキストフィールド・コンボボックスに表示 3 //文字コードの設定 4 String dburi = "mysql://127.0.01:3306/new_" 5 + "?useUnicode=true&characterEncoding=utf8"; 6 7 try { 8 //DBとの接続 9 Class.forName("com.mysql.cj.jdbc.Driver"); 10 Connection conn = DriverManager.getConnection( 11 "jdbc:" + dburi, "root", "psw"); 12 13 String sql1 = "select * from Adata limit 1;"; 14 String sql2 = "select * from Bdata limit 1;"; 15 String sql3 = "select * from Cdata limit 1;"; 16 17 18 PreparedStatement st = conn.prepareStatement(sql1 19 ,ResultSet.TYPE_SCROLL_INSENSITIVE 20 ,ResultSet.CONCUR_READ_ONLY); 21 PreparedStatement st2 = conn.prepareStatement(sql2 22 ,ResultSet.TYPE_SCROLL_INSENSITIVE 23 ,ResultSet.CONCUR_READ_ONLY); 24 PreparedStatement st3 = conn.prepareStatement(sql3 25 ,ResultSet.TYPE_SCROLL_INSENSITIVE 26 ,ResultSet.CONCUR_READ_ONLY); 27 System.out.println("MySQLに接続できました!"); 28 ResultSet rs = st.executeQuery(sql1); 29 ResultSet rs2 = st2.executeQuery(sql2); 30 ResultSet rs3 = st3.executeQuery(sql3); 31 32 33 34 JTextField aryTF[] = new JTextField[7] 35 aryTF[0] = JTextField1; 36 aryTF[1] = JTextField2; 37 aryTF[2] = JTextField3; 38 aryTF[3] = JTextField4; 39 aryTF[4] = JTextField5; 40 aryTF[5] = JTextField6; 41 42 43 44 while (rs.next()) { 45 //aにDBの値を代入 46 47 String a0 = rs.getString("ID"); 48 String a2 = rs.getString("CD"); 49 String a4 = rs.getString("住所"); 50 String a5 = rs.getString("日付"); 51 52 //テキストフィールドにaをセット 53 aryTF[0].setText(a0); 54 aryTF[2].setText(a2); 55 aryTF[4].setText(a4); 56 aryTF[5].setText(a5); 57 58 59 60 } 61 62 while(rs2.next()) { 63 String a3 = rs2.getString("職種"); 64 aryTF[3].setText(a3); 65 } 66 while(rs3.next()) { 67 String a1 = rs3.getString("名前"); 68 aryTF[1].setText(a1); 69 } 70 71 72 st.close(); 73 conn.close(); 74 rs.close(); 75 rs2.close(); 76 rs3.close(); 77 78 } catch (ClassNotFoundException | SQLException e) { 79 System.out.println("SQLExeception:" + e.getMessage()); 80 } 81 } 82
//次のレコードへのボタン設定 class r_tugi implements ActionListener{ public void actionPerformed(ActionEvent e) { if (e.getSource() == r_tugi) { } } }

DB内容
Adata
カラム名 id・CD・住所・日付
レコード数、各カラムに50行

Bdata 
カラム名 職業
レコード数 各カラムに50行

Cdata 
カラム名 名前
レコード数 50行

下記の画像がボタンのイメージになります。
イメージ説明

Windows10
mySQLserver 5.7
mySQL Workbench8.0

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

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

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

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

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

guest

回答1

0

いわゆる「ページング」かと思いますが、ロジックは探せばいくらでも見つかると思います。言語は違ってもやることは同じ。

今何ページなのか決まれば前と次が決まります。1引く、1足す
最初は1で固定
最後はページ数とイコールです。

ページ数は「件数が何件か」「1ページに何件表示するか」が分かれば計算できますし計算式も出尽くしたものなので調べれば出てきます。

今何ページなのか
1ページに何件表示するのか
が、あれば、データの何件目から何件目を取得するのが決まります。
offset/limit
です。

あとはページ遷移毎に今のページ番号を持っているフィールドを更新していくだけです。

まずはSQLでoffset/limit、および全件数取得を組み立てるところからやってみてください。

投稿2021/04/20 06:37

m.ts10806

総合スコア80875

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

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

mmatt

2021/04/20 06:52

ご回答ありがとうございます。 ページング知りませんでした、調べたらたくさん出てきました。 今から、調べてやってみます。 ニュアンスとしてはJavaで次レコードに移動と言うよりは、SQL文で指定して1行ずつ取り出すってことでしょうか。
m.ts10806

2021/04/20 06:59

>Javaで次レコードに移動と言うよりは、SQL文で指定して1行ずつ取り出す 表現が微妙ですが感覚は理解されてる通りと思います。 「SQLで欲しいところだけ取得してくる」ということですね。 ただ、ページ番号はJavaからパラメータとして渡す必要があります。
mmatt

2021/04/20 07:57

ページングについて調べてみたのですが、私の質問の仕方が悪く、 目的のイメージと少し違いましたので、質問文のほうに追記しました。 引き続き、下記のSQL文を変えてみて、実装できるか試そうと思います。 String sql1 = "select * from Adata limit 1;"; String sql2 = "select * from Bdata limit 1;"; String sql3 = "select * from Cdata limit 1;"; もし、Javaの方で下記の活用・記入方法わかる方がいましたら、回答お待ちしています。 1.next() 2.previous() 3.first() 4.last()
m.ts10806

2021/04/20 08:03

コードで提示するより画面イメージや処理フローを提示されたほうが良いかと思います。 文章より図のほうがずっと伝わりやすいです
m.ts10806

2021/04/20 08:04

でも、結局「ほしいデータだけとってくる」部分は変わらないと思いますが。
mmatt

2021/04/20 08:10

おっしゃる通りです、先に画像を載せておくべきでした、すいません。 SQL文を変更する、という考え方は間違えてないでしょうか。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問