Exception in thread "main" java.sql.SQLSyntaxErrorException: user lacks privilege or object not found: PRODUTO
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
Exception in thread "main" java.sql.SQLSyntaxErrorException: user lacks privilege or object not found: PRODUTO
Ao executar meu código recebo essa exception, alguém pode me ajudar ?
segue abaixo meu código:
package br.com.caelum.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class TestaListagem {
public static void main(String[] args) throws SQLException, Exception {
Connection connection = DriverManager.getConnection("jdbc:hsqldb:hsql://localhost/loja-virtual", "SA", "");
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery("select * from produto");
while (resultSet.next()) {
int id = resultSet.getInt("id");
String nome = resultSet.getString("nome");
String descricao = resultSet.getString("descricao");
System.out.println("id: " + id + ", nome: " + nome + ", descricao: " + descricao);
} resultSet.close();
statement.close();
connection.close();
} }
Olá, Mario, tudo bem?
Antes de tudo, você realizou a conexão com seu banco de dados pelo Database Manager (conforme cap 2 do curso) e checou se sua tabela Produto está ok lá? Pela mensagem apresentada, seu código está conectando com a base, mas não está encontrando a tabela.
Estou com o mesma mensagem de erro em minha aplicação. Entro em minha pasta do projeto via terminal cd Downloads/loja-virtual E lá dentro digito para subir o banco
java -cp hsqldb.jar org.hsqldb.server.Server --database.0 file:loja-virtual --dbname.0 loja-virtual
depois com o CTRL + SHIFT +T abro uma nova aba no terminal ainda dentro da minha pasta do projeto e digito o seguinte comando:
java -cp hsqldb.jar org.hsqldb.util.DatabaseManager
E escolho a seguinte opção: Type: HSQL Database Engine Server com a seguinte url: jdbc:hsqldb:hsql://localhost/loja-virtual
e ao tentar inserir via java na classe de teste de inserção tomo a mensagem de erro informada na stack abaixo.
E a minha stacktrace.
adquirindo conexão...Exception in thread "main" java.sql.SQLSyntaxErrorException: user lacks privilege or object not found: CATEGORIA
at org.hsqldb.jdbc.Util.sqlException(Unknown Source)
at org.hsqldb.jdbc.Util.sqlException(Unknown Source)
at org.hsqldb.jdbc.JDBCPreparedStatement.<init>(Unknown Source)
at org.hsqldb.jdbc.JDBCConnection.prepareStatement(Unknown Source)
at br.com.caelum.jdbc.CategoriasDAO.lista(CategoriasDAO.java:25)
at br.com.caelum.jdbc.TestaCategorias.main(TestaCategorias.java:17)
Caused by: org.hsqldb.HsqlException: user lacks privilege or object not found: CATEGORIA
at org.hsqldb.error.Error.error(Unknown Source)
at org.hsqldb.error.Error.error(Unknown Source)
at org.hsqldb.SchemaManager.getTable(Unknown Source)
at org.hsqldb.ParserDQL.readTableName(Unknown Source)
at org.hsqldb.ParserDQL.readTableOrSubquery(Unknown Source)
at org.hsqldb.ParserDQL.XreadTableReference(Unknown Source)
at org.hsqldb.ParserDQL.XreadFromClause(Unknown Source)
at org.hsqldb.ParserDQL.XreadTableExpression(Unknown Source)
at org.hsqldb.ParserDQL.XreadQuerySpecification(Unknown Source)
at org.hsqldb.ParserDQL.XreadSimpleTable(Unknown Source)
at org.hsqldb.ParserDQL.XreadQueryPrimary(Unknown Source)
at org.hsqldb.ParserDQL.XreadQueryTerm(Unknown Source)
at org.hsqldb.ParserDQL.XreadQueryExpressionBody(Unknown Source)
at org.hsqldb.ParserDQL.XreadQueryExpression(Unknown Source)
at org.hsqldb.ParserDQL.compileCursorSpecification(Unknown Source)
at org.hsqldb.ParserCommand.compilePart(Unknown Source)
at org.hsqldb.ParserCommand.compileStatement(Unknown Source)
at org.hsqldb.Session.compileStatement(Unknown Source)
at org.hsqldb.StatementManager.compile(Unknown Source)
at org.hsqldb.Session.execute(Unknown Source)
... 4 more
Segue minha classe de conexão.
public class ConnectionPool {
private DataSource dataSource;
public ConnectionPool() {
JDBCPool pool = new JDBCPool();
pool.setUrl("jdbc:hsqldb:hsql//localhost/loja-virtual");
pool.setUser("SA");
pool.setPassword("");
this.dataSource = pool;
}
Connection getConnection() throws SQLException {
System.out.print("adquirindo conexão...");
Connection connection = dataSource.getConnection();
return connection;
}
}
Classe de Teste de Inserção
public class TestaInsercao {
public static void main(String[] args) throws Exception {
try (Connection connection = new ConnectionPool().getConnection()) {
connection.setAutoCommit(false);
String sql = "insert into Produto (nome, descricao) values (?, ?)";
try (PreparedStatement statement = connection.prepareStatement(sql,
Statement.RETURN_GENERATED_KEYS)) {
adiciona("TV LCD", "32 polegadas", statement);
adiciona("Blueray", "Full HDMI", statement);
connection.commit();
statement.close();
} catch (Exception e) {
connection.rollback();
System.out.println("Rollback efetuado");
e.printStackTrace();
}
}
}
private static void adiciona(String nome, String descricao,
PreparedStatement statement) throws SQLException {
// if (nome.equals("Blueray")) {
// throw new IllegalArgumentException("Problema ocorrido");
// }
statement.setString(1, nome);
statement.setString(2, descricao);
boolean resultado = statement.execute();
System.out.println(resultado);
try (ResultSet generatedKeys = statement.getGeneratedKeys()) {
while (generatedKeys.next()) {
long id = generatedKeys.getLong("id");
System.out.println("id gerado: " + id);
}
}
}
}
Como corrijo isso?
Vocês conseguiram resolver?