Я использую 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. Я получаю вывод, но не здесь, и я получаю только пустой результат.
Во-первых, у вас есть возможная инъекция 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
как показано выше, должна уже позаботиться об этом.
Обычно это не тот же запрос или не та же база данных :)
Извлеките текст запроса, чтобы разделить переменную, распечатать ее в журналах. Затем скопируйте пасту из журналов в sql-разработчик.
И проверьте базу данных и имя пользователя.
Кроме того, возможно, что вы вставили эти записи, но забыли добавить COMMIT.
private static
и может быть кэширована в приватном поле.