2009年8月5日水曜日

SQLコントロールの応用例

//パッケージ
package left;

//インポート
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.sql.*;
import java.util.*;
import left.*;

public class BookSearch extends HttpServlet
{
//index.html(トップページ)から、本や雑誌のリンクから来る
public void doGet(HttpServletRequest req, HttpServletResponse res)
throws IOException, ServletException
{
// 文字エンコードの設定
req.setCharacterEncoding("Shift_JIS");

//検索文字列を取得
String strSearch = req.getParameter("search");
String strType = req.getParameter("booktype");
String strSort = req.getParameter("sort");

ResultSet rs = null;

if(strSearch != null) // 文字列検索
{
if(strSearch.startsWith("_"))
strSearch = "='" + strSearch.substring(1) + "'"; // ランキングまたはランダムリンク
else
strSearch = "like '%" + strSearch + "%'"; // 通常検索

//検索ボックスに入力された文字列をNameに含む列を出す。
rs = SqlControl.ExecuteSelect("select * from left_shohin_m where name " + strSearch + " order by id");
}
else if(strType != null) // ジャンル検索
{
//押されたリンクのTypeのジャンルIDの内容を取得
rs = SqlControl.ExecuteSelect("select * from left_shohin_m where genre=" + strType + " order by id");
}
else // トップメニュー
{
// 商品テーブルを全て取得
String strSql = "select * from left_shohin_m";

if(strSort != null)
{
if(strSort.equals("sale"))
strSql += " order by totalsale desc";
else
strSql += " order by " + strSort;
}
else
strSql += " order by totalsale desc";

rs = SqlControl.ExecuteSelect(strSql);
}

//List作成。Book型のArrayList
ArrayList BookList = new ArrayList();

try
{
//セレクトした商品をクラスに入れて、
while(rs.next())
{
Book book = new Book();

book.setBookID(rs.getInt("ID"));
book.setBookName(rs.getString("NAME"));
book.setCompany(rs.getString("PUBLISHER"));
String strAuthor = rs.getString("AUTHOR");
book.setWriterName((strAuthor == null) ? "" : strAuthor);
book.setPrice(rs.getInt("PRICE"));
book.setGenreID(rs.getInt("GENRE"));
book.setComment(rs.getString("INFO"));
book.setTotalSale(rs.getInt("totalsale"));

//それをリストに追加していく。
BookList.add(book);
}
}
catch(Exception e)
{
}

// DBを閉じる
SqlControl.CloseDb();

// トップメニュー表示時はリストをランダム抽出した6件にする
if(strSearch == null && strType == null && strSort == null)
{
ArrayList ranking = new ArrayList();
for(int i = 0; i < 3; i++)
{
if(i < BookList.size())
ranking.add(BookList.get(i));
}

// ランキングをセッションに格納
req.getSession().setAttribute("ranking", ranking);

// 全件検索結果を一時保存リストにコピー
ArrayList tempList = new ArrayList();
for(int i = 0; i < BookList.size(); i++)
tempList.add(BookList.get(i));

// リストをクリア
BookList.clear();

//6冊を決める。
for(int i = 0; i < 6; i++)
{
//リスト内でランダムで番号を取得
int Random = (int)(Math.random() * tempList.size());

//その番号に登録してある本を、トップに表示する本のリストに入れていく。
BookList.add(tempList.get(Random));

//BookListから、一度トップに置いた本を削除する
tempList.remove(Random);
}
}

//セッションに格納
req.getSession().setAttribute("list", BookList);

// リスト表示時は商品リスト画面へ
if(strSearch != null || strType != null)
req.getRequestDispatcher("../servlet/left.shop_control?link=4").forward(req, res);
else if(strSort != null) // 書籍管理画面へ
req.getRequestDispatcher("../servlet/left.shop_control?link=15").forward(req, res);

}

//index.html(トップページ)から、本や雑誌のリンクから来る
public void doPost(HttpServletRequest req, HttpServletResponse res)
throws IOException, ServletException
{
doGet(req, res);
}
}

0 件のコメント:

コメントを投稿