Pergunta

Na consulta SQL a seguir usando a classe PreparedStatement:

String query_descrip = "insert into timitemdescription (itemkey, languageid, longdesc, shortdesc) values (?, 1033, ?,?)";
PreparedStatement pstmt2 = con.prepareStatement(query_descrip); 
pstmt2.setInt(1, rs4);
pstmt2.setString(2, itemdescription);
pstmt2.setString(3, itemdescription.substring(0,39));
pstmt2.executeUpdate();       

Por vezes, tenho apóstrofos e aspas simples e duplas em minhas descrições do item. por exemplo, o meu problema atrasado com um item é um "Planar 22" Monitor". É claro que a cadeia foi mal interpretado e pensei que o valor da descrição era apenas 'Planar 22'. Qual é a melhor maneira de lidar com caracteres especiais em uma string?

Eu li que algumas pessoas estão usando regex, porém estes parecia ser específica para um caso a caso. Outra maneira que eu estou trabalhando é a leitura do caráter matriz de cadeia pelo caráter. Eu estava esperando que houvesse uma maneira intensiva de recursos mais eficiente e menos de fazer isso.

UPDDATE Após alguns testes mais extensos, verifica-se que havia mais problemas que ocorrem no meu código. foi também um problema URL Encoding. Quando o formulário html foi sendo preenchido pelo código jsp, ele iria tentar mover o campo de descrição para um formulário online, ele trunca-lo lá no formulário em vez de na consulta. jTDS também corrigido o problema de receber os caracteres especiais. Porque jTDS é um frasco, ele também ajudou a evitar a reinicialização da máquina. Eu premiará os jTDS passe a graça desde que era o que eu parcialmente utilizado.

Agradecemos antecipadamente

Foi útil?

Solução

Uma vez que você estiver usando PreparedStatement, você não tem que fazer alguma coisa, ele vai ser tratado por você, o driver JDBC. A única coisa que você tem que olhar para fora é caracteres não-ASCII, especificamente você tem que certificar-se as tabelas DB usar uma codificação para colunas textuais que podem lidar com todos os caracteres que você vai usar. Mas isso é um problema SQL, não uma questão de Java.

Outras dicas

Você não precisa lidar com esses personagens, especialmente se você está ligando-os como parâmetros para um PreparedStatement, como você está fazendo. Esse é um dos principais benefícios da abordagem preparada-declaração.

Como os outros disseram, você não precisa fazer nada para lidar com os caracteres especiais. Você precisa tentar um driver JDBC diferente.

Tente utilizar o jTDS motorista e ver se ele ajuda você com o seu PreparedStatement. É um driver de banco de dados de código aberto para SQL Server. Eu usá-lo no trabalho agora e ele funciona como um campeão e realmente está em conformidade com a especificação JDBC ao contrário do driver MS.

Estou bastante certo de que o problema não é com o código que você postou. Para ajudar a solucionar:

  1. Você já tentou executar o código acima em um depurador? Qual é o valor de "itemdescription" antes de passá-lo para a chamada de banco de dados?
  2. Como você está realmente verificando o valor no banco de dados? É este o mais código Java? Ou você está olhando para ele com SQLCMD ou algo parecido?
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top