最近要做数据预处理,需要用到数据库。而且是以前从来没听说过的TimesTen。
首要目标是要把Excel里的数据,导入到TimesTen数据库中。而TimesTen在win10里用不了,于是我就在虚拟机装了win7,之后在网上狂搜关于TimesTen的东西。折腾了一周,才算明白了一点。
然后又疯狂google百度怎么从Excel导数据到TimesTen。
网上有人总结了不少Excel数据导入到数据库的,可大都与TimesTen关系不大,通过多次测试,用sql developer导入数据到TimesTen数据库是可以的,但是有点问题。具体步骤是1、把excel另存为csv文件(直接改格式不行,需要另存为或导出为csv格式的文件)。2、用sql developer连接timesten数据库并导入数据。问题是,导入varchar2数据的时候,会提示Invalid string--strings must be enclosed with"..."。后来我手动在csv文件里给varchar2数据加了"",就可以导入了。这未免太低效了,跟一句一句insert有什么区别!
然后昨晚10点多看到Oracle数据库有个sqlldr方法可以设置把字符串用""enclosed,这不正好解决以上的问题嘛。可是今早来了一试,TimesTen里压根没有什么sqlldr方法……于是我就想,那TimesTen应该是有自己的方法的。
果不其然,很快就找到了ttBulkCp。通过ttBulkCp -h看了一下怎么用,不太懂,又google了一下。最后动手一试,两下就成功了。
ttBulkCp导入数据步骤
首先,创建一个空表:
然后,有一个excel表格,存放着待导入的数据:
导入数据之前,需要把excel表格另存为或导出为.csv文件
然后csv文件可以用记事本打开:
而直接改.xlsx格式为.csv的话,用记事本打开看到的是乱码。
然后就可以导入数据了:
可以看到,数据已经导入成功了,再连进去看一下:
最后再演示一下错误的:
可以看到只改了一个值,就是-Q后面的0改成了1。我原来用sql developer导入数据的时候也是提示这样的错误。那么来看一下-Q是什么意思:
意思大概就是是否需要用引号引住字符串数据。我一开始选的1,错了,再选0,就对了。那么,0大概表示不需要引号把字符串引起来,因为ttBulkCp会识别出来数据类型。如果选1就是需要导入的数据中的字符串数据必须被引号包含,否则会出错,这种情况适合于把另一个数据库导出的数据导入到timesten中。