Erro em instrução SQL

17 respostas
pyro

Pessoal estou passando a seguinte instrução SQL para o banco via Java:

CREATE TABLE \"SUP\".\"CLIENTES\" " + "(\"COD_CLI\" NUMBER(7,0) NOT NULL ENABLE, " + "\"CID_COD_CID\" NUMBER(5,0) NOT NULL ENABLE, " + "\"STA_CLI_COD_STATUS\" NUMBER(2,0) NOT NULL ENABLE, " + "\"TIPO_PESS_COD_PESSOA_JUR\" NUMBER(2,0) NOT NULL ENABLE, " + "\"PORTE_COD_POR\" NUMBER(2,0) NOT NULL ENABLE, " + "\"ATIV_COD_ATIVIDADE\" NUMBER(2,0) NOT NULL ENABLE, " + "\"TIPO_COM_COD_COM\" NUMBER(2,0), " + "\"RAZAO_SOC\" VARCHAR2(60 BYTE) NOT NULL ENABLE, " + "\"CGC\" VARCHAR2(15 BYTE), " + "\"REG_FIS\" VARCHAR2(1 BYTE), " + "\"DATA_CADASTRO\" DATE NOT NULL ENABLE, " + "\"IMP_FIS\" VARCHAR2(1 BYTE), " + "\"ATIV_COD_ATIVIDADE_ATIVIDADE_S\" NUMBER(2,0), " + "\"NOME_FANTASIA\" VARCHAR2(30 BYTE), " + "\"ENDERECO\" VARCHAR2(50 BYTE), " + "\"BAIRRO\" VARCHAR2(50 BYTE), " + "\"COMPLEMENTO_END\" VARCHAR2(20 BYTE), " + "\"CEP\" VARCHAR2(9 BYTE), " + "\"CX_POSTAL\" NUMBER(5,0), " + "\"TEL\" VARCHAR2(15 BYTE), " + "\"FAX\" VARCHAR2(15 BYTE), " + "\"E_MAIL\" VARCHAR2(50 BYTE), " + "\"INSC_EST\" VARCHAR2(16 BYTE), " + "\"INSC_MUN\" VARCHAR2(16 BYTE), " + "\"INSC_EXPORT\" VARCHAR2(16 BYTE), " + "\"COD_ANT\" NUMBER(7,0), " + "\"HOME_PAGE\" VARCHAR2(50 BYTE), " + "\"CGSIA\" VARCHAR2(10 BYTE), " + "\"PROCE_CGSIA\" VARCHAR2(14 BYTE), " + "\"REG_ESP_MS\" VARCHAR2(16 BYTE), " + "\"DATA_STATUS\" DATE, " + "\"SUFRAMA\" VARCHAR2(20 BYTE), " + "\"DATA_VENC_SUF\" DATE, " + "\"BLOCK_SUF\" VARCHAR2(1 BYTE) DEFAULT 'N', " + "\"REG_ESP_RS\" NUMBER(12,0), " + "\"DATA_VENC_RS\" DATE, " + "\"FLAG_SUFRAMA\" VARCHAR2(1 BYTE) DEFAULT 'A' NOT NULL ENABLE, " + "\"OBS_SUFRAMA\" VARCHAR2(256 BYTE), " + "\"CLU_CODIGO\" NUMBER, " + "\"FLAG_CONTRATO\" VARCHAR2(1 BYTE) DEFAULT 'N', " + "\"COD_PESSOA_FISCAL\" NUMBER(3,0), " + "\"CLI_NROCHECKOUT\" NUMBER(5,0), " + "\"TIPO_PALETIZACAO\" VARCHAR2(50 BYTE), " + "CONSTRAINT \"CLI_PK\" PRIMARY KEY (\"COD_CLI\") " + "USING INDEX PCTFREE 80 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS " + "STORAGE(INITIAL 10567680 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS [telefone removido] " + "PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT) " + "TABLESPACE \"USERS\" ENABLE " + ") PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING " + "STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS [telefone removido] " + "PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT) " + "TABLESPACE \"USERS\"
Ela cria uma tabela, como no SQL vou utilizar “” pensei em colocar um barra invertida para dar o escape, o fato é que quando eu executo esse SQL dá o erro:

NullPointerException

Será que é por causa das barras invertidas? Alguém tem alguma sugestão?

17 Respostas

gilberto_oliveira

Que tal usar:

public void inserir(ClientePessoaFisica cliente) throws SQLException 
{
        PreparedStatement stmt = null;
        
        stmt = connection.prepareStatement("
                       INSERT INTO TB_CLIENTE_PF(NOME, CPF, RG) VALUES(?,?,?");
        try 
        {
            stmt.setString(1, cliente.getNome());
            stmt.setString(2, cliente.getCpf());
            stmt.setString(3, cliente.getRg());
      
            stmt.execute();
        } 
        catch (SQLException e) 
        {
            throw new SQLException("Não foi possível registrar as informações no banco dados");
        } 
        finally 
        {
        	stmt.close();
        }
}
pyro

Vlw pela força, mas o meu SQL é para criar uma tabela e não inserir dados como o seu exemplo.

gilberto_oliveira

Recomendo seguintes leituras:

:arrow: http://www.guj.com.br/posts/list/1673.java
:arrow: http://www.guj.com.br/java.tutorial.artigo.115.1.guj
:arrow: http://www.fontes.pro.br/educacional/materialpaginas/java/arquivos/jdbc/jdbc.php

t+

pyro

Cara tudo isso citado já li e sei fazer, a minha dúvida é por se eu der um select * from tabela tá rodando beleza e seu eu der um create table dá o erro mencionado.
Alguém sabe se tem alguma diferença no código Java para realizar um create table?

gilberto_oliveira

Entendi, posta o código que vc ta usando pra realizar os inserts e os query.

//pra consulta
ResultSet rs = stmt.executeQuery(); // stmt é um preparedstatement
//pra inserção
stmt.execute(); //stmt é um preparedstatement

pra criação de tabela, confesso que nunca tentei.

Posta por favor seu código que fica mais fácil pra gente ajudar.

O

Vamos por parte: em que ponto do seu código é que está dando NullPointerException?
Qual interface (CallableStatement, PreparedStatement ou Statement) você está usando?
Qual método (execute, executeQuery, etc) você está chamando?

pyro

Para mim também é a primeira vez que tento dar um create table, como já tinha até criado usuário e dado grant´s achei que um create table seria fácil.
A exception ocorre nesse ponto:

stm = conexao.prepareStatement(getSelect());

Onde o getSelect() é um método que vem com a string “create table blá, blá, blá”. Eu já testei esse instrução direto no banco e funciona bem.
Será o problema da interface?

maquiavelbona

Dê um pouco mais de código né? Não sabemos como funciona esse getSelect() e o que ele retorna daonde etc.

Até!

O

Por favor, mande o stacktrace completo também…

maquiavelbona

Acho que o stacktrace nem é preciso, logo que eu tenho quase certeza absoluta que o método getSelect() não está retornando nada. Mas se puder, é bom também.

Até!

pyro

Bem, o método getSelect(), nada mais é que um método get comum, dessa forma:

public String getSelect(){
  return select;
}

Ele não faz nada e já verifiquei que ele contém uma string com uma instrução SQL válida ao campo.

O
stm = conexao.prepareStatement(getSelect());

Se você tem 100% de CERTEZA que o NullPointerException dá nesta exata linha de código e que getSelect retorna uma String not Null, então a única conclusão que posso chegar (principalmente por você não ter postado o stacktrace e nem o resto do código) é que a variável conexao está null.

Alias, qual banco de dados você está usando?

dreamspeaker

Eu também acho que a conexao está nula.

A propósito, pra você executar um comando DDL como CREATE, ALTER, DROP… vc precisa utilizar o método executeUpdate(…)

peczenyj

O SQL poderia ser

“SELECT UM MILHÃO DE DOLARES FROM CONTA BANCARIA DO PC FARIA”

que o erro não teria nada haver com a instrução. Tem algum objeto null que não deveria ser null.

rolemberg

legal seria vc postar todo o log que esta vindo do servidor que vc esta usando…

mano8801

<a href="http://www.tomasihost.com/index.php?referral=mano8801>Tomasi Host

mano8801

opa, desculpa, colei a coisa errada, se puderem apagar, obrigado :slight_smile:

Criado 8 de fevereiro de 2008
Ultima resposta 15 de fev. de 2008
Respostas 17
Participantes 8