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

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

ただいまの
回答率

87.48%

ArrayList<String[]>では対応できないので対応できるようにするには?

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,128

score 15

追記※すみません。質問がわかりづらいので現在使っているjavaファイルをすべて載せます。
使っているjavaファイルは

Controller.java
DataAccess.java
Model.java
TitleListResult.java
ConnectUtilMy.java

の五つと
view.jspというファイルも使っています。

なお,実際のシステムでは,画面から入力された情報でデータベースを検索しますが,まずは,Controllerのプログラム内で,検索
のキーワードと,タイトル名か監督名か主演名かそのどれでもよいかを
識別する情報として,固定した値を設定して,Modelクラスに検索させる形でかまわないということになりました。

sqlでデータベースを作りそれをjavaを使ってhtml上で検索するというシステムを作っています。
映画のタイトルや公開年数などの情報が複数詰まったデーターベースを作成して、html上で検索しようとしているところのなのですがうまくいきません。
メールで次にどうしろと指示をいただいているのですが難しくよくわからないです。

Model.javaというファイル内でデータベースを検索した結果を取得したいのですが
今のModel.javaのArrayList<String[]>では対応できないということになっています。

すでにDataAcces.javaという以前作ったファイルのようにHashMapかArrayListで対応してくれ
というのですがDataAcces.javaのどこの部分がその対応している部分なのか、それとそうした場合
Model.javaではどう変更したらHashMapかArrayListで対応するのか教えてほしいです。

```  

// パッケージの指定  
package movie;  

import java.util.*;  
import java.io.*;  
import javax.servlet.*;  
import javax.servlet.http.*;  
import javax.servlet.annotation.*;  

// サーブレットの名前(ここでは,Controllerというクラス名)を指定する  
@WebServlet(name = "Controller", urlPatterns = {"/Controller"})  
public class Controller extends HttpServlet {  
protected void doPost(HttpServletRequest request, HttpServletResponse response)  
throws ServletException, IOException {  

// view.jspで入力された検索キーkeyNumの値を取得する  
String q = request.getParameter("keyNum");  
q = new String(q.getBytes("8859_1"), "Windows-31J");  

if (q != null) {  
// Modelクラスのインスタンスを生成する  
Model model = new Model();  
// 検索キーを設定する  
model.setQ(q);  

// 検索を実行する  
model.execute();  
// 検索結果を取得する  
ArrayList<String[]> results = model.getResults();  
// view.jspに検索結果を渡す  
request.setAttribute("results", results);  
}  

// view.jspに処理を転送する  
getServletContext().getRequestDispatcher("/view.jsp").forward(request, response);  
}  
}  

ConnectUtilMy.javaの内容

package movie;  
import java.sql.*;  

public class ConnectUtilMy {  

public static Connection connectDatabase() throws SQLException {  
Connection conn = DriverManager.getConnection(  
"jdbc:mysql://127.0.0.1/moviedb?"  
+ "useUnicode=true&characterEncoding=WINDOWS-31J&useSSL=false&serverTimezone=JST",  
"root", "root2020");  
return conn;  
}  
}  




こちらがModel.javaです  

package movie;  

import java.util.*;  
import java.sql.*;  

public class Model {  
private String q;  
private ArrayList<String[]> results;  
private Connection conn = null;  
private PreparedStatement stmt = null;  
private ResultSet resultSet = null;  



public void execute(){  
System.out.println("Hello");    

try {        
conn = ConnectUtilMy.connectDatabase();  


// 条件を絞っての検索  
PreparedStatement pstmt = conn.prepareStatement(  
"SELECT title_name,years_publication,performance_income,production_cost,public_evaluation,screening_time,genre_name,original_name,cast_name,directed_name " +  
"FROM movie inner join original_list on movie.original_number=original_list.original_number "+   
"inner join genre_list on movie.genre_number=genre_list.genre_number "+   
"inner join directed_list on movie.directed_number=directed_list.directed_number "+  
"inner join cast_list on movie.cast_number=cast_list.cast_number where title_name like ? or directed_name like ?");  
pstmt.setString(1, q + "%");  
pstmt.setMaxRows(50);  
ResultSet rs = pstmt.executeQuery();  

// 検索結果の取得  
results = new ArrayList<String[]>();  
while (rs.next()) {  
String[] result = new String[10];  
result[0] = rs.getString("movie_number");  
result[1] = rs.getString("years_publication");  
result[2] = rs.getString("performance_income");  
result[3] = rs.getString("production_cost");  
result[4] = rs.getString("public_evaluation");  
result[5] = rs.getString("screening_time");  
result[6] = rs.getString("genre_number");  
result[7] = rs.getString("directed_number");  
result[8] = rs.getString("original_number");  
result[9] = rs.getString("cast_number");  

results.add(result);  
}  

// 切断  
rs.close();  
pstmt.close();  
conn.close();  
}  
catch (Exception ex) {  
ex.printStackTrace();  
}  
}  

public ArrayList<String[]> getResults() {  
return results;  
}  

public void setQ(String q) {  
this.q = q;  
}  
}  
package movie;  
import java.sql.*;  
import java.util.HashMap;  

public class DataAccess   
{         
private Connection conn = null;  
private PreparedStatement stmt = null;  
private ResultSet resultSet = null;  
private HashMap<Integer,TitleListResult>Title_hash;  




private String sql = null;       


public HashMap<Integer,TitleListResult>result_search(String search){  
Title_hash = new HashMap<>();  
int i = 0;  


try {  
sql = "SELECT title_name,years_publication,performance_income,production_cost,public_evaluation,screening_time,genre_name,original_name,cast_name,directed_name " +  
"FROM movie inner join original_list on movie.original_number=original_list.original_number "+   
"inner join genre_list on movie.genre_number=genre_list.genre_number "+   
"inner join directed_list on movie.directed_number=directed_list.directed_number "+  
"inner join cast_list on movie.cast_number=cast_list.cast_number where title_name like ? or directed_name like ?";  
conn = ConnectUtilMy.connectDatabase();  
stmt = conn.prepareStatement(sql);  
stmt.setString(1,"%"+search+"%");  
stmt.setString(2,"%"+search+"%");  
System.out.println(search);  
resultSet = stmt.executeQuery();  
while (resultSet.next()) {  
TitleListResult result = new TitleListResult();  
result.Set_Title_name( resultSet.getString("title_name"));  
result.Set_years_publication( resultSet.getString("years_publication"));  
result.Set_performance_income( resultSet.getDouble("performance_income"));  
result.Set_Production_cost( resultSet.getDouble("production_cost"));  
result.Set_performance_income( resultSet.getDouble("performance_income"));      
result.Set_Public_evaluation( resultSet.getDouble("public_evaluation"));  
result.Set_Screening_time( resultSet.getString("screening_time"));  
result.Set_Genre_name( resultSet.getString("genre_name"));  
result.Set_directed_name( resultSet.getString("directed_name"));  
result.Set_cast_name( resultSet.getString("cast_name"));  
result.Set_original_name( resultSet.getString("original_name"));  

Title_hash.put(i,result);  
i++;  


}  
}  
catch (SQLException ex) {  
System.out.println("エラーコード:" + ex.getErrorCode());  
System.out.println("SQL状態:" + ex.getSQLState());  
ex.printStackTrace();  
}  
finally {  
try {  
if (resultSet != null) {  
resultSet.close();  
}  
}  
catch (SQLException ex) {  
ex.printStackTrace();  
}  
try {  
if (stmt != null) {  
stmt.close();  
}  
}  
catch (SQLException ex) {  
ex.printStackTrace();  
}  
try {  
if (conn != null) {  
conn.close();  
}  
}  
catch (SQLException ex) {  
ex.printStackTrace();  
}  

}  
return Title_hash;  
}   




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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • kaibasira

    2020/08/04 16:58 編集

    なるほど、ではHashMapのほうで進めてみるのでArrayListをHashMapに直してみます

    その場合はModel.javaをhashmapになおしていけばいいんですよね

    キャンセル

  • m.ts10806

    2020/08/04 17:08

    >時間がないというのも正直なところあります。
    だからといってポンポン投げていては「解決する気なし」とみられます。ご注意を。
    (それに時間がないとか他人には関係ないことです)

    キャンセル

  • kaibasira

    2020/08/04 17:16

    そうですね。仰る通りです。
    ごちゃごちゃしてきてよくわからなくなってきたのでいったん質問を新しく作りますね

    キャンセル

回答 1

checkベストアンサー

+2

メールで次にどうしろと指示をいただいているのですが難しくよくわからないです。

自分が理解していること、考えたこと、わからないことなどをまとめた上で、さらに相談してください。「依頼者のイメージと違う方向に進んでしまう」のでは、誰も得をしません。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/08/04 11:05

    やはり、指示者に聞くべきですね。

    キャンセル

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

  • ただいまの回答率 87.48%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る