10. 入库 喵酱:本来觉得也许不使用数据库也能完成的,但是现在这数据乱成这个样子不得不使用数据库整理了。 H娘:有什么我能帮忙的吗? 喵酱:.xls我处理不了,姐姐帮忙把这些数据复制出来放到记事本里好了。 H娘:记事本里就能处理了吗? 喵酱:记事本是标准的文本流嘛,当然好处理了。 H娘:好嘛,你说怎么样就怎么样咯~ 喵酱:我看看啊……有学生姓名、班级、准考证号和各科成绩以及排名,这里面排名应该是不需要的,剩下的需要插入数据库。那么首先应该先要总结一份学生名单出来。显然学生名单应该是所有考试中学生名单的并集。 H娘:(……?) 喵酱:那么,程序逻辑应该是在插入的时候遍历,如果没有重复项就插入,否则不执行。 H娘:…… 喵酱:嗯嗯,就这样……姐姐你弄完了吗? H娘:…… 喵酱:姐姐? H娘:啊?哦,好了…… 喵酱:那么,姐姐帮忙把五次考试所有的学生的姓名和班级放到一个txt文件中吧。 H娘:哎?全部吗? 喵酱:是的。 H娘:重复的怎么办? 喵酱:你不管嘛,我会处理的。 H娘:哦……这样就可以了吗? 喵酱:可以了。谢谢姐姐~ H娘:下面你打算怎么处理呢? 喵酱:打开一个FileInputStream,用Scanner过滤一下,一次处理一行就好了嘛。 H娘:我就不该问这句话…… 喵酱:我可以在内存中维护一个List,每次添加的时候就遍历一下,只插入不存在于List中的数据,等到所有数据都处理完了以后再把这个List插入数据库就好了。 H娘:好像明白一点了……需要多久能写完呢? 喵酱:这个应该很快吧……半小时以内? H娘:那我就开始规划今晚吃什么了啊。 喵酱:就知道吃…… (半小时以后……) H娘:好了吗? 喵酱:…… H娘:晚餐煮白象大骨面吧,下一把菠菜,打个鸡蛋,再切两片火腿,怎么样? 喵酱:…… H娘:你不说话我就当你同意了啊。 喵酱:…… H娘:乖,怎么了? 喵酱:插入数据出现了奇怪的问题。 H娘:哎?奇怪的问题? 喵酱:姐姐你看,数据库里这一条数据是个8位数字,然而读出来前面就多了个问号。 H娘:哎?这是什么问题? 喵酱:刚开始我以为是数据的问题,检查了数据库发现并没有问题,然后我尝试用String.subString()去掉问号,结果莫名其妙的去不掉。 H娘:去不掉? 喵酱:而且我还发现了一件很奇怪的事,正常情况下这个8位数字的字符串运行String.length()的结果应该是8,那么多了一个空格以后再运行应该是9了,然而事实上运行结果依然是8…… H娘:我有点不太明白……这意味着什么吗? 喵酱:也就是说,计算姬在执行的时候并不认为这个问号是一个可见的字符,甚至不认为它占长度,然而事实上打印的时候确实将这个问号打印出来了。 H娘:呃…… 喵酱:更进一步地讲,这个字符串不算结尾标记的话在内存中应该是占了9个字节的,然而我却没有办法访问它的第一个字节,甚至没有办法把它和其他正常的字符串区分开来,但是计算姬自己确实是知道它们是不一样的。 H娘:…… 喵酱:既然length()的运行结果是相同的,那么我推测equals()的运行结果也应该是相同的,也就是说作为执行语言的Java很有可能根本没有办法分辨它们的,然而很不幸的是MySQL是可以分辨的。我不知道该怎么处理这种奇怪的问题……这一个字节到底是什么内容?是怎么来的?该怎么消除?这些我完全没有头绪……我……我……呜呜呜…… H娘:哎哎哎,怎么还哭上了…… 喵酱:都怪喵酱学艺不精……说大话接下这种需求然后又完不成……连累姐姐了…… H娘:你可别这么说。遇到困难是常有的事,没有困难还怎么进步嘛。 喵酱:可是…… H娘:就算是一点头绪也没有,冷静分析一下,慢慢的就会有发现的。 喵酱:呜…… H娘:行了行了,先吃饭,吃完饭再想啊。 喵酱:…… H娘:看来你是不饿,那算了,等凉了我拿去楼下喂猫好了。 喵酱:喵!喂我、喂我就好了!