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

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

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

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

JDBC

JDBC(Java DataBase Connectivity)は、Javaとリーレーショナルデータベースに接続させる基本的なAPIです。Java上でSQLステートメントを発行することで、データベースの種類に影響を受ないDB操作を可能とします。

Java

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

Q&A

0回答

526閲覧

JDBCについての質問

Nagasaki

総合スコア1

MySQL

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

JDBC

JDBC(Java DataBase Connectivity)は、Javaとリーレーショナルデータベースに接続させる基本的なAPIです。Java上でSQLステートメントを発行することで、データベースの種類に影響を受ないDB操作を可能とします。

Java

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

0グッド

0クリップ

投稿2022/05/07 15:15

データベースにアクセスするDAOを作成し、実行イメージのようになるようなプログラムを作りたいのですが、上手くいきません。色々調べながらやったのですが、エラーも多く、どこから直していけばよいのでしょうか?

実行イメージ 実行が成功したとき
*** 特定の年齢層の従業員の指名のリストを取得 ***
20歳から29歳の従業員:山田花子 佐藤愛

データベース(PKはcode)
+--------+--------------+------+-----------+
| code | name | age | section |
+--------+--------------+------+-----------+
| 201021 | 田中一郎 | 35 | 営業部 |
| 201024 | 山田花子 | 25 | 営業部 |
| 201042 | 鈴木正雄 | 30 | 開発部 |
| 201047 | 高橋和男 | 39 | 開発部 |
| 201063 | 佐藤愛 | 23 | 研修部 |
+--------+--------------+------+-----------+

プログラム
package ex;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class ConnectionManager {

private final static String URL = "jdbc:mysql://localhost:3306/sampledb";

/* データベースのユーザとパスワード */
private final static String USER = "????";
private final static String PASSWORD= "???";

/**

  • データベースへの接続を取得して返す。
  • @return コネクション
  • @throws SQLException

*/

public static Connection getConnection() throws SQLException {

return DriverManager.getConnection(URL, USER, PASSWORD);

}
}

package ex;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

/**

  • m_employeeテーブルのDAO。

*/
public class EmployeeDAO {

public List<String> selectName(int maxAge,int minAge) throws SQLException {

List<String> nameList = new ArrayList<String>(); //氏名

// URL・ユーザ名・パスワードの設定
String url = "jdbc:mysql://localhost:3306/sampledb";
String user = "????";
String password = "???";

// データベースへの接続の取得、PreparedStatementの取得
try (Connection con = ConnectionManager.getConnection();
PreparedStatement pstmt
= con.prepareStatement("SELECT name FROM m_employee WHERE minAge <= maxAge = ?")) {

// プレースホルダへの値の設定
pstmt.setString(1, age);

// SQLステートメントの実行
ResultSet res = pstmt.executeQuery();

// 結果の操作
while (res.next()) {
nameList.add(res.getString("name"));
}
}

return nameList;

}

}
}

package ex;

import java.sql.SQLException;
import java.util.List;

/**

  • EmployeeDAOを使った業務処理を行うクラス。

*/
public class Test {

public static void main(String[] args) {

// データベースアクセスオブジェクトの生成
ConnectionManager cm = new ConnectionManager();

// データベースアクセスオブジェクトの利用
try{
System.out.println("*** 特定の年齢層の従業員の指名のリストを取得 ***");
int age = minAge <= maxAge
List<String> nameList = dao.selectNameList(age);

System.out.println(minAge + "歳から" + maxAge "の従業員:" for (String selectedName : nameList); System.out.println(selectedName + " "); } catch (Exception e) {

System.out.println("処理結果:異常が発生しました。");
e.printStackTrace();
}
}
}

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

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

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

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

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

episteme

2022/05/07 15:18

「上手くいきません」を説明してください。 # 具合が悪い の一言で薬を出してくれる医者はいません。
jimbe

2022/05/07 17:17

コードはマークダウンの ``` の範囲に収まるようにしてください。 でないと通常のテキストとして記号類でフォーマットされてしまいます。
cx20

2022/05/07 17:23

なんとなくですが、データベースに接続できない、というようなエラーが出ているのではないかと思います。 まずは接続テストを行いデータベースに接続が行えることを確認下さい。
hoshi-takanori

2022/05/07 21:02

WHERE minAge <= maxAge = ? という条件がおかしいのでは。 あと、int age = minAge <= maxAge も…。
Nagasaki

2022/05/07 21:23

そこら辺がおかしいのはわかるのですが、どのように条件を設定すればいいのかがよくわかりません
Nagasaki

2022/05/07 21:30

上手くいかないというのは実行すらできないということです。条件の部分やTestクラスでの処理が間違っているのはわかるのですが、正しい条件の設定と処理の仕方がわかりません。
maisumakun

2022/05/07 21:53

> 上手くいかないというのは実行すらできないということです。 何かしらのエラーメッセージは表示されていませんか?
hoshi-takanori

2022/05/07 22:44

うーん、突っ込みどころが多すぎる…。 条件の書き方ですが、まず 20 才以上 29 才以下の従業員を求める SQL 文を普通に書いて、mysql コマンドなどで直接実行してみましょう。そして、プログラムで書き換えたいところを ? に置き換えます。(? は 2 つ出てくるはず。) EmployeeDAO.java - selectName の引数の順番は minAge, maxAge の方が自然では…。 - url, user, password は ConnectionManager に書いてあるので、ここには不要。 - SQL 文には ? が 2 つ出てくるはずなので、pstmt.setなんとか() も 2 回必要。そして、その型は文字列ですか? Test.java - ConnectionManager には static メソッドしかないので、new する必要はないかな。 - int age = 〜 の代わりに、たぶん 2 つの値を入力する必要があるのでは。 - EmployeeDAO は new する必要があります。 - dao.selectNameList のメソッド名が違うのと、引数は 2 つ必要です。(そして、順番に注意。) - System.out.println の中身が中途半端なので直しましょう。 - for (String selectedName : nameList) の後ろに ; があるので、何もしないループになってます。
m.ts10806

2022/05/08 01:49

質問は編集できますので適宜調整を
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問