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

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

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

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

JDBC

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

Java

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

2回答

879閲覧

JDBCとJSPを用いた住所検索システムを作成したい

ko0220saku

総合スコア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で作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2023/01/29 16:13

編集2023/01/29 23:13

前提

課題の一環で、MySQLのデータベースを利用し、JSPを用いた住所検索システムを作成中です。

実現したいこと

郵便番号または住所(文字列・部分一致)を入力して検索可能となる仕様にしたい。
条件は以下の通り。

  • 1.jspでテキストボックスを2つ配置する。
  • 2.jspで2つのパラメータを取得する。
  • Zip1.javaの「dataload」メソッドを2つの引数にする。

発生している問題・エラーメッセージ

Webブラウザに

エラーの表示 データベースに接続できませんでした。

というように2.jspに記載されているエラーメッセージが表示されます。

該当のソースコード

1.jsp

1<html> 2 <head> 3 <a href="../11-3/1.jsp"></a> 4 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 5 <title>郵便番号検索フォーム</title> 6 </head> 7 <body> 8 <header> 9 <h1>郵便番号検索フォーム</h1> 10 </header> 11 <article> 12 <form action="2.jsp" method="post"> 13 郵便番号:<input type="text" name="code" value="" size="30" /><br /> 14 住所:<input type="text" name="address" value="" size ="30" /><br /> 15 <input type="submit" value="送信"> 16 </form> 17 </article> 18 </body> 19</html>

2.jsp

1<%@page contentType="text/html" pageEncoding="UTF-8" %> 2<jsp:useBean id="zip" scope="session" class="ex11.Zip1" /> 3 4<% /* エンコード */ 5 6 request.setCharacterEncoding("UTF-8"); 7 8 /* 変数の宣言 */ 9 String code = ""; 10 String address =""; 11 12 /* パラメータの取得 */ 13 if ((request.getParameter("code") != null) || (request.getParameter("address") != null)) { 14 if(request.getParameter("code") != null){ 15 code = request.getParameter("code"); 16 } 17 if(request.getParameter("address") != null){ 18 address = request.getParameter("address"); 19 } 20 21 /* データ一覧の取得メソッド */ 22 try { 23 zip.dataload(code, address); 24%> 25<jsp:forward page="3.jsp" /> 26<% 27} catch (Exception e) { 28%> 29 30<!DOCTYPE html> 31<html> 32 <head> 33 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 34 <title>エラーの表示</title> 35 </head> 36 <body> 37 <header> 38 <h1>エラーの表示</h1> 39 </header> 40 <article> 41 データベースに接続できませんでした。 42 </article> 43 </body> 44</html> 45 46<% 47 } 48} 49%>

3.jsp

1<%@page contentType="text/html" pageEncoding="UTF-8"%> 2<jsp:useBean id="zip" scope="session" class="ex11.Zip1" /> 3 4<!DOCTYPE html> 5<html> 6 <head> 7 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 8 <title>住所の表示</title> 9 <!-- Google Maps APIを読み込む --> 10 <script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script> 11 <script type="text/javascript" src="maps.js"></script> 12 </head> 13 <body onload = "initialize()"> 14 <header> 15 <h1>住所の表示</h1> 16 </header> 17 <article> 18 データ件数:<%= zip.getNum()%> 19 <table border="1"> 20 <tr><th>郵便番号</th><th>住所</th></tr> 21 <% for (int i = 0; i < zip.getNum(); i++) {%> 22 <tr><td><%= zip.getCode(i)%></td><td <%= "id=\"address" + i + "\""%>><%= zip.getAddress1(i) + zip.getAddress2(i) + zip.getAddress3(i)%></td></tr> 23 <% }%> 24 </table> 25 26 </article> 27 </body> 28</html>

Zip1.java

1package ex11; 2 3import java.sql.*; 4 5public class Zip1 { 6 7 /* 1. フィールドの定義 */ 8 protected String[] code = new String[20]; //郵便番号 9 protected String[] address1 = new String[20]; //住所1 10 protected String[] address2 = new String[20]; //住所2 11 protected String[] address3 = new String[20]; //住所3 12 protected int num; 13 14 /* 2. メソッド */ 15 /* 2.1 データベースからのデータ取得メソッド */ 16 public void dataload(String code, String address) throws Exception { //エラー処理が必要にする 17 18 /* 2.1.1 データベースに接続 */ 19 Class.forName("com.mysql.jdbc.Driver").newInstance(); //com.mysql.jdbc.Driverはドライバのクラス名 20 String url = "jdbc:mysql://localhost/class2?characterEncoding=UTF-8"; //データベース名は適宜修正:文字エンコードはUTF-8 21 Connection conn = DriverManager.getConnection(url, "class", "class"); //上記URL設定でユーザ名とパスワードを使って接続 22 23 /* 2.1.2 SELECT文の実行 */ 24 String sql = "SELECT * FROM zip WHERE code LIKE ? OR CONCAT (address1, address2, address3) LIKE ? ORDER BY code"; //SQL文の設定 ?などパラメータが必要がない場合は通常のStatementを利用 25 PreparedStatement stmt = conn.prepareStatement(sql); //JDBCのステートメント(SQL文)の作成 26 stmt.setString(1, code + "%"); //Like文で曖昧検索 27 stmt.setString(2, "%"+ address + "%"); //Like文で曖昧検索 28 stmt.setMaxRows(100); //最大の数を制限 29 ResultSet rs = stmt.executeQuery(); //ステートメントを実行しリザルトセットに代入 30 31 /* 2.1.3 結果の取り出しと表示 */ 32 num = 0; 33 while (rs.next()) { //リザルトセットを1行進める.ない場合は終了 34 this.code[num] = rs.getString("code"); 35 this.address1[num] = rs.getString("address1"); 36 this.address2[num] = rs.getString("address2"); 37 this.address3[num] = rs.getString("address3"); 38 num++; 39 } 40 41 /* 2.1.4 データベースからの切断 */ 42 rs.close(); //開いた順に閉じる 43 stmt.close(); 44 conn.close(); 45 } 46 public String getCode(int i) { 47 if (i >= 0 && num > i) { 48 return code[i]; 49 } else { 50 return ""; 51 } 52 } 53 public String getAddress1(int i) { 54 if (i >= 0 && num > i) { 55 return address1[i]; 56 } else { 57 return ""; 58 } 59 } 60 public String getAddress2(int i) { 61 if (i >= 0 && num > i) { 62 return address2[i]; 63 } else { 64 return ""; 65 } 66 } 67 public String getAddress3(int i) { 68 if (i >= 0 && num > i) { 69 return address3[i]; 70 } else { 71 return ""; 72 } 73 } 74 public int getNum() { 75 return num; 76 } 77}
//以下SQLデータベースの例 //テーブル名”zip" +----+--------+---------+---------+--------------+--------------+--------------+----------+------------+----------+ | id | jis | oldcode | code | address1ruby | address2ruby | address3ruby | address1 | address2 | address3 | +----+--------+---------+---------+--------------+--------------+--------------+----------+------------+----------+ | 2 | 01101 | 064 | 0640941 | ホッカイドウ | サッポロシチュウオウク | アサヒガオカ | 北海道 | 札幌市中央区 | 旭ケ丘 | +----+--------+---------+---------+--------------+--------------+--------------+----------+------------+----------+

試したこと

エラーの問題点としてSQL文が間違っていると予想し、SELECT句、CONCATを中心に色々調べ、変更してみたのですがエラーメッセージは変わらず…
SQL文が誤っている場合どう変更すればいいか、また、その他問題点があれば教えてください。

環境

Apache NetBeans IDE 15
MySQL 8.0.31

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

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

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

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

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

jimbe

2023/01/29 16:50

jdbc ドライバの jar ファイル(バージョン)もご提示ください、
退会済みユーザー

退会済みユーザー

2023/01/29 20:54

これですかね? mysql-connnctor-j-8.0.31.jar 以前別のプログラムを組んだ時は普通に使用可能でしたので問題ないかとは思いますが…
ko0220saku

2023/01/29 21:04

誤って別のアカウントで返信を行ってしまいました(qk5454は自分です)
hoshi-takanori

2023/01/29 21:48

catch の中で e.printStackTrace(); とかして例外のスタックトレースを表示してみては。(どこに表示されるか知りませんが…)
jimbe

2023/01/30 02:07 編集

>別のアカウント 利用規約 https://teratail.com/legal 第7条(禁止事項) (11)複数のユーザーIDを1人で保有する行為 の違反です。
ko0220saku

2023/01/30 03:00

申し訳ありませんでした。 経緯としては、そもそもこのアカウントで質問をするつもりはなく、片方のアカウントで先程の返信をし、違和感から複垢所持に初めて気付きました。ログイン時の自分の確認不足です。可能なら片方のアカウントは消します。
guest

回答2

0

自己解決

SQL文の
SELECT * FROM zip WHERE code LIKE ? OR CONCAT (address1, address2, address3) LIKE ? ORDER BY code

OR をANDに変えると正常に動作しました。

投稿2023/01/31 06:49

ko0220saku

総合スコア1

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

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

0

com.mysql.jdbc.Driver

JDBC ドライバ名が違っている、ということはありませんか?
MySQL 8.x 以降では JDBC ドライバ名が変更されています。

■ MySQL8.xとのJDBC接続 ※注意事項※
https://qiita.com/syoki/items/3d82ef00300868353572

8.x以前:「com.mysql.jdbc.Driver」
8.x:「com.mysql.cj.jdbc.Driver」

投稿2023/01/29 16:24

cx20

総合スコア4633

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

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

退会済みユーザー

退会済みユーザー

2023/01/29 21:01

以前全く同じバージョンかつcom.mysql.jdbc.DriverでJDBCを使用した際は正常に動作していましたのでそこは問題ないかと思います。
ko0220saku

2023/01/29 21:05

誤って別のアカウントで返信を行ってしまいました。(qk5454は自分です)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問