.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.RuntimeException: java.sql.SQLSyntaxErrorException: user lacks privilege or object not found: TESTE
Estou tentando fazer uma buscar no HSQL, mas sempre da esse erro (utilizo o Spring MVC)
A tabela Teste foi criada, mas mesmo assim fala que não encontra sei lá, alguém pode me ajudar ?
Código para gera a TABELA:
@Autowired
private DataSource ds; // (Depedência) Lembrando que a criação desse POOL de CONEXÃO foi criado no CONTEINER do SPRING MVC (spring-context.xml)
@RequestMapping("/tabelas")
public String geraBanco() throws SQLException{
try (Connection connection = ds.getConnection()) {
PreparedStatement st1 = connection.prepareStatement("DROP TABLE teste if exists"); // Destroi a tabela 'produtos' se JÁ EXISTE
st1.execute(); // Execute = Executa o SQL(Querie) e retorna boolean
PreparedStatement st2 = connection.prepareStatement("CREATE TABLE teste (id INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, descricao VARCHAR(50), preco DOUBLE, quantidade INTEGER, vencimento BOOLEAN, dataVencido DATETIME);");
st2.execute(); // |______________________________________________________|
// |-> Cria um ID gerado automaticamente a cada INSERÇÃO, e indica que é a CHAVE PRIMÁRIA
// TABELA USUARIOS
PreparedStatement st33 = connection.prepareStatement("drop table usuarios if exists");
st33.execute();
PreparedStatement st22 = connection.prepareStatement("CREATE TABLE usuarios (login VARCHAR(255),senha VARCHAR(255));");
st22.execute();
PreparedStatement st3 = connection.prepareStatement("INSERT INTO usuarios (login, senha) values ('fk', '123');");
st3.execute();
} catch (SQLException e) {
e.printStackTrace();
}
return "infraTabela";
}
Arquivo SPRING-CONTEXT
<context:component-scan base-package="br.com.fktec" />
<mvc:annotation-driven />
<mvc:default-servlet-handler/> <!-- Aqui permite o uso das ANOTAÇÕES para o SpringMVC -->
<!-- (OLHAR INFO AJAX) = Indica para o SpringMVC que nem toda requisição de buscar arquivos em determinadas pastas é com ele. -->
<!-- FAZ A PERMISSAO DO USO DO INTERCEPTOR P/ SPRING MVC -->
<!-- <mvc:interceptors>
<bean class="br.com.fktec.interceptor.AutorizadorInterceptor" /> Local onde fica a classe utilizada para INTERCEPTOR
<bean class="br.com.caelum.contas.interceptor.ConnectionInterceptor" />
</mvc:interceptors>
-->
<bean id="mysqlDataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="org.hsqldb.jdbcDriver"/>
<property name="url" value="jdbc:hsqldb:file:teste.db"/> <!-- file:"nome do banco de dados" em arquivo em vez de LOCALHOST-->
<property name="username" value="teste"/>
<property name="password" value=""/>
</bean>
<!-- Indica para ao springMVC o local onde será os "return" dos métodos referenes ao RequestMapping-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/" />
<property name="suffix" value=".jsp" />
</bean>
</beans>
CÓDIGO DE BUSCA NO HSQL
// LEMBRANDO: Os métodos estão sendo fechados automaticamente com o TRY (Devido ao implements AUTOCLOSABLE)
public List<Produto> listaDAO() throws SQLException{
try(Connection c = ds.getConnection()){
List<Produto> produtos = new ArrayList<Produto>();
try(PreparedStatement stmt = c.prepareStatement("select * from teste")){
try(ResultSet rs = stmt.executeQuery()){ // executeQuery = Retorna um RESULTSET
while(rs.next()){
produtos.add(buscaProdutoPorId(rs));
}
}
return produtos;
}catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
}
// CRIA UM PRODUTO PARA BUSCA
public Produto buscaProdutoPorId(ResultSet rs) throws SQLException{
Produto produto = new Produto();
produto.setId(rs.getLong("id"));
produto.setDescricao(rs.getString("descricao"));
produto.setPreco(rs.getDouble("preco"));
produto.setQuant(rs.getInt("quantidade"));
produto.setVencimento(rs.getBoolean("vencimento"));
// CONVERTENDO O DATE DO SQL EM CALENDAR (Para ser aceito no MODEL)
Calendar dataVencimento = Calendar.getInstance(); // NÃO SE PODE DAR NEW EM UM "CALENDAR" por isso é utilizado o "getInstance" que retorna um CALENDAR com o dia/hora ATUAL
dataVencimento.setTime(rs.getDate("dataVencido")); // setTime Converte em Calendar, enquanto GetTime converte para DATE
produto.setDataVencido(dataVencimento);
return produto;
}