Monto de forma dinamica uma select, o problema é que as vezes um dos campos string que montam a select vem com caracteres tipo ",’,(,), etc.
Como eu posso fazer para tratar esse string de forma que até esses caracteres sejam inseridos no banco sem danificar a minha select.
P.S.: eu não posso limitar a string pois em alguns casos ela precisa obrigatoriamente conter esses caracteres.
Cara, vi o exemplo mas o erro persiste, consegui localizar com clareza onde ele ocorre, em alguns momentos a minha string para montar a select vem com algumas palavras que usam apostrofo '. É isso que causa erro de mal formação na select.
O código que eu uso é isso:
package controleweb;
import java.io.File;
import java.io.IOException;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import jxl.Cell;
import jxl.NumberCell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;
/**
*
* @author petter
*/
public class Recebidos {
private static Connection conn;
private static int i = 0;
private static String stringa1;
private static String stringb2;
private static double douc3;
private static String stringd4;
private static String stringe5;
private static String stringf6;
private static String stringg7;
private static String stringh8;
private static String stringi9;
private static String stringj10;
private static String stringl11;
private static int intm12;
private static int resultado;
private static String normalizeIP;
private static int rs2;
private static int rs3;
public static String normalizeIP (String ip) throws UnknownHostException {
InetAddress addr = InetAddress.getByName (ip);
return addr.getHostAddress();
}
/**
* Creates a new instance of Enviados
*/
public static void main(String[] args ) throws IOException, BiffException,
ClassNotFoundException, SQLException {
//Dados para a conexão ao banco de dados
String driverName = "oracle.jdbc.driver.OracleDriver";
String serverName = "server";
String username = "user";
String password = "pass";
String url = "jdbc:oracle:thin:@"+serverName ;
//Conexão com o banco de dados
Class.forName(driverName);
Connection conn = DriverManager.getConnection(url, username, password);
//Pega o último valor do campo ID para auto-incremento
Statement stm = conn.createStatement();
ResultSet rs = stm.executeQuery("select max(ECO_ID) eco_id from email_controle");
while(rs.next()){
rs2 = rs.getInt("eco_id");
}
/* pega o arquivo do Excel */
Workbook workbook = Workbook.getWorkbook(new File("recebidos.xls"));
/* pega a primeira planilha dentro do arquivo XLS */
Sheet sheet = workbook.getSheet(0);
//Pega a quantidade de linhas da planilha
int linhas = sheet.getRows();
//Laço para fazer o looping para gravar todas as linhas da planilha
for(i = 0; i < linhas; i++){
/* pega os valores das células como se numa matriz */
Cell a1 = sheet.getCell(0,i);
Cell b2 = sheet.getCell(1,i);
Cell c3 = sheet.getCell(2,i);
Cell d4 = sheet.getCell(3,i);
Cell e5 = sheet.getCell(4,i);
Cell f6 = sheet.getCell(5,i);
Cell g7 = sheet.getCell(6,i);
Cell h8 = sheet.getCell(7,i);
Cell i9 = sheet.getCell(8,i);
Cell j10 = sheet.getCell(9,i);
Cell l11 = sheet.getCell(10,i);
/* pega os conteúdos das células */
stringa1 = a1.getContents();
stringb2 = b2.getContents();
NumberCell nc = (NumberCell) c3;
douc3 = nc.getValue();
int intc3;
intc3 = (int)douc3;
stringd4 = d4.getContents();
normalizeIP = normalizeIP (stringd4);
stringe5 = e5.getContents();
stringf6 = f6.getContents();
stringg7 = g7.getContents();
stringh8 = h8.getContents();
stringi9 = i9.getContents();
stringj10 = j10.getContents();
stringl11 = l11.getContents();
intm12 = 2;
//Incrementa o número da ID conforme o último registro pesquisado
if(rs2 < 1){
rs2 = 1;
}else{
rs2 = rs2 + 1;
System.out.println("Registro atual em gravação: " + i);
}
/*Executa o insert para inserir os dados no banco de testes MySQL*/
PreparedStatement ps = conn.prepareStatement("INSERT INTO EMAIL_CONTROLE(ECO_ID, ECO_DATA," +
" ECO_HORA, ECO_TAM, ECO_DE," +
" ECO_PARA, ECO_CC, " +
" ECO_ASSUNTO, ECO_ANEXO, ECT_ID," +
" ECO_IP) "+
"VALUES('"+rs2+"', to_date('"+stringa1+"','DD/MM/YYYY'),'"+stringb2+"','"+intc3+"'" +
" ,'"+stringg7+"','"+stringh8+"','"+stringi9+"','"+stringj10+"','"+stringl11+"'" +
" ,'"+intm12+"','"+normalizeIP+"')");
ps.executeUpdate();
conn.commit();
}
workbook.close();
rs3 = rs2 + i;
//Gera mensagens com dados sobre a atualização do banco
if(linhas == i){
System.out.println("*******************************************************");
System.out.println("*** Atualização de utilização de e-mail (recebidos) ***");
System.out.println("*******************************************************");
System.out.println("Banco de dados atualizado referente ao dia " + stringa1 + ".");
System.out.println("Total de registros gravados: " + linhas + ".");
System.out.println("Registros ID gravados de " + rs2 + " até " + rs3);
System.out.println("Aplicativo finalizado !");
System.out.println("");
}
}
}
É o seguinte , vc não pode fazer sua qury de insert desta maneira ae.
Vc deve passar seus parametros value desta forma (?,?,?,?)
depois vc seta cada parametro desta forma
set.NomeParametro(valor);
Abaixo segue mais um exemplo.