minha duvida eh que na class produto ta dando erro esse codigo: new ConnectionPool().getConnection())
minha duvida eh que na class produto ta dando erro esse codigo: new ConnectionPool().getConnection())
Posta o teu código, com todas as classes.
Qual é o erro ? Você poderia postar o código da sua classe produto ?
Coloque a linha toda em que etá dando o erro. E coloque também toda a mensagem de erro.
Olhando daqui, tu não estás fechando um parenteses a mais?
new ConnectionPool().getConnection())
o erro eh esse codigo que eu postei = new ConnectionPool().getConnection()) mas embaixo eu vo posta a classe q ta dando erro toda:
package lojavirtual; import lojavirtual.modelo.Produto;
import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement;
import sun.jdbc.odbc.ee.ConnectionPool;
public class TestaInsercaoDeProduto {
public static void main(String[] args) throws SQLException{ Produto mesa = new Produto("Mesa azul","Mesa com 4 pés");
try(Connection con = new ConnectionPool().getConnection()){
String sql = "insert into produto(nome, descricao) values(?,?)";
try(PreparedStatement stmt = con.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS)){ stmt.setString(1, mesa.getNome()); stmt.setString(2, mesa.getDescricao()); stmt.execute();
try(ResultSet rs = stmt.getGeneratedKeys()){ if(rs.next()){ int id = rs.getInt("id"); mesa.setId(id); } } } } } }
Provavelmente, em seu console, aparece uma mensagem de erro. Ou o programa nem mesmo está compilando? Há um sublinhado vermelho nessa parte do código? Quando tu coloca o mouse sobre, não dá dicas?
vo falar de novo ou o sublinhado com erro eh?ConnectionPool()
Posta aqui a tua classe ConnectionPool. Explica também por que está sendo feito o import abaixo
import sun.jdbc.odbc.ee.ConnectionPool;
Roberto fiz isso e nao deu certo.ai fiz outra coisa pedi o eclipse pra criar a Class ConnectionPool
A questão é justamente essas: tu não tem a classe ConnectionPool, por isso o erro. Olha a aula de novo e codifica a classe. A partir daí o tue código irá funcionar.
mesmo assim nao da certo...
Coloca aqui o código de TODAS as classes envolvidas. E o erro que está dando.
como eu fazer isso Roberto que eu nao tneho a class to seguindo a video aula?
Exception in thread "main" java.lang.Error: Unresolved compilation problems: The constructor ConnectionPool() is undefined The method getConnection() is undefined for the type ConnectionPool
at lojavirtual.TesteInsercaoDeProduto.main(TesteInsercaoDeProduto.java:22)
esse eh o erro que ta dando
Se tu não tiver a classe criada, ou ela estiver com o nome errado, não encontrará.
Outra dica, deixe o mouse sobre o erro, e veja o que o eclipse diz sobre ele.
public class ConnectionPool {
private DataSource dataSource;
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 {
Connection connection = dataSource.getConnection();
return connection;
}
}
Se tu tá seguindo a aula, essa classe foi criada. O erro que está dando é justamente pela inexistência da classe. Lembra que cada classe tem que estar em um arquivo separado, caso contrário irá dar erro.
arthur refiz o codigo acima conforme vc digitou. ai voltei pra class TesteInsercaoDeProduto e ai o ConnectionPool().getConnection voutou a ficar com erro..
Exception in thread "main" java.lang.Error: Unresolved compilation problems: The constructor ConnectionPool() is undefined The method getConnection() is undefined for the type ConnectionPool
at lojavirtual.TesteInsercaoDeProduto.main(TesteInsercaoDeProduto.java:22)
Retire o import "import sun.jdbc.odbc.ee.ConnectionPool;" da classe TesteInsercaoDeProduto. Será que tu não fez o import errado? Veja se te dá opção diferentes de import, sem ele.
E de novo, coloca todas as classes aqui para que a gente possa te ajudar. Sem elas a gente vai ficar só no chute e vai demora mais ainda para ter uma solução.
roberto estou colocando toas as classes que voce pediu... package lojavirtual;
public interface Connection { Result execute(String sql);
}
package lojavirtual;
import java.sql.Connection; import java.sql.SQLException;
import javax.sql.DataSource;
import org.hsqldb.jdbc.JDBCPool;
public class ConnectionPool { private DataSource dataSource; ConnectionPool(){ JDBCPool pool = new JDBCPool(); pool.setUrl("jdbc:hsqldb:hsql://localhost/lojavirtual"); pool.setUser("SA"); pool.setPassword(""); this.dataSource = pool; }
Connection getConnection() throws SQLException { Connection connection = dataSource.getConnection(); return connection; } }
package lojavirtual;
import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException;
import javax.sql.DataSource;
import org.hsqldb.jdbc.JDBCPool;
public class Database { private DataSource dataSouce; Database(){ JDBCPool pool = new JDBCPool(); pool.setUrl("jdbc:hsqldb:hsql://localhost/loja-virtual"); pool.setUser("SA"); pool.setPassword(""); this.dataSouce = pool;
} Connection getConnection() throws SQLException {
//Connection connection = DriverManager.getConnection("jdbc:hsqldb:hsql://localhost/lojavirtual", "SA", ""); Connection connection = dataSouce.getConnection(); return getConnection();
} }
package lojavirtual; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import org.hsqldb.jdbc.*;
public class TestaConexao {
public static void main(String[] args) throws SQLException { Connection connection = DriverManager.getConnection("jdbc:hsqldb:hsql://localhost/lojavirtual", "SA", "");
Statement statement = connection.createStatement(); boolean resultado = statement.execute("select * from Produto"); ResultSet resultSet = statement.getResultSet();
while(resultSet.next()) { int id = resultSet.getInt("id"); String nome = resultSet.getString("nome"); String descricao = resultSet.getString("descricao"); System.out.println(id); System.out.println(nome); System.out.println(descricao); }
connection.close(); resultSet.close(); statement.close();
}
}
package lojavirtual;
import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement;
import sun.font.CreatedFontTracker;
public class TestaInsercao {
public static void main(String[] args)throws SQLException {
try (Connection connection = new Database().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();
}catch(Exception ex){ ex.printStackTrace(); connection.rollback(); }
} }
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); ResultSet resultSet = statement.getGeneratedKeys(); while(resultSet.next()){ String id = resultSet.getString("id"); System.out.println(id + "gerado"); } resultSet.close(); }
}
package lojavirtual;
import java.sql.DriverManager; import java.sql.SQLException; import org.hsqldb.jdbc.*; public class TestaListagem { public static void main(String[] args) throws SQLException {
Connection connection = DriverManager.getConnection("jdbc:hsqldb:hsql://localhost/lojavirtual", "SA", "");
connection.close(); }
}
package lojavirtual;
import java.sql.Connection; import java.sql.SQLException; import java.sql.Statement;
public class TestaRemocao { public static void main(String[] args)throws SQLException { Connection connection = Database.getConnection(); Statement stmt = connection.createStatement(); stmt.execute("delete from Produto where id>3");
int count = stmt.getUpdateCount(); System.out.println(count + " linhas atualizadas"); }
}
package lojavirtual;
import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException;
import java.sql.Statement; import sun.jdbc.odbc.ee.ConnectionPool;
import lojavirtual.modelo.Produto;
public class TesteInsercaoDeProduto {
public static void main(String[] args)throws SQLException {
Produto mesa = new Produto("Mesa azul", "Mesa com 4 pes"); try(Connection con = new ConnectionPool().getConnection()){ String sql = "insert into produto (nome,descricao)values(?,?)"; try(PreparedStatement stmt = con.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS)){
stmt.setString(1, mesa.getNome()); stmt.setString(2, mesa.getDescricao()); stmt.execute();
try(ResultSet rs = stmt.getGeneratedKeys()){ if(rs.next()){ int id = rs.getInt("id"); mesa.setId(id); } } }
} }
}
package lojavirtual.modelo;
public class Produto {
public Produto(String nome, String descricao) { super(); this.nome = nome; this.descricao = descricao; } private Integer id; private String nome; private String descricao; public String getNome() { return nome; } public String getDescricao() { return descricao; } public void setId(Integer id) { this.id = id; }
}
Na classe TestaInsercaoDeProduto, retira o import para a package da Sun. Ela não é necessária. Vi em uma outra classe que tu importou uma outra package que não é necessária também. Repara que em todos os exercícios são utilziadas as packages do java mesmo, ou seja, aquelas que começam com java.algumacoisa.
package lojavirtual;
import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException;
import java.sql.Statement; import sun.jdbc.odbc.ee.ConnectionPool;
import lojavirtual.modelo.Produto;
public class TesteInsercaoDeProduto {
public static void main(String[] args)throws SQLException {
Produto mesa = new Produto("Mesa azul", "Mesa com 4 pes"); try(Connection con = new ConnectionPool().getConnection()){ String sql = "insert into produto (nome,descricao)values(?,?)"; try(PreparedStatement stmt = con.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS)){
stmt.setString(1, mesa.getNome()); stmt.setString(2, mesa.getDescricao()); stmt.execute();
try(ResultSet rs = stmt.getGeneratedKeys()){ if(rs.next()){ int id = rs.getInt("id"); mesa.setId(id); } } }
} }
}
Te acostuma também a colocar o código formatado, usando o recurso que temos aqui para isso - clica nos números binários na caixa de edição e coloca o código aonde indicado.
Roberto eh pra apagar o packge ?
Retira esse import
import sun.jdbc.odbc.ee.ConnectionPool;
Se continuar dando erro, posta ele aqui.
retirei
Roberto mesmo assim esta dando erro a class TesteInsercao de Produto veja:
package lojavirtual;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import javax.sql.DataSource;
import org.hsqldb.jdbc.JDBCPool;
public class ConnectionPool{
private DataSource dataSource;
ConnectionPool(){
JDBCPool pool = new JDBCPool();
pool.setUrl("jdbc:hsqldb:hsql://localhost/lojavirtual");
pool.setUser("SA");
pool.setPassword("");
this.dataSource = pool;
}
Connection getConnection() throws SQLException {
//Connection connection = DriverManager.getConnection("jdbc:hsqldb:hsql://localhost/lojavirtual", "SA", "");
Connection connection = dataSource.getConnection();
return connection;
}
}
enter code here
package lojavirtual;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import sun.jdbc.odbc.ee.ConnectionPool;
import lojavirtual.modelo.Produto;
public class TesteInsercaoDeProduto {
public static void main(String[] args)throws SQLException {
Produto mesa = new Produto("Mesa azul", "Mesa com 4 pes");
try(Connection con = new ConnectionPool.getConnection(){
String sql = "insert into produto (nome,descricao)values(?,?)";
try(PreparedStatement stmt = con.prepareStatement(sql,
Statement.RETURN_GENERATED_KEYS)){
stmt.setString(1, mesa.getNome());
stmt.setString(2, mesa.getDescricao());
stmt.execute();
try(ResultSet rs = stmt.getGeneratedKeys()){
if(rs.next()){
int id = rs.getInt("id");
mesa.setId(id);
}
}
}
}
}
}
Gustavo, Por que na package ConnectionPool foi importada a package javax.sql.DataSource? E na classe TesteInsercaoProduto continua com o import para sun.jdbc.ee.ConnectionPool, que já foi falado várias vezes que não é necessária.
tirei os erros sairam roberto . e agora nao consta erro na classe porem ao executar a class TesteInsercaoDeProduto, na console aparece o seguinte erro:
Exception in thread "main" java.sql.SQLSyntaxErrorException: user lacks privilege or object not found: TO
at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source)
at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source)
at org.hsqldb.jdbc.JDBCPreparedStatement.<init>(Unknown Source)
at org.hsqldb.jdbc.JDBCConnection.prepareStatement(Unknown Source)
at lojavirtual.TesteInsercaoDeProduto.main(TesteInsercaoDeProduto.java:18)
O teu banco está em execução? Pergunto pois erro de Unknown Source leva a crer que o programa não achou o banco. Outra possibilidade é que o banco não tenha sido criado.
roberto esta fiz o scritp pra roda banco e ate dei um ctrl c pra roda-lo novamente... olha ai roberto:
Microsoft Windows [versão 6.3.9600] (c) 2013 Microsoft Corporation. Todos os direitos reservados.
C:\Users\gustavo>cd workspace/lojavirtual/lib
C:\Users\gustavo\workspace\lojavirtual\lib>java -cp hsqldb.jar org.hsqldb.server .Server --database.0 file:lojavirtual --dbname.0 lojavirtual [Server@4b90690e]: [Thread[main,5,main]]: checkRunning(false) entered [Server@4b90690e]: [Thread[main,5,main]]: checkRunning(false) exited [Server@4b90690e]: Startup sequence initiated from main() method [Server@4b90690e]: Could not load properties from file [Server@4b90690e]: Using cli/default properties only [Server@4b90690e]: Initiating startup sequence... [Server@4b90690e]: Server socket opened successfully in 6 ms. [Server@4b90690e]: Database [index=0, id=0, db=file:lojavirtual, alias=lojavirtu al] opened sucessfully in 533 ms. [Server@4b90690e]: Startup sequence completed in 540 ms. [Server@4b90690e]: 2014-06-03 11:40:43.408 HSQLDB server 2.3.2 is online on port 9001 [Server@4b90690e]: To close normally, connect and execute SHUTDOWN SQL [Server@4b90690e]: From command line, use [Ctrl]+[C] to abort abruptly
C:\Users\gustavo\workspace\lojavirtual\lib>java -cp hsqldb.jar org.hsqldb.server
.Server --database.0 file:lojavirtual --dbname.0 lojavirtual
[Server@75e13ce3]: [Thread[main,5,main]]: checkRunning(false) entered
[Server@75e13ce3]: [Thread[main,5,main]]: checkRunning(false) exited
[Server@75e13ce3]: Startup sequence initiated from main() method
[Server@75e13ce3]: Could not load properties from file
[Server@75e13ce3]: Using cli/default properties only
[Server@75e13ce3]: Initiating startup sequence...
[Server@75e13ce3]: Server socket opened successfully in 6 ms.
[Server@75e13ce3]: Database [index=0, id=0, db=file:lojavirtual, alias=lojavirtu
al] opened sucessfully in 568 ms.
[Server@75e13ce3]: Startup sequence completed in 577 ms.
[Server@75e13ce3]: 2014-06-03 12:20:25.133 HSQLDB server 2.3.2 is online on port
9001
[Server@75e13ce3]: To close normally, connect and execute SHUTDOWN SQL
[Server@75e13ce3]: From command line, use [Ctrl]+[C] to abort abruptly
Realmente, não sei. Tem que pesquisar o quê pode estar acontecendo.
roberto, achei o erro..
String sql = "insert into to Produto (nome,descricao) values(?,?)";
tirei o to
Blz. Interessante que essa linha não estava assim na classe que tu havia passado antes. Tem que toma cuidado que quando pede ajuda, se o código mudou depois da última vez que foi postado, tem que colocar ele novamente. O código e o erro exato que está ocorrendo são importantíssimos para receber uma boa ajuda.
kra voltou a dar mesmo erro quando criei un novo package e transferia a class pra la. voltei pro pacote anterior mas o erro continuou
Quando muda a package tem que ser alterada as referências para as outras classes.
Oi Gustavo,
O caminho que o Roberto sugeriu é o ideal para esses casos de import. Você pode usar o CTRL+SHIFT+O que é um atalho muito bom nesses casos. Ele te dá a chance de importar tudo o que está faltando: tome sempre cuidado quando ele perguntar qual você quer importar, escolha sempre a do pacote que você quer.
O segundo e terceiro curso da trilha de Java dão uma idéia bem boa desses atalhos e dos erros comum no começo do uso de pacotes. Acho que vale a pena dar uma olhada neles. Como regra geral, se a linha vermelha diz que a classe não é encontrada é pois o import não foi feito. CTRL+SHIFT+O nele. Se o erro diz que o método nnao foi encontrado, mas a classe sim, é capaz de ter importado errado. Apaga o import e manda importar o certo (como o Roberto disse).
Outro detalhe que ajuda, na hora de postar código aqui, se você escapar o código antes e depois com três crases, o código fica formatado bonitinho (aqui à direita tem uma tabela explicando a formatação possivel).
Att
oi guilherme, oi rodrigo. apaguei os imports e dei o ctrl + shift + o
package lojavirtual.dao;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;
import lojavirtual.ConnectionPool;
import lojavirtual.ProdutosDao;
import lojavirtual.modelo.Produto;
e o connectionPool() ta com erro...ainda
quando eu clico no ConnectionPool() fala que o construtor ConnectionPool() nao esta visivel
E o código para darmos uma olhada?
rodrigo , guilherme fui la na class ConnectionPool e colquei opublic no construtor... o erro da casse TestaDaoDeProduto sumiu...
Ótimo Gustavo. Realmente o construtor não existia então ele estava reclamando.