Java JDBC模板异常表或视图不存在,但实际存在
我正在尝试使用Spring JDBCTemplate从Oracle DB获取一些数据:Java JDBC模板异常表或视图不存在,但实际存在,java,spring,oracle,spring-boot,jdbctemplate,Java,Spring,Oracle,Spring Boot,Jdbctemplate,我正在尝试使用Spring JDBCTemplate从Oracle DB获取一些数据: String query = "SELECT * FROM snow.ar_incident WHERE ROWNUM < 10"; Map<String, List<Attachment>> map = jdbcTemplate.query(query, new ResultSetExtractor<Map<String, List<Attachme
String query = "SELECT * FROM snow.ar_incident WHERE ROWNUM < 10";
Map<String, List<Attachment>> map = jdbcTemplate.query(query, new ResultSetExtractor<Map<String, List<Attachment>>>() {
@Override
public Map<String, List<Attachment>> extractData(ResultSet rs) throws SQLException, DataAccessException {
Map<String, List<Attachment>> map = new HashMap<>();
//Mapping results to map
return map;
}
});
它毫无问题地工作了,当我在SQLDeveloper中运行查询时也是如此。我已多次检查两种解决方案的连接详细信息,它们是相同的。为什么我不能使用JDBCTemplate访问
ar\u incident
表?这可能是因为您对该特定表没有选择权限
grant select on snow.ar_incident to your_user;
将JDBC驱动程序更新到新版本后,所有问题都消失了 请检查是否有授权,以及是否需要使用架构作为表名的前缀。表名即使将查询简化为
SELECT*FROM ar\u incident
,它是否会引发错误?是的,总是在我尝试使用ar\u incident
表时。JdbcTemplate
与您的操作相同。此外,错误来自驱动器,而不是弹簧。因此,要么表/视图真的不存在,要么您没有正确的权限,要么您没有查看您认为正在查看的数据库。我不这么认为,因为我在SQL Developer中为同一用户运行了查询,并且查询成功了。他说,如果他使用java JDBC,这是可行的,所以这不是问题你还记得哪个版本不起作用,哪个版本起作用吗?@Nate我在OJDBC6
上遇到了这个问题,当我转到OJDBC8
时问题就解决了。
grant select on snow.ar_incident to your_user;