追記※すみません。質問がわかりづらいので現在使っている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; }
}
回答1件
あなたの回答
tips
プレビュー