Pessoal, eu tou com uma tabela .dbf com dados e eu quero fazer um programa java pra pegar os dados dessa tabela e passar pra uma tabela do MySQL. O problema é que tem linhas nessa tabela .dbf que tem uma coluna que ta vazia e toda vez da erro quando chega nessa linha e para a transferência.
Cara, mostra o fonte do arquivo ConexaoABC.java, ou pelo menos trechos de código próximos da linha 122 que talvez alguém possa te ajudar…
[]'s.
Jorgev
Eu coloquei uma string pra pegar o resultado da consulta e imprimir, ai ele para de imprimir quando chega na primeira linha onde a coluna 5 está vazia. se eu colocar pra imprimir só as colunas que estao todas preenchidas deixando a 5 de fora ele imprime tudo.
O código é esse:
publicstaticvoidmain(Stringargs[])throwsSQLException{ConexaoABCconex=newConexaoABC();conex.consulta("SELECT MED_BARRA, LAB_NOM, MED_DES, MED_APR, MED_PRINCI, MED_PCO1, MED_PLA1 FROM tabela");try{while(conex.resultSet.next()){Stringresult="'"+conex.resultSet.getObject(1).toString()+"','"+conex.resultSet.getObject(2).toString()+"'"+",'"+conex.resultSet.getObject(3).toString()+"','"+conex.resultSet.getObject(4).toString()+"',"+"'"+conex.resultSet.getObject(5).toString()+"','"+conex.resultSet.getObject(6).toString()+"'"+",'"+conex.resultSet.getObject(7).toString()+"'";System.out.println(result);}//fim do while}catch(Exceptione){e.printStackTrace();}
o erro é na linha onde ele pega o conex.reusultSet.getObject(5).toString()
T
thingol
ora, getObject(5) deve estar retornando null. Não se esqueça que não é possível chamar método nenhum de um objeto null.
luistiagos
algum desses seus getObject(n) deve estar null… dai null.toString() == a um belo NullPointerException…
T
thingol
Em vez de “’” + conex.resultSet.getObject(5).toString() + “’”, que é muito nojento, escreva um método assim:
Dá uma debugada pra ver como tá sua query antes dela ser executada e posta aqui… porque o erro agora é de SQL, não de Java… pode ser algum problema com o campo ou com aspas…
Até+
Jorgev
Paulo_Amorim:
Olá
Dá uma debugada pra ver como tá sua query antes dela ser executada e posta aqui… porque o erro agora é de SQL, não de Java… pode ser algum problema com o campo ou com aspas…
Até+
Olha eu fui colocando System.out em todas as linhas e todas as colunas uma por vez pra ver se descobria o erro, e vi que o erro é que no bd que eu tou tentando tranferir tem palavras assim don’t, com aspas simples, ai da erro por causa das aspas que eu coloco ‘don’t’.
E agora o que que eu faço pra colocar a palavra com o apostrofo?
kaique
Cara, não sei a respeito do banco que você trabalha, mas se você substituir isso ’ por isso ‘’, no Oracle resolve.
Então, não sei se isso é uma prática ruim, mas se você fizer um replaceAll("’", “’’”), acho que resolve o seu problema. Testa aí e depois dá um toque…
[]'s.
Amanweb
Você deve utilizar PreparedStatement para evitar esses e outros erros de SQL Injection.
[]s
B
boblast
Oi pessoal, ressucitando um tópico aqui por que meu amigo Aman pediu.
É como o Aman disse, você deve utilizar o PreparedStatement para evitar alguns erros como: aspas simples no meio da sql, porém o erro de NullPointerException ocorrerá sempre que você tentar acessar um método ou parâmetro em runtime em uma variável de referência que não aponta para um objeto. Isso independente ou não de você usar PreparedStatement pode acontecer pois o ResultSet pode retornar nulo.
Não são erros de SQL Injection, são ataques de Injection e um dos tipos pode ser SQL. Isso acontece porque você esta montando as querys dinâmicamente, mesmo usando PreparedStatement você terá esses problemas sempre que usar a estratégia de construir suas querys dinamicamente. A regra é não construir querys dinamicamente e use o PreparedStatement para lhe ajudar nessa tarefa.
Abraço.
Amanweb
90 graus a direita…
boblast:
Oi pessoal, ressucitando um tópico aqui por que meu amigo Aman pediu.
É como o Aman disse, você deve utilizar o PreparedStatement para evitar alguns erros como: aspas simples no meio da sql, porém o erro de NullPointerException ocorrerá sempre que você tentar acessar um método ou parâmetro em runtime em uma variável de referência que não aponta para um objeto. Isso independente ou não de você usar PreparedStatement pode acontecer pois o ResultSet pode retornar nulo.
Não são erros de SQL Injection, são ataques de Injection e um dos tipos pode ser SQL. Isso acontece porque você esta montando as querys dinâmicamente, mesmo usando PreparedStatement você terá esses problemas sempre que usar a estratégia de construir suas querys dinamicamente. A regra é não construir querys dinamicamente e use o PreparedStatement para lhe ajudar nessa tarefa.