電子書籍の厳選無料作品が豊富!

どうも、ブラザーと申します。
課題で検索フォームのソースコードを作っているのですが検索結果が反映されません。
ソースコードは以下の通りです。

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;

import javax.sql.DataSource;

import Bean.Bean;

import com.mysql.jdbc.StringUtils;

public class kadai7_database {
private static final String FIND_ALL_STMNT = "SELECT name, price FROM snack";
private static final String FIND_BY_LIKE_NAME_STMNT = "SELECT name, price FROM snack WHERE name LIKE ? ";
private DataSource source;

private ArrayList<Bean> Data;




public kadai7_database() throws SQLException {
source = DbManager.getSource();
}

public Map<String,Object> findByLikeName(String searchName, String searchKind) throws SQLException {

// 検索結果
Map<String,Object> result = null;

// DB接続
Connection con = source.getConnection();

// 検索条件を生成
String searchCond = setSearchCond(searchName,searchKind);

// SQL実行を実行し、取得情報をMapに設定

PreparedStatement pstmt = con.prepareStatement(FIND_BY_LIKE_NAME_STMNT);
pstmt.setString(1, searchCond);
ResultSet rs = pstmt.executeQuery();
setResultEntity(rs);

// DBクローズ
con.close();

return result;
}


private Map<String,Object> setResultEntity(ResultSet rs) throws SQLException{

Map<String,Object> resultMap = new HashMap<String,Object>();

List<Bean> DataList = new LinkedList<Bean>();
while (rs.next()) {
Bean Beans = new Bean();
Beans.setName(rs.getString("name"));
Beans.setPrice(rs.getString("price"));
DataList.add(Beans);
}

resultMap.put("count", String.valueOf(DataList.size()));
resultMap.put("lists", DataList);

return resultMap;
}


public ArrayList<Bean> getData() {;
return Data ;
}


public Object findAll() throws SQLException {

ArrayList<Bean> Data = null;

Statement stmt = null;
ResultSet rs = null;
Connection con = source.getConnection();
try {


stmt = con.createStatement();
rs = stmt.executeQuery(FIND_ALL_STMNT);
getData(rs);


} catch (SQLException se) {
se.printStackTrace();
}finally{
con.close();
stmt.close();
rs.close();
}
return Data;
}


private String setSearchCond(String searchName, String searchKind){

String searchCond = "";

if(!StringUtils.isEmptyOrWhitespaceOnly(searchKind)){
switch(Integer.valueOf(searchKind)){
case 1:
searchCond = searchName + "%";
break;
case 2:
searchCond = "%" + searchName + "%";
break;
case 3:
searchCond = "%" + searchName;
break;
default:
// 何もしない
}
}

return searchCond;
}


private ArrayList<Bean> getData(ResultSet rs) throws SQLException{

ArrayList<Bean> Data = new ArrayList<Bean>();
while (rs.next()) {
Bean bean = new Bean();
bean.setName(rs.getString("name"));
bean.setPrice(rs.getString("price"));
Data.add(bean); // Beanに格納
}

this.Data = Data;
return this.getData();
}


「findByLikeName」が検索フォームに使われておりここのresultに情報が入っていない事が原因だと思っているのですが何故結果が入ってこないのか分かりません。
またはそれ以外に原因があるのでしょうか。

A 回答 (2件)

resultにnull以外の情報が一度も代入されていません


「findByLikeName」の
setResultEntity(rs);
と書いてある行を
result=setResultEntity(rs);
にすると値がresultに入り当初目的とした動作が行われるのではないでしようか

それ以外の数値を返すにしてもとにかく一度以上resultに値を代入しないとfindByLikeNameは結果を帰しません
    • good
    • 0

長々とソースを載せるのは良いのですが、


テバッガで何処まで追ってみたんですか?

普通、データベース接続は正常ぽいとか、
カ―ソルが回ってないとか、いろいろ直ぐわかる
ことがあるはず。

eclipseとかで追えば、絞るのは簡単な
はずですが・・・
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!