Java(Servlet/JSP)で練習用に家計簿アプリを作成しています。
動きとしては、JSPから受け取る値(id, date, storeName, productName, type, price)をサーブレット「BudgetTrackerSearchController.java」で受け取り、受け取った内容を「BudgetTrackerSearchLogic.java」に渡し、Select SQLを実行し、「BudgetTrackerSearchController.java」に戻し、事項結果を変数「SqlResult」に格納し、最終的にjspファイルにSQLの結果を戻したいのですが、SQLの結果の受け渡し(BudgetTrackerSearchController.javaとBudgetTrackerSearchLogic.javaの間)がうまくできません。
下記にコードを記述していますので、SQLの結果の受け渡しについてご回答できる方がおりましたら、解決方法についてご教授頂けますでしょうか。
BudgetTrackerSearchController
1package info.budget.budgettracker; 2 3import java.io.IOException; 4import java.sql.PreparedStatement; 5import java.sql.ResultSet; 6import java.sql.SQLException; 7 8import javax.naming.InitialContext; 9import javax.naming.NamingException; 10import javax.servlet.ServletException; 11import javax.servlet.http.HttpServlet; 12import javax.servlet.http.HttpServletRequest; 13import javax.servlet.http.HttpServletResponse; 14import javax.sql.DataSource; 15 16public class BudgetTrackerSearchController extends HttpServlet { 17 18 private InitialContext ic; 19 20 public void init() throws ServletException { 21 // 初期コンテキストを取得 22 try { 23 ic = new InitialContext(); 24 } catch (NamingException e) { 25 // TODO Auto-generated catch block 26 e.printStackTrace(); 27 } 28 } 29 30 protected void doPost(HttpServletRequest request, HttpServletResponse response) 31 throws ServletException, IOException { 32 33 // 文字コードの設定 34 request.setCharacterEncoding("Windows-31J"); 35 36 // modeの取得 37 String mode = request.getParameter("mode"); 38 39 // 実行ステータスの宣言 40 String status = "Successful!"; 41 42 // データソースの取得 43 DataSource ds = null; 44 try { 45 ds = (DataSource) ic.lookup("java:comp/env/jdbc/searchman"); 46 } catch (NamingException e) { 47 // TODO Auto-generated catch block 48 e.printStackTrace(); 49 } 50 51 // JavaBeansの初期化 52 BudgetTrackerSearchLogic btSearchLogic = BudgetTrackerSearchLogicFactory.createBudgetTrackerLogic(request, ds, mode); 53 54 ResultSet rset = null; 55 try { 56 rset = btSearchLogic.searchData(); 57 } catch (Exception e) { 58 e.printStackTrace(); 59 status = "Failed!"; 60 } 61 62 63 // statusをセットして、result.jspに転送 64 request.setAttribute("status", status); 65 request.setAttribute("SqlResult", rset); 66 request.getRequestDispatcher("/searchResult.jsp").forward(request, response); 67 68 } 69 70 protected void doGet(HttpServletRequest request, HttpServletResponse response) 71 throws ServletException, IOException { 72 73 doPost(request, response); 74 } 75 76}
BudgetTrackerSearchLogic
1 2package info.budget.budgettracker; 3 4import java.sql.Connection; 5import java.sql.PreparedStatement; 6import java.sql.ResultSet; 7 8import javax.naming.InitialContext; 9import javax.servlet.ServletRequest; 10import javax.servlet.http.HttpServletRequest; 11import javax.sql.DataSource; 12 13public abstract class BudgetTrackerSearchLogic { 14 // private String yearMonth; 15 private String id; 16 private String date; 17 private String storeName; 18 private String productName; 19 private String type; 20 private String price; 21 22 // DB関連の初期設定 23 protected DataSource ds = null; 24 ResultSet rset = null; 25 26 // コンストラクタ 27 public BudgetTrackerSearchLogic(HttpServletRequest request, DataSource ds) { 28 29 setId(request.getParameter("id")); 30 setDate(request.getParameter("date")); 31 setStoreName(request.getParameter("storeName")); 32 setProductName(request.getParameter("productName")); 33 setType(request.getParameter("type")); 34 setPrice(request.getParameter("price")); 35 this.ds = ds; 36 } 37 38 // データベースへのアクション 39 // データの追加を実施 40 public ResultSet searchData() throws Exception { 41 42 Connection conn = ds.getConnection(); 43 String tableNm = getTableName(); 44 StringBuilder sql = new StringBuilder(); 45 46 // sql文を表示 47 sql.append("select id, Date, StoreName, ProductName, type, Price from " + tableNm + " where StoreName like '%'"); 48 //sql.append(storeName + "%'"); 49 System.out.println(sql); 50 51 // if id is selected, add it 52 if (id != "") { 53 sql.append("and id ='" + this.getId() + "';"); 54 } 55 56 // if Date is selected, add it 57 if (date != "") { 58 sql.append("and Date ='" + date + "'"); 59 } 60 61 // if StoreName is selected, add it 62 if (storeName != "") { 63 sql.append("and StoreName ='" + storeName + "'"); 64 } 65 66 // if ProductName is selected, add it 67 if (productName != "") { 68 sql.append("and ProductName ='" + productName + "'"); 69 } 70 71 // if Type is selected, add it 72 if (type != "") { 73 sql.append("and Type ='" + type + "'"); 74 } 75 76 // if Price is selected, add it 77 if (type != "") { 78 sql.append("and Price ='" + price + "'"); 79 } 80 81 PreparedStatement pstmt = conn.prepareStatement(new String(sql)); 82 83 84 // sql文実行 85 boolean res = pstmt.execute(); 86 rset = pstmt.executeQuery(); 87 88// ServletRequest request = null; 89// request.setAttribute("SqlResult", rset); 90 // 使用したオブジェクトを終了させる 91 pstmt.close(); 92 93 return rset; 94 95 96 97 // conn.close(); Webサーバー側のコネクションを使っているためコネクションはクローズしない 98 99 100 //return res; 101 } 102 103 // サブクラスからテーブル名を返す 104 protected abstract String getTableName(); 105 106 public String getId() { 107 return id; 108 } 109 110 public void setId(String id) { 111 this.id = id; 112 } 113 114 public String getDate() { 115 return date; 116 } 117 118 public void setDate(String date) { 119 this.date = date; 120 } 121 122 public String getStoreName() { 123 return storeName; 124 } 125 126 public void setStoreName(String storeName) { 127 this.storeName = storeName; 128 } 129 130 public String getProductName() { 131 return productName; 132 } 133 134 public void setProductName(String productName) { 135 this.productName = productName; 136 } 137 138 public String getType() { 139 return type; 140 } 141 142 public void setType(String type) { 143 this.type = type; 144 } 145 146 public String getPrice() { 147 return price; 148 } 149 150 public void setPrice(String price) { 151 this.price = price; 152 } 153 154 public DataSource getDs() { 155 return ds; 156 } 157 158 public void setDs(DataSource ds) { 159 this.ds = ds; 160 } 161}
BudgetTrackerSearchLogicFactory
1package info.budget.budgettracker; 2 3import javax.sql.DataSource; 4import javax.servlet.http.HttpServletRequest; 5 6public class BudgetTrackerSearchLogicFactory { 7 8 public static BudgetTrackerSearchLogic createBudgetTrackerLogic( 9 HttpServletRequest request, DataSource ds, String mode){ 10 BudgetTrackerSearchLogic res = null; 11 12 switch(mode) { 13 case "searchJan2020": 14 res = new Jan2020Search(request, ds); 15 break; 16 // クラスを増やすときにcaseを追加 17 default: 18 break; 19 } 20 21 return res; 22 } 23}
回答1件
あなたの回答
tips
プレビュー