Набор результатов не имеет значения - PullRequest
0 голосов
/ 18 февраля 2019

Я делаю доску и сейчас пытаюсь сделать функцию поиска.но значения не появляются, если я ищу ключевое слово

Я пытался запустить на Oracle с напечатанным SQL и параметром (optionText, searchText ..), он работал нормально, но набор результатов не имеет значения

public List<boardVO> getBoardList(String optionText,String searchText,int totalNum , int nowPage){
        List<boardVO> list = new ArrayList<boardVO>();

        try {
            connectDB();
            String sql = "select * from "
                    + "(select rownum as rnum,recordno,userid,title,content,views,regdate from";
                    if(optionText!=null && !optionText.equals("") && searchText!=null &&!searchText.equals("")) {
                        sql += " (select * from boardlist where ? like ?))";
                    }else{
                        sql += " boardlist)";
                    }
                    sql += "where rnum>=? and rnum<=? order by recordno desc";
            pstmt = conn.prepareStatement(sql);

            int finalNum = totalNum -(5*(nowPage-1));

            if(optionText!=null && !optionText.equals("") && searchText!=null &&!searchText.equals("")) { 
                pstmt.setString(1, optionText);
                pstmt.setString(2, "%"+searchText+"%");
                if(finalNum>4) {
                    pstmt.setInt(3, finalNum-4);
                    pstmt.setInt(4, finalNum);
                }else {
                                        pstmt.setInt(3, 1);
                    pstmt.setInt(4, finalNum);

                }
            }else {
                pstmt.setInt(1, finalNum-4);
                pstmt.setInt(2, finalNum);

            }
            rs = pstmt.executeQuery();

            while(rs.next()) {
                boardVO vo = new boardVO();
                System.out.println("while");
                vo.setRecordNo(rs.getInt(2));
                vo.setUserid(rs.getString(3));
                vo.setTitle(rs.getString(4));
                vo.setContent(rs.getString(5));
                /* System.out.println(vo.getContent()); */
                vo.setViews(rs.getInt(6));
                vo.setRegdate(rs.getString(7));     

                list.add(vo);
            }
        } catch (Exception e) {
            System.out.println("get board list error");
            e.printStackTrace();

        }finally {
            closeDB();
        }
        return list;
    }

1 Ответ

0 голосов
/ 18 февраля 2019

Я думаю, что это ваша проблема:

(select * from boardlist where ? like ?)

Похоже, вы пытаетесь передать в запрос как имя столбца, так и значение для поиска: вы не можете сделать это с параметрами.Оба назначения будут обрабатываться как литералы, поэтому ваш исполняемый код будет выглядеть примерно так:

select * from boardlist where 'COLUMN_NAME` like '%some string%'

Совершенно допустимый SQL, просто не вернет никаких результатов.

В этом случае вам необходимо изменить сборку оператора, включив в него имя столбца ...

if(optionText!=null && !optionText.equals("") && searchText!=null &&!searchText.equals("")) {
    sql += " (select * from boardlist where " + optionText + " like ?))";
}else{

... и удалить присвоение параметра:

if(optionText!=null && !optionText.equals("") && searchText!=null &&!searchText.equals("")) { 
    pstmt.setString(1, "%"+searchText+"%");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...