这里是将几个医院的所有医生信息,填写入Excel后,导入到Oracle。当然,oracle不能直接读取Excel的内容,但我们可以转弯来实现。
可以简单的认为,Excel表中的内容一一对应于数据库中一个表的字段,一一插入即可。实际当中可能不会这么简单,但原理一样,如果有关联表,需要插入后生成的字段id,则设置为主键,
利用索引,获取当前值即可继续操作;原理一样。
如果你的团队也是分工协作的,Excel里面的格式如下所示:

每一行为一个医生的信息。如果你的团队也是分工协作的,那将这个格式给相应的人员,让他们将数据录入其中即可。我们开始考虑怎么让他们导入表中。
导入表,无非是一系列的insert语句,每条语句中的数据为Excel中的每一行数据。所以我们需要将Excel中的数据导出到一个文件中,每个医生的资料为一行,各个资料之间用一个标示符隔开,
可以很容易的得到每个医生、每个对应项中的值。
Excel中自带有很多导出方式。其中可以到处xml格式的数据,如果你有专门的工具可以读取,或者自写一个读取此xml格式的程序,也可以。注意的是,转为xml格式后,比如“医生传真”这项
没有值,在xml结点树中则无此项;也可以导出为.txt格式的文件,但导出后保留了原有格式的样子,利用制表符,我们无法很轻松的获得每项数据。最好是我们可以指定导出时每项之间的间隔
标示符。所以我们想到了Access。
微软的产品,相互之间导入导出是完全没有问题的。将Excel的数据导入Access中(Access中“打开”),在Access中是以外部链接表的形式打开的。这时不能在Access中修改数据,只能在对应链接的Excel中修改,
修改后,Access中的数据也会相应的改变。检查Access中的数据无问题,则准备从Access中将数据导出。
在外部链接表上单击右键,选择“导出”,选择好保持目录,选择“文本文件”,下一步;
选择导出格式,为了便于读取各项值,当然选择“带分隔符”,下一步;
选择分隔符,如果你要导入的数据中数据不多,不杂,可以选择分号或者逗号,但我要到的数据中包含文本,可能会有逗号等,所以我选“其他”,选择一个不常用的,如"#";文本标示符可以去掉,我们在生成
批量sql语句时可以自己手动控制添加,下一步;
确定导出即可。
导出的数据如下所示:

到了这个时候,在读取数据已经不难。定位该.txt文件,利用文件流一行一行的读取,读取后根据"#"分开,分别对应到insert语句中的每一个字段,批量导入的工作就算完成了。
其中有个很重要的问题就是,如果利用java的IO流直接从文件中读取后,中文全为乱码。我们需要转换文件编码格式。利用newstr = new String(oldstr.getBytes("ISO-8859-1"), "GBK");转化为GBK格式
即可正常使用了。
当然,做就做的完美点。中间或许有些对应项为空等,如果要加判定的加上;要读取图片的,读取图片后记录位置。Excel中原有存数字的位置,从Access中导出来后,每个都变为X.00了,这时如果数据库中的
字段为number(n)型,则数据导入会出错。所以这个也需要处理掉。等等等等。这些都是简单的工作了,有了这个思路,剩余的一切都很简单。
posted on 2009-09-24 23:09  何彦征  阅读(1413)  评论(0编辑  收藏  举报