|
哎,我的3p丢了,要不就能和lz并肩战斗解决短信问题了.
7 S( R( w" L& K$ }
, w1 S* q8 f$ wCREATE TRIGGER [erro_msg_insert] AFTER INSERT On [com_palm_messaging_data_ChatThread] FOR EACH ROW
' H3 K+ F* Y2 ]when( D: k+ g, T9 b B! D- B& }: D
(lower(hex(new.summary)) LIKE '%e280a9%') and (new.type='SMS')
, m: m0 Z# M+ E7 g7 d0 obegin! h$ ?, z) J* O7 |" _# u/ H
update com_palm_messaging_data_chatthread
( z8 v1 }' Y; F( B* V% `5 c/ V9 P set summary ='*********'
0 x9 J2 ~" V' \. B" `$ S where id=new.id;
: G# V% x2 i8 l @8 Pend;3 ^$ ]9 J; }) C3 N: y
以上这段代码,是我为了解决短信问题作的探索.它是一个触发器,只能在问题短信出现后更改插入内容,因为3p丢之前没有发生过短信问题,就不知道好不好用.但是如果抓正常短信是毫无问题的.' W3 z; u$ A6 i
4 r. p( R) i ?2 J* F8 s; O; l解释: 第一行 for each row可以不加,sqlite的一本书里解释sqlite只能以each row方式操作
3 e: I8 _: v8 X+ {& M: X, @7 O2 m关键第三行判断,hex函数取字符换16进制数(在sqlite网站我没找到将16进制数转字符串的函数),lower转换为小写,例如4E,变为4e,like后的是板上有人说出问题的特殊符号的16进制值“e280a9” %为若干字符的通配符 and后判断插入的是短信而不是邮件等其他的。
* D9 t* g$ L7 @! Z; Q6 c第6行,“****”是替换的字符串,因为没找到16进制转字符串的函数所以就没办法把问题短信去除特殊字符后再转回去,只能完全擦除。
: L2 v& k: ^0 M3 x' i2 C) Y9 d* X- f7 R) S' l; C P) ]
关键是要找到问题短信16进制特征,我用“6263”也就是bc两个字符试了,抓到完全没问题,因为是after tirgger,所以短信预览时还是bc,打开短信软件就变成****了,sqlite支持before tirgger,但是如何在抓住短信后改new纪录的字段内容我还没搞出来,3p就离我而去了。只能做这些了 |
|