在ContentResolver中使用Group By
缘起 使用ContentProvider查询短信,希望可以在ContentResolver.query中使用Group By ,发现系统并没有提供接口或者可用字段。 ...
缘起 使用ContentProvider查询短信,希望可以在ContentResolver.query中使用Group By ,发现系统并没有提供接口或者可用字段。 ...
根据判断条件组装建表的sql语句,有一处写成了全角的逗号,从而导致满足条件的字段后面都跟的全角逗号,sqlite认为直到遇到下一个半角逗号之前,都是上一个字段的类型声明,从而丢失了多个字段。 例如下面这样: create table card (userLevel TEXT,barCode TEXT,barCodeUrl TEXT,ucno TEXT,bigLogo TEXT,timeLineLink TEXT,blogLink TEXT) barCode 和 ucno类型后面是全角逗号,导致sqlite认为TEXT,barCodeUrl TEXT和TEXT,bigLogo TEXT是类型生命,丢失了这2个字段,但是建表成功,不会报任何错误,等到执行插入操作时才会提示没有该字段。 而由于插入操作只会针对遇到的第一个没有的字段进行提示,更进一步隐藏了问题的本质(建表字段较多,没有一一核对。。)。开始以为是sqlite的关键字,后来转念一想,关键字的话建表时就会报错了,而不是不报错直接建表成功。在多个sqlite工具下建表,结果是一样的。 最后在同事帮助下才通过删除几个字段的方式,最后细看组装出来的sql语句,终于发现是有多个全角逗号导致的。。 折腾了2个多小时,究其原因还是,浮躁,粗心。最开始引发的原因可能是写注释和代码时,中英文来回切换导致的。可见,写英语注释的重要性。。 当然,sqlite强大容错性也促成了这个bug。在此记录下,以警示自己!