[resolvido] Retorno de resultado SQL

9 respostas
V

Galera, tow iniciando agora a aprender banco de dados e Java. O meu código abaixo deu o seguinte erro:
org.postgresql.util.PSQLException: Nenhum resultado foi retornado pela consulta.
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:253)

A tabela chega a ser criada, mas o código para de ser executado quando dá o erro. Pelo que percebi existe algum erro na última linha, ou eu devo fazer alguma coisa com a variável rs, ou devo chamar oturo método pra executar a String sql que não retorne nada… Se alguém puder ajudar eu agradeço!

Class.forName("org.postgresql.Driver"); Connection con = DriverManager.getConnection("jdbc:postgresql://localhost:5432/postgres", "postgres", "postgres" ); Statement st = con.createStatement(); String sql = ("CREATE TABLE vendedor (id int primary key, nome varchar(50), sexo char(1), tamanho char(4), tipo char(15))"); ResultSet rs = st.executeQuery(sql);
Ah e se alguém puder me ajudar com uma segunda dúvida eu agradeço. Como seria um código pra testar se uma tabela já existe no banco? Tipo, antes de executar esse meu código aí em cima eu queria saber como verificar se a tabela já existe (pois toda vez que eu rodo o código a tabela é criada e dá o erro, ai eu faço algumas alterações e quando vou rodar de novo dá erro dizendo que a tabela já existe, ai eu preciso ir no pgadmin pra excluir a tabela e tentar rodar o código de novo…)

9 Respostas

R

Como é um comando de atualização de dados, você não deve usar executeQuery(). Use executeUpdate().

V

Valeu! E quanto a segunda dúvida alguém sabe???

N

Respondendo a sua segunda pergunta, com uma breve pesquisa no Google, encontrei o seguinte código:

IF NOT EXISTS(SELECT tablename FROM pg_catalog.pg_tables WHERE tablename = 'mytable')

Acho que ficaria assim no seu código, não testei, não tenho certeza que funcione.

Class.forName("org.postgresql.Driver"); Connection con = DriverManager.getConnection("jdbc:postgresql://localhost:5432/postgres", "postgres", "postgres" ); Statement st = con.createStatement(); String sql = ("IF NOT EXISTS(SELECT tablename FROM pg_catalog.pg_tables WHERE tablename = 'vendedor') CREATE TABLE vendedor (id int primary key, nome varchar(50), sexo char(1), tamanho char(4), tipo char(15))"); ResultSet rs = st.executeQuery(sql);

Espero que funcione, geralmente eu crio minhas tabelas direto no SGBD.

V

nephestos:
Respondendo a sua segunda pergunta, com uma breve pesquisa no Google, encontrei o seguinte código:

IF NOT EXISTS(SELECT tablename FROM pg_catalog.pg_tables WHERE tablename = 'mytable')

Acho que ficaria assim no seu código, não testei, não tenho certeza que funcione.

Class.forName("org.postgresql.Driver"); Connection con = DriverManager.getConnection("jdbc:postgresql://localhost:5432/postgres", "postgres", "postgres" ); Statement st = con.createStatement(); String sql = ("IF NOT EXISTS(SELECT tablename FROM pg_catalog.pg_tables WHERE tablename = 'vendedor') CREATE TABLE vendedor (id int primary key, nome varchar(50), sexo char(1), tamanho char(4), tipo char(15))"); ResultSet rs = st.executeQuery(sql);

Espero que funcione, geralmente eu crio minhas tabelas direto no SGBD.


Não funcionou, deu o seguinte erro: org.postgresql.util.PSQLException: ERRO: erro de sintaxe em ou próximo a “IF” Posição: 1

R

Ou eu muito me engano, ou você continua usando executeQuery()…

V

roger_rf: eu mudei pra executeUpdate :wink:
nephestos, acho que vou seguir sua recomendação. Criar antes as tabelas pelo pgadmin.
Agora ainda tenho outra dúvida: Depois de criar um objeto vendedor e pedir ao usuário suas variáveis, fui tentar inserir na tabela dessa forma (que eu vi aqui no fórum há algum tempo):

String sql2 = "INSERT INTO vendedor VALUES (?, ?, ?, ?, ?)"; PreparedStatement ps = con.prepareStatement(sql2); ps.setInt(1, new Integer(vendedor.getCodigo())); ps.setString(2, vendedor.getNome()); ps.setString(3, vendedor.getSexo()); ps.setString(4, vendedor.getTamanho()); ps.setString(5, vendedor.getTipo()); ps.executeUpdate(); JOptionPane.showInputDialog("Informação adicionada", "Vendedor Cadastrado com Sucesso"); Ele adiciona os valores na tabela, mas não aparece a msg de confirmação (o código continua em execução, mas fica parado)

N

Realmente o código que eu postei não funciona, de qualquer maneira como roger disse você tem que usar executeUpdate();

N

Estranho não mostrar nenhuma mensagem, nem mesmo um erro, de qualquer maneira você deve usar showMessageDialog, ou senão tenta usar o System.out.println(“SUCESSO”);

V

Com System.out.printl funcionou!

Criado 30 de setembro de 2010
Ultima resposta 30 de set. de 2010
Respostas 9
Participantes 3