sexta-feira, 3 de janeiro de 2014

Ignorando case sensitive e acentuação no Java


Boa tarde pessoal, quanto tempo né?!

Estou passando por um período de correria, então estou sem tempo de postar no blog.

Mas vai ai uma sugestão que poupou algumas horas do meu trabalho.
Estava com um problema no sistema onde estou trabalhando, era na hora de executar qualquer consulta do sistema, ele não buscava os resultados quando usávamos letras maiúsculas e acentuação, passou pela minha cabeça em criar uma função em cada componente de pesquisa para retirar acentos e maiúsculas, mas achei meio tosco essa solução e bem trabalhosa, por que teria que mexer no sistema todo, então coloquei a caixola pra pensar mais e eu sabia que havia uma solução mais limpa, pedi ajuda para para o nosso arquiteto (Anderson Junqueira) e ele me disse que tinha como criar uma solução mais simples e bem melhor, ao invés de adotar a solução anterior para cada componente eu criei um classe que na hora que ele abre a conexão com o banco (ORACLE), ele roda um script que faz todo esse trabalho, olha o código abaixo como ficou:

import java.sql.Connection;
import java.sql.SQLException;

import org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor;
import org.eclipse.persistence.sessions.SessionEvent;
import org.eclipse.persistence.sessions.SessionEventAdapter;

  /**
   * @author Eduardo Monteiro
   * @since 17/12/2013
   */
  public class DBSessionListener extends SessionEventAdapter {

  public DBSessionListener() {
    super();
  }

  /**
   * Método criado para desconsiderar acentuação e letras maiúsculas,
   * após abrir a conexão com o banco de dados.
   * @param event
   */
  @Override
  public void postAcquireConnection(SessionEvent event) {
 
    Connection conn = ((DatabaseAccessor)event.getResult()).getConnection();
 
    try {
      conn.createStatement().executeUpdate("alter session set NLS_COMP=LINGUISTIC");
      conn.createStatement().executeUpdate("alter session set NLS_SORT=BINARY_AI");
   
    } catch(SQLException ex) {
      ex.printStackTrace();
    }
  }
}

Ótimo, agora configurei no persistence.xml que fica dentro do META-INF do projeto, e ficou dessa forma:

<?xml version="1.0" encoding="windows-1252"  ?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence" 
                        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                        xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
                        version="1.0">
  <persistence-unit name="NOMEDOPERSISTENCE-UNIT">
    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
   
   RETIREI AS ENTIDADES PARA O EXEMPLO NÃO FICAR GRANDE
    
<properties>
      <property name="javax.persistence.jdbc.driver" value="oracle.jdbc.driver.OracleDriver"/>
      <property name="eclipselink.target-database" value="Oracle11"/>
      <property name="eclipselink.id-validation" value="NULL"/>
      <property name="eclipselink.logging.level" value="OFF"/>
      <property name="eclipselink.cache.shared.default" value="false"/>
      <property name="eclipselink.query-results-cache" value="false"/>
      <property name="eclipselink.jdbc.sequence-connection-pool.initial" value="1"/>
      <property name="eclipselink.jdbc.sequence-connection-pool.max" value="1"/>
      <property name="eclipselink.session-event-listener" value="model.dao.DBSessionListener"/>
    </properties>
  </persistence-unit>

</persistence>

Só lembrando que essa solução foi adotada para o ORACLE, cada SGBD tem a sua função, mas o processo é o mesmo.

segunda-feira, 18 de novembro de 2013

Unicodes e Encodings

Unicodes

Bom dia pessoal, faz muito tempo que não posto nenhum artigo no blog, mas vai um rápido post a respeito do padrão adotado mundialmente que possibilita todos os caracteres de todas as linguagens utilizadas no mundo possam ser representadas em computadores chamada de unicode. 

O unicode fornece números únicos para cada caractere.

Encodings

Do que foi apresentado na seção anterior, podemos entender que o Unicode nada mais é do que uma enorme tabela que associa um número único (code point) para cada diferente letra ou símbolo dos alfabetos de todo o mundo. Mas como esses code points podem ser armazenados em um arquivo texto ou na memória do computador? É aí que entram em cena os encodings.
Um encoding é uma técnica que define regras para armazenar os code points dos caracteres que compõem as strings na memória do computador. Existem vários deles: UTF-8, ISO-8859-1 (apelidado de Latin-1), UCS-2, Windows-1252, etc. Cada encoding utiliza uma técnica distinta para lidar com os códigos Unicode.
O encoding UTF-8, por exemplo, é capaz de representar qualquer caractere Unicode. Para conseguir isso, utiliza uma técnica que onde uma quantidade de 1 a 6 bytes pode ser utilizada para representar cada caractere. Ou seja, o UTF-8 não trabalha com uma representação em tamanho fixo. Os code points de 0 a 127 são armazenados com 1 byte. Porém, os demais podem ser armazenados em memória com tamanho de 2 a 6 bytes.
O UTF-8 é completo (armazena qualquer caractere Unicode) e usa uma técnica de armazenamento que pode ser considerada “sofisticada”. Outros encodings, como ISSO-8859-1 e Windows-1252 são menos completos do que o UTF-8, e preferem trabalhar apenas com um subconjunto da tabela Unicode (ex: apenas com caracteres das linguagens ocidentais). Em compensação, podem fazer uso de técnicas de armazenamento mais simples que, além disso, conseguem representar strings gastando um número menor de bytes.

Tabela de Unicodes


decimal
hexadecimal
html encode
xml
javascript
java (unicode)

0
0
&#0;
&amp;#0;
\x00
\u0000

1
1
&#1;
&amp;#1;
\x01
\u0001

2
2
&#2;
&amp;#2;
\x02
\u0002

3
3
&#3;
&amp;#3;
\x03
\u0003

4
4
&#4;
&amp;#4;
\x04
\u0004

5
5
&#5;
&amp;#5;
\x05
\u0005

6
6
&#6;
&amp;#6;
\x06
\u0006

7
7
&#7;
&amp;#7;
\x07
\u0007

8
8
&#8;
&amp;#8;
\x08
\u0008

9
9
&#9;
&amp;#9;
\x09
\u0009

10
A
&#10;
&amp;#10;
\x0A
\u000A

11
B
&#11;
&amp;#11;
\x0B
\u000B

12
C
&#12;
&amp;#12;
\x0C
\u000C

13
D
&#13;
&amp;#13;
\x0D
\u000D

14
E
&#14;
&amp;#14;
\x0E
\u000E

15
F
&#15;
&amp;#15;
\x0F
\u000F

16
10
&#16;
&amp;#16;
\x10
\u0010

17
11
&#17;
&amp;#17;
\x11
\u0011

18
12
&#18;
&amp;#18;
\x12
\u0012

19
13
&#19;
&amp;#19;
\x13
\u0013

20
14
&#20;
&amp;#20;
\x14
\u0014

21
15
&#21;
&amp;#21;
\x15
\u0015

22
16
&#22;
&amp;#22;
\x16
\u0016

23
17
&#23;
&amp;#23;
\x17
\u0017

24
18
&#24;
&amp;#24;
\x18
\u0018

25
19
&#25;
&amp;#25;
\x19
\u0019

26
1A
&#26;
&amp;#26;
\x1A
\u001A

27
1B
&#27;
&amp;#27;
\x1B
\u001B

28
1C
&#28;
&amp;#28;
\x1C
\u001C

29
1D
&#29;
&amp;#29;
\x1D
\u001D

30
1E
&#30;
&amp;#30;
\x1E
\u001E

31
1F
&#31;
&amp;#31;
\x1F
\u001F

32
20
&#32;
&amp;#32;
\x20
\u0020
!
33
21
&#33;
&amp;#33;
\x21
\u0021
"
34
22
&#34;
&amp;#34;
\x22
\u0022
#
35
23
&#35;
&amp;#35;
\x23
\u0023
$
36
24
&#36;
&amp;#36;
\x24
\u0024
%
37
25
&#37;
&amp;#37;
\x25
\u0025
&
38
26
&#38;
&amp;#38;
\x26
\u0026
'
39
27
&#39;
&amp;#39;
\x27
\u0027
(
40
28
&#40;
&amp;#40;
\x28
\u0028
)
41
29
&#41;
&amp;#41;
\x29
\u0029
*
42
2A
&#42;
&amp;#42;
\x2A
\u002A
+
43
2B
&#43;
&amp;#43;
\x2B
\u002B
,
44
2C
&#44;
&amp;#44;
\x2C
\u002C
-
45
2D
&#45;
&amp;#45;
\x2D
\u002D
.
46
2E
&#46;
&amp;#46;
\x2E
\u002E
/
47
2F
&#47;
&amp;#47;
\x2F
\u002F
0
48
30
&#48;
&amp;#48;
\x30
\u0030
1
49
31
&#49;
&amp;#49;
\x31
\u0031
2
50
32
&#50;
&amp;#50;
\x32
\u0032
3
51
33
&#51;
&amp;#51;
\x33
\u0033
4
52
34
&#52;
&amp;#52;
\x34
\u0034
5
53
35
&#53;
&amp;#53;
\x35
\u0035
6
54
36
&#54;
&amp;#54;
\x36
\u0036
7
55
37
&#55;
&amp;#55;
\x37
\u0037
8
56
38
&#56;
&amp;#56;
\x38
\u0038
9
57
39
&#57;
&amp;#57;
\x39
\u0039
:
58
3A
&#58;
&amp;#58;
\x3A
\u003A
;
59
3B
&#59;
&amp;#59;
\x3B
\u003B
< 
60
3C
&#60;
&amp;#60;
\x3C
\u003C
=
61
3D
&#61;
&amp;#61;
\x3D
\u003D
> 
62
3E
&#62;
&amp;#62;
\x3E
\u003E
?
63
3F
&#63;
&amp;#63;
\x3F
\u003F
@
64
40
&#64;
&amp;#64;
\x40
\u0040
A
65
41
&#65;
&amp;#65;
\x41
\u0041
B
66
42
&#66;
&amp;#66;
\x42
\u0042
C
67
43
&#67;
&amp;#67;
\x43
\u0043
D
68
44
&#68;
&amp;#68;
\x44
\u0044
E
69
45
&#69;
&amp;#69;
\x45
\u0045
F
70
46
&#70;
&amp;#70;
\x46
\u0046
G
71
47
&#71;
&amp;#71;
\x47
\u0047
H
72
48
&#72;
&amp;#72;
\x48
\u0048
I
73
49
&#73;
&amp;#73;
\x49
\u0049
J
74
4A
&#74;
&amp;#74;
\x4A
\u004A
K
75
4B
&#75;
&amp;#75;
\x4B
\u004B
L
76
4C
&#76;
&amp;#76;
\x4C
\u004C
M
77
4D
&#77;
&amp;#77;
\x4D
\u004D
N
78
4E
&#78;
&amp;#78;
\x4E
\u004E
O
79
4F
&#79;
&amp;#79;
\x4F
\u004F
P
80
50
&#80;
&amp;#80;
\x50
\u0050
Q
81
51
&#81;
&amp;#81;
\x51
\u0051
R
82
52
&#82;
&amp;#82;
\x52
\u0052
S
83
53
&#83;
&amp;#83;
\x53
\u0053
T
84
54
&#84;
&amp;#84;
\x54
\u0054
U
85
55
&#85;
&amp;#85;
\x55
\u0055
V
86
56
&#86;
&amp;#86;
\x56
\u0056
W
87
57
&#87;
&amp;#87;
\x57
\u0057
X
88
58
&#88;
&amp;#88;
\x58
\u0058
Y
89
59
&#89;
&amp;#89;
\x59
\u0059
Z
90
5A
&#90;
&amp;#90;
\x5A
\u005A
[
91
5B
&#91;
&amp;#91;
\x5B
\u005B
\
92
5C
&#92;
&amp;#92;
\x5C
\u005C
]
93
5D
&#93;
&amp;#93;
\x5D
\u005D
^
94
5E
&#94;
&amp;#94;
\x5E
\u005E
_
95
5F
&#95;
&amp;#95;
\x5F
\u005F
`
96
60
&#96;
&amp;#96;
\x60
\u0060
a
97
61
&#97;
&amp;#97;
\x61
\u0061
b
98
62
&#98;
&amp;#98;
\x62
\u0062
c
99
63
&#99;
&amp;#99;
\x63
\u0063
d
100
64
&#100;
&amp;#100;
\x64
\u0064
e
101
65
&#101;
&amp;#101;
\x65
\u0065
f
102
66
&#102;
&amp;#102;
\x66
\u0066
g
103
67
&#103;
&amp;#103;
\x67
\u0067
h
104
68
&#104;
&amp;#104;
\x68
\u0068
i
105
69
&#105;
&amp;#105;
\x69
\u0069
j
106
6A
&#106;
&amp;#106;
\x6A
\u006A
k
107
6B
&#107;
&amp;#107;
\x6B
\u006B
l
108
6C
&#108;
&amp;#108;
\x6C
\u006C
m
109
6D
&#109;
&amp;#109;
\x6D
\u006D
n
110
6E
&#110;
&amp;#110;
\x6E
\u006E
o
111
6F
&#111;
&amp;#111;
\x6F
\u006F
p
112
70
&#112;
&amp;#112;
\x70
\u0070
q
113
71
&#113;
&amp;#113;
\x71
\u0071
r
114
72
&#114;
&amp;#114;
\x72
\u0072
s
115
73
&#115;
&amp;#115;
\x73
\u0073
t
116
74
&#116;
&amp;#116;
\x74
\u0074
u
117
75
&#117;
&amp;#117;
\x75
\u0075
v
118
76
&#118;
&amp;#118;
\x76
\u0076
w
119
77
&#119;
&amp;#119;
\x77
\u0077
x
120
78
&#120;
&amp;#120;
\x78
\u0078
y
121
79
&#121;
&amp;#121;
\x79
\u0079
z
122
7A
&#122;
&amp;#122;
\x7A
\u007A
{
123
7B
&#123;
&amp;#123;
\x7B
\u007B
|
124
7C
&#124;
&amp;#124;
\x7C
\u007C
}
125
7D
&#125;
&amp;#125;
\x7D
\u007D
~
126
7E
&#126;
&amp;#126;
\x7E
\u007E

127
7F
&#127;
&amp;#127;
\x7F
\u007F
128
80
&#128;
&amp;#128;
\x80
\u0080

129
81
&#129;
&amp;#129;
\x81
\u0081
130
82
&#130;
&amp;#130;
\x82
\u0082
ƒ
131
83
&#131;
&amp;#131;
\x83
\u0083
132
84
&#132;
&amp;#132;
\x84
\u0084
133
85
&#133;
&amp;#133;
\x85
\u0085
134
86
&#134;
&amp;#134;
\x86
\u0086
135
87
&#135;
&amp;#135;
\x87
\u0087
ˆ
136
88
&#136;
&amp;#136;
\x88
\u0088
137
89
&#137;
&amp;#137;
\x89
\u0089
Š
138
8A
&#138;
&amp;#138;
\x8A
\u008A
139
8B
&#139;
&amp;#139;
\x8B
\u008B
Œ
140
8C
&#140;
&amp;#140;
\x8C
\u008C

141
8D
&#141;
&amp;#141;
\x8D
\u008D
Ž
142
8E
&#142;
&amp;#142;
\x8E
\u008E

143
8F
&#143;
&amp;#143;
\x8F
\u008F

144
90
&#144;
&amp;#144;
\x90
\u0090
145
91
&#145;
&amp;#145;
\x91
\u0091
146
92
&#146;
&amp;#146;
\x92
\u0092
147
93
&#147;
&amp;#147;
\x93
\u0093
148
94
&#148;
&amp;#148;
\x94
\u0094
149
95
&#149;
&amp;#149;
\x95
\u0095
150
96
&#150;
&amp;#150;
\x96
\u0096
151
97
&#151;
&amp;#151;
\x97
\u0097
˜
152
98
&#152;
&amp;#152;
\x98
\u0098
153
99
&#153;
&amp;#153;
\x99
\u0099
š
154
9A
&#154;
&amp;#154;
\x9A
\u009A
155
9B
&#155;
&amp;#155;
\x9B
\u009B
œ
156
9C
&#156;
&amp;#156;
\x9C
\u009C

157
9D
&#157;
&amp;#157;
\x9D
\u009D
ž
158
9E
&#158;
&amp;#158;
\x9E
\u009E
Ÿ
159
9F
&#159;
&amp;#159;
\x9F
\u009F

160
A0
&#160;
&amp;#160;
\xA0
\u00A0
¡
161
A1
&#161;
&amp;#161;
\xA1
\u00A1
¢
162
A2
&#162;
&amp;#162;
\xA2
\u00A2
£
163
A3
&#163;
&amp;#163;
\xA3
\u00A3
¤
164
A4
&#164;
&amp;#164;
\xA4
\u00A4
¥
165
A5
&#165;
&amp;#165;
\xA5
\u00A5
¦
166
A6
&#166;
&amp;#166;
\xA6
\u00A6
§
167
A7
&#167;
&amp;#167;
\xA7
\u00A7
¨
168
A8
&#168;
&amp;#168;
\xA8
\u00A8
©
169
A9
&#169;
&amp;#169;
\xA9
\u00A9
ª
170
AA
&#170;
&amp;#170;
\xAA
\u00AA
«
171
AB
&#171;
&amp;#171;
\xAB
\u00AB
¬
172
AC
&#172;
&amp;#172;
\xAC
\u00AC

173
AD
&#173;
&amp;#173;
\xAD
\u00AD
®
174
AE
&#174;
&amp;#174;
\xAE
\u00AE
¯
175
AF
&#175;
&amp;#175;
\xAF
\u00AF
°
176
B0
&#176;
&amp;#176;
\xB0
\u00B0
±
177
B1
&#177;
&amp;#177;
\xB1
\u00B1
²
178
B2
&#178;
&amp;#178;
\xB2
\u00B2
³
179
B3
&#179;
&amp;#179;
\xB3
\u00B3
´
180
B4
&#180;
&amp;#180;
\xB4
\u00B4
µ
181
B5
&#181;
&amp;#181;
\xB5
\u00B5
182
B6
&#182;
&amp;#182;
\xB6
\u00B6
·
183
B7
&#183;
&amp;#183;
\xB7
\u00B7
¸
184
B8
&#184;
&amp;#184;
\xB8
\u00B8
¹
185
B9
&#185;
&amp;#185;
\xB9
\u00B9
º
186
BA
&#186;
&amp;#186;
\xBA
\u00BA
»
187
BB
&#187;
&amp;#187;
\xBB
\u00BB
¼
188
BC
&#188;
&amp;#188;
\xBC
\u00BC
½
189
BD
&#189;
&amp;#189;
\xBD
\u00BD
¾
190
BE
&#190;
&amp;#190;
\xBE
\u00BE
¿
191
BF
&#191;
&amp;#191;
\xBF
\u00BF
À
192
C0
&#192;
&amp;#192;
\xC0
\u00C0
Á
193
C1
&#193;
&amp;#193;
\xC1
\u00C1
Â
194
C2
&#194;
&amp;#194;
\xC2
\u00C2
Ã
195
C3
&#195;
&amp;#195;
\xC3
\u00C3
Ä
196
C4
&#196;
&amp;#196;
\xC4
\u00C4
Å
197
C5
&#197;
&amp;#197;
\xC5
\u00C5
Æ
198
C6
&#198;
&amp;#198;
\xC6
\u00C6
Ç
199
C7
&#199;
&amp;#199;
\xC7
\u00C7
È
200
C8
&#200;
&amp;#200;
\xC8
\u00C8
É
201
C9
&#201;
&amp;#201;
\xC9
\u00C9
Ê
202
CA
&#202;
&amp;#202;
\xCA
\u00CA
Ë
203
CB
&#203;
&amp;#203;
\xCB
\u00CB
Ì
204
CC
&#204;
&amp;#204;
\xCC
\u00CC
Í
205
CD
&#205;
&amp;#205;
\xCD
\u00CD
Î
206
CE
&#206;
&amp;#206;
\xCE
\u00CE
Ï
207
CF
&#207;
&amp;#207;
\xCF
\u00CF
Ð
208
D0
&#208;
&amp;#208;
\xD0
\u00D0
Ñ
209
D1
&#209;
&amp;#209;
\xD1
\u00D1
Ò
210
D2
&#210;
&amp;#210;
\xD2
\u00D2
Ó
211
D3
&#211;
&amp;#211;
\xD3
\u00D3
Ô
212
D4
&#212;
&amp;#212;
\xD4
\u00D4
Õ
213
D5
&#213;
&amp;#213;
\xD5
\u00D5
Ö
214
D6
&#214;
&amp;#214;
\xD6
\u00D6
×
215
D7
&#215;
&amp;#215;
\xD7
\u00D7
Ø
216
D8
&#216;
&amp;#216;
\xD8
\u00D8
Ù
217
D9
&#217;
&amp;#217;
\xD9
\u00D9
Ú
218
DA
&#218;
&amp;#218;
\xDA
\u00DA
Û
219
DB
&#219;
&amp;#219;
\xDB
\u00DB
Ü
220
DC
&#220;
&amp;#220;
\xDC
\u00DC
Ý
221
DD
&#221;
&amp;#221;
\xDD
\u00DD
Þ
222
DE
&#222;
&amp;#222;
\xDE
\u00DE
ß
223
DF
&#223;
&amp;#223;
\xDF
\u00DF
à
224
E0
&#224;
&amp;#224;
\xE0
\u00E0
á
225
E1
&#225;
&amp;#225;
\xE1
\u00E1
â
226
E2
&#226;
&amp;#226;
\xE2
\u00E2
ã
227
E3
&#227;
&amp;#227;
\xE3
\u00E3
ä
228
E4
&#228;
&amp;#228;
\xE4
\u00E4
å
229
E5
&#229;
&amp;#229;
\xE5
\u00E5
æ
230
E6
&#230;
&amp;#230;
\xE6
\u00E6
ç
231
E7
&#231;
&amp;#231;
\xE7
\u00E7
è
232
E8
&#232;
&amp;#232;
\xE8
\u00E8
é
233
E9
&#233;
&amp;#233;
\xE9
\u00E9
ê
234
EA
&#234;
&amp;#234;
\xEA
\u00EA
ë
235
EB
&#235;
&amp;#235;
\xEB
\u00EB
ì
236
EC
&#236;
&amp;#236;
\xEC
\u00EC
í
237
ED
&#237;
&amp;#237;
\xED
\u00ED
î
238
EE
&#238;
&amp;#238;
\xEE
\u00EE
ï
239
EF
&#239;
&amp;#239;
\xEF
\u00EF
ð
240
F0
&#240;
&amp;#240;
\xF0
\u00F0
ñ
241
F1
&#241;
&amp;#241;
\xF1
\u00F1
ò
242
F2
&#242;
&amp;#242;
\xF2
\u00F2
ó
243
F3
&#243;
&amp;#243;
\xF3
\u00F3
ô
244
F4
&#244;
&amp;#244;
\xF4
\u00F4
õ
245
F5
&#245;
&amp;#245;
\xF5
\u00F5
ö
246
F6
&#246;
&amp;#246;
\xF6
\u00F6
÷
247
F7
&#247;
&amp;#247;
\xF7
\u00F7
ø
248
F8
&#248;
&amp;#248;
\xF8
\u00F8
ù
249
F9
&#249;
&amp;#249;
\xF9
\u00F9
ú
250
FA
&#250;
&amp;#250;
\xFA
\u00FA
û
251
FB
&#251;
&amp;#251;
\xFB
\u00FB
ü
252
FC
&#252;
&amp;#252;
\xFC
\u00FC
ý
253
FD
&#253;
&amp;#253;
\xFD
\u00FD
þ
254
FE
&#254;
&amp;#254;
\xFE
\u00FE
ÿ
255
FF
&#255;
&amp;#255;
\xFF
\u00FF

Partes do artigo retirado de um artigo postado pelo Dr e Mestre  da DevMidia