Exception in thread "main" java.sql.SQLSyntaxErrorException: user lacks privilege or object not found: PRODUTO
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?