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

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

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

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

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

1回答

410閲覧

java MySQL データの取り込み方について

suzuki00

総合スコア15

Java

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

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

0クリップ

投稿2019/03/21 12:34

編集2019/03/21 15:19

前提・実現したいこと

前提:下記のコードで今MySQLからテーブル(データ)が取れています。

実現したいこと:これにもうひとつ別のテーブルを取りたいのですが、どこに何を書けば取れるのでしょうか。(エクリプスのコンソール画面に表示させたいです。)

発生している問題

2つのテーブルを表示させることができない。

試したこと

同じようなコードがないかの検索等

補足情報

MySQLのデータベース
エクリプス
を使用しております。

java

1package sbsample2; 2 3import java.sql.Connection; 4import java.sql.DriverManager; 5import java.sql.ResultSet; 6import java.sql.SQLException; 7import java.sql.Statement; 8import java.util.ArrayList;

コード

public class Dbsampless { public static void main(String[] args) { String url = "ディレクトリ"; String user = "ユーザ名"; String password = "パスワード"; Connection con = null; Statement ste = null; ResultSet res = null; try { con = DriverManager.getConnection(url,user, password); System.out.println("接続できました。"); ste=con.createStatement(); String sqlStr = "SELECT id, name, age, position, updatetime FROM sample ORDER BY id;"; res = ste.executeQuery(sqlStr); ArrayList li = new ArrayList(); while (res.next()){ Dbsampless2 db2 = new Dbsampless2(); db2.setId(res.getInt(1)); db2.setName(res.getString(2)); db2.setAge(res.getInt(3)); db2.setPosition(res.getString(4)); db2.setUpdatetime(res.getDate(5)); li.add(db2); } for(int i =0 ; i<li.size() ; i++) { Dbsampless2 db3 = (Dbsampless2) li.get(i); li.get(i); System.out.print(db3.getId()+";"); System.out.print(db3.getName()+";"); System.out.print(db3.getAge()+";"); System.out.print(db3.getPosition()+";"); System.out.print(db3.getUpdatetime()+";"); System.out.println(); } } catch (SQLException e) { System.out.println("接続できませんでした。"); e.printStackTrace(); } finally { try { if (res != null) { res.close(); } if(ste != null) { ste.close(); } if(con != null) { con.close(); System.out.println("閉じました。"); } } catch (SQLException e) { System.out.println("クローズに失敗しました。"); } } } }

java

1package sbsample2; 2 3import java.util.Date; 4 5public class Dbsampless2 { 6 7 private int id; 8 private String name; 9 private int age; 10 private String position ; 11 private Date updatetime; 12 13 public int getId() { 14 return id; 15 } 16 public void setId(int id) { 17 this.id = id; 18 } 19 public String getName() { 20 return name; 21 } 22 public void setName(String name) { 23 this.name = name; 24 } 25 public int getAge() { 26 return age; 27 } 28 public void setAge(int age) { 29 this.age = age; 30 } 31 public String getPosition() { 32 return position; 33 } 34 public void setPosition(String position) { 35 this.position = position; 36 } 37 public Date getUpdatetime() { 38 return updatetime; 39 } 40 public void setUpdatetime(Date updatetime) { 41 this.updatetime = updatetime; 42 } 43}

sql

1mysql> select * from sample; 2+------+--------+------+-----------+------------+ 3| id | name | age | position | updatetime | 4+------+--------+------+-----------+------------+ 5| 1 | 石田 | 25 | 社長 | 2019-03-21 | 6| 2 | 斉藤 | 23 | 副社長 | 2019-03-21 | 7| 3 | 秋山 | 24 | 部長 | 2019-03-21 | 8| 4 | 迫田 | 24 | 係長 | 2019-03-21 | 9+------+--------+------+-----------+------------+ 104 rows in set (0.00 sec) 11 12mysql> select * from sample2; 13+------+--------+------+----------+------------+ 14| id | name | age | position | updatetime | 15+------+--------+------+----------+------------+ 16| 1 | 岸田 | 22 | 係長 | 2019-03-21 | 17+------+--------+------+----------+------------+

sql

1mysql> create table sample(id int,name varchar(20),age int,position varchar(20) ,date date);

sql

1mysql> create table sample2(id int, name varchar(20), age int, position varchar(20) , updatetime date);

sql

1insert into sample(id, name, age, position, updatetime)values(1, '石田', 25, ' 社長', '2019-03-21'),(2, '斉藤', 23, ' 副社長', '2019-03-21'),(3, '秋山', 24, ' 部長', '2019-03-21'),(4, '迫田', 24, ' 係長', '2019-03-21');

sql

1insert into sample(id, name, age, position, updatetime)values(1, '岸田', 22, ' 係長', '2019-03-21');

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

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

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

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

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

terminator

2019/03/21 13:01

「MySQL」一つの単語を、全角半角混ざって表現することに気持ち悪さを持たないことがバグだと思います。
m.ts10806

2019/03/21 13:13

コードはマークダウンのcode機能を利用してご提示ください。 >もうひとつ別のテーブルを取りたい そのテーブルが今現在とれているというテーブルとはどういう関係性にあるのでしょうか。 単にとるだけなら同じようにSELECT書けば良いだけのはずですが、「アウトプットの形」次第では変わります。 出力したい結果の形を具体的に記載してください。
suzuki00

2019/03/21 13:23

>コードはマークダウンのcode機能を利用してご提示ください。 そのような機能があるんですね、ありがとうございます。 >出力したい結果の形を具体的に記載してください。 エクリプスのコンソールに出力したいです。
m.ts10806

2019/03/21 13:36

質問は編集できるので適宜ご対応いただけたらと。 あと「ヘルプ」「質問するときのヒント」を一読して質問を再編されたほうが回答を得やすくなると思います。
suzuki00

2019/03/21 13:39

>質問は編集できるので適宜ご対応いただけたらと。 編集できるんですね。すこしいじってみます。
m.ts10806

2019/03/21 13:47

細かくて申し訳ないですが、code部分は1ファイル1ブロックのほうが見やすいです。(あとコードだけにしてください) 質問編集画面の右側はリアルタイムでプレビュー出てるはずなので、読みやすいかとか確認しながら調整してください。
suzuki00

2019/03/21 14:02

>code部分は1ファイル1ブロックのほうが見やすいです。(あとコードだけにしてください) 遅くなりました。修正いたしました。
m.ts10806

2019/03/21 14:05

もしかして、下記意味が分かってなかったりしますか?  ------------------------ そのテーブルが今現在とれているというテーブルとはどういう関係性にあるのでしょうか。 単にとるだけなら同じようにSELECT書けば良いだけのはずですが、「アウトプットの形」次第では変わります。 ------------------------
suzuki00

2019/03/21 14:08

>SELECT書けば良いだけのはずです すみません。これがわかりません。
m.ts10806

2019/03/21 14:11

1行目のほうが大事です。「別のテーブルはどういう関係性にあるのか」 例えば最初にとれているテーブルのidを使ってとる必要がある、とか。(親子関係があるとか)そのあたりです。 テーブルの定義でもご提示いただければもう少し回答もしやすいのですが。。 そもそも、今なぜsampleテーブルのデータが取得できているかも理解できていなかったりしますか?
suzuki00

2019/03/21 14:17

>今なぜsampleテーブルのデータが取得できているかも理解できていなかったりしますか? いろいろなものを見ながら何とか、ぎりぎりわかっている・・・つもりです。 >idを使ってとる必要がある、とか。(親子関係があるとか) なるほど、これによってコードが違うということですね。 テーブルは同じデータベース内にあります。IDなどの項目も同じです。
m.ts10806

2019/03/21 14:24

えっと、できればテーブルの定義をください。両方のテーブル。 テーブル名とカラムとカラムの型がわかればいいですが、CREATE TABLE文といってそのテーブルを作るときに実行されたSQLが一番良いです。(どのようなツールを使って作っても裏ではCREATE TABLE文が実行されています。ツールのエクスポート機能でも出力できるはずです) また >SELECT書けば良いだけのはずです について解説しますと、sampleテーブルを実行してデータを取得して・・・とやっていますよね。それと同じ流れをもう1つのテーブルでやりましょう ということです。(変数定義などは別途そのテーブル用にあった方がいいですし、Dbsampless2クラスを作られてますが、テーブルが違うのなら構成が同じでも別のクラスを作るのが理想ですが、それはとりあえず次の段階で)
suzuki00

2019/03/21 14:42

>テーブル名とカラムとカラムの型がわかればいい SQL文を追加しました。
m.ts10806

2019/03/21 14:44

惜しい。INSERT文もあれば越したことはないですが「CREATE TABLE」です。テーブル作らないとINSERT文実行してもデータ入りません。 えーと、どうしようかな。
suzuki00

2019/03/21 14:52

>「CREATE TABLE」です。 遅くなりました。再度SQL文を追加しております。
m.ts10806

2019/03/21 14:55

あ、ちょっと違うんですね。 sampleのほうが date date になってます(コンソールで実行したときと結果が違うような・・?)
suzuki00

2019/03/21 14:58

>date date になってます すみません。date → updatetime です。
m.ts10806

2019/03/21 15:16

了解です。 ということは2つのテーブルの項目は名前も定義も同じなんですね。 お手数ですが修正願います(ここのコメント欄は非表示なので、今から見た人に誤解与えないためにも) では、回答した内容↓で「とりあえずは」やりたいことはできそうです。
guest

回答1

0

ベストアンサー

まったく同じ構成のテーブルのようなので

java

1String sqlStr = "SELECT id, name, age, position, updatetime FROM sample ORDER BY id;";

としているSQLを下記のようにテーブル名だけ変えればsample2のデータが取得できます。

java

1String sqlStr = "SELECT id, name, age, position, updatetime FROM sample2 ORDER BY id;";

あとは、sampleとsample2をどう絡ませたいか、だけです。
そこは仕様なので作る人が決める必要があります。

「両方のデータを出力して並べたいんだ」というのであれば、同じ流れの処理をSELECT文のテーブル名のところだけを変えて2回書けばとりあえずやりたいことはできます。

同じ流れの処理

java

1String sqlStr = "SELECT id, name, age, position, updatetime FROM sample ORDER BY id;"; 2 3//中略 4 5for(int i =0 ; i<li.size() ; i++) { 6 Dbsampless2 db3 = (Dbsampless2) li.get(i); 7 li.get(i); 8 System.out.print(db3.getId()+";"); 9 System.out.print(db3.getName()+";"); 10 System.out.print(db3.getAge()+";"); 11 System.out.print(db3.getPosition()+";"); 12 System.out.print(db3.getUpdatetime()+";"); 13 System.out.println(); 14}

注意:同じスコープでString sqlStrとしてしまうと既に定義されている変数の再定義でエラーとなるはずなのでsample2のSELECT文を保管する場合はsqlStrと型部分を外してください。

もちろん、同じ処理を何度も書くのは非効率ではありますし、うまくやれば短くも書けますが、それは次の段階で。

投稿2019/03/21 14:51

m.ts10806

総合スコア80850

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

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

suzuki00

2019/03/21 15:17

今書き直してますがなぜかエラーになりました。もう少しいじってみます。
m.ts10806

2019/03/21 15:18

たぶん変数再定義あたりでしょうか。 「変数のスコープ」とかで調べると理解が進むかもしれません。
suzuki00

2019/03/21 15:20

もしクラスをもうひとつ作った場合、注意事項はありますか?
m.ts10806

2019/03/21 15:29

どのような用途のクラスをどのような構造で作るかによります。 それも「要件」「仕様」(大枠でいえば「設計」)次第となります。
suzuki00

2019/03/21 15:38

今何とか表示ができました! ただおっしゃる通り何回も同じ文を書く形になりました。 もっとスマートな文が書けるように勉強します。 長々とありがとうございました。 今日だけでもすごく勉強になりました。
m.ts10806

2019/03/21 15:40

まずは解決されたようで何よりです。 そうですね。 同じような処理は共通化、違うところは変数をうまく使ってください。 少し発想が必要ですが、これができるようになるだけで一気に色んなことが実現可能になります。
suzuki00

2019/03/21 15:59

ありがとうございます。 またわからないことがあれば質問させてください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問