Запрос, возвращающий только пустое значение в Java

1

Я использую java для соединения с oracle.Это код, который я использовал

public List<FavouriteShop> getmyfavouriteshop(String username) {
    List<FavouriteShop> res=null;
    res = this.getJdbcTemplate().query("select * from(Select tbl_orderdetails.branch_name as myfavourite,tbl_orderdetails.branch_id as branch_id from tbl_orderdetails inner join tbl_ordermaster on tbl_orderdetails.order_master_id=tbl_ordermaster.ordermasterid where tbl_ordermaster.user_id='"+username+"' group by tbl_orderdetails.branch_name,tbl_orderdetails.branch_id order by count(tbl_orderdetails.branch_name) desc) where rownum<=3", new MyFavourite());   
    return res;
}

private class MyFavourite implements RowMapper<FavouriteShop> {
    public FavouriteShop mapRow(ResultSet rs,int i) throws SQLException {
        FavouriteShop g=new FavouriteShop();
        g.setBranch_id(rs.getString("branch_id"));
        g.setMyfavourite(rs.getString("myfavourite"));
        return g;
    }
}

Я попытался выполнить тот же запрос в oracle. Я получаю вывод, но не здесь, и я получаю только пустой результат.

  • 0
    Кстати, использование встроенного создания запросов является хорошим рецептом для внедрения SQL
  • 0
    Можете ли вы объяснить о инъекции SQL
Показать ещё 1 комментарий
Теги:

2 ответа

1
Лучший ответ

Во-первых, у вас есть возможная инъекция SQL. Вы можете избежать этого, указав username в качестве аргумента для query

this.getJdbcTemplate().query("select * from (... where tbl_ordermaster.user_id=? ...) where rownum<=3",
                              new Object[]{ username }, new MyFavourite());

Возможной причиной для пустого результата может быть

... where tbl_ordermaster.user_id='"+username+"' ...

Обычно user_id является целым значением, но вы сравниваете его со String и заключите в кавычки. Передача username в качестве аргумента для query как показано выше, должна уже позаботиться об этом.

0

Обычно это не тот же запрос или не та же база данных :)

Извлеките текст запроса, чтобы разделить переменную, распечатать ее в журналах. Затем скопируйте пасту из журналов в sql-разработчик.

И проверьте базу данных и имя пользователя.

Кроме того, возможно, что вы вставили эти записи, но забыли добавить COMMIT.

  • 0
    небольшой комментарий - ваша реализация RowMapper должна быть private static и может быть кэширована в приватном поле.
  • 0
    я сделал, но все еще не работает
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню