求高手教db2导出数据库DB2数据库

西西软件下载最安全的下载网站、值得信赖的软件下载站!
→ 数据库导出csv文件的读取
英文版 1.42
类型:图像浏览大小:1010KB语言:英文 评分:6.6
&因为工作中会接触到许多不同的,像 oracle,access,mssql,mysql,db2 等,比较杂。所以一直想做一个通用的数据查询工具,支持所有的数据库,操作界面统一为 mssql 2005 的界面,这样可以少***很多客户端工具,也不需要在不同的数据库客户端工具之间切换来切换去了。先放一个初始的截图,和mssql的操作界面一样,左边是表、列信息显示区,右上是 sql 语句录入区,右下是结果显示区支持表和字段的自动提示,支持 csv,excel 的导入导出 :图中连接的数据库为 IBM DB2 9.5在做数据导入导出功能时,最基本的 csv 文件格式一定要支持吧,当时就想 csv还不简单,无非就是逗号分隔,回车换行的文本文件吗,很快就写出来了最初的 csv 读取public static string[][] read_csv(string text){var text_array = new List&string[]&();string[] lines = text.Split('\r', '\n');foreach (var line in lines){if (!string.IsNullOrEmpty(line)){string[] fields = line.Split(',');text_array.Add(fields);}}return text_array.ToArray();}public text){lines).IsNullOrEmpty(line)));text_array.Add(words);}text_array.ToArray();开始一切都好,没遇到什么问题,后来用的多了,问题开始出现了,发现有些 csv的字段中含有逗号,这下完了,遇到逗号就当成另外一个字段了,当然会报错,原来当初太轻视 csv 文件了,呵呵,实际上csv 也是有一些需要注意的规范的。1.如果csv文件字段中有特殊字符,整个字段应该用双引号包起来特殊字符有三种, 逗号[,] 回车换行[\r\n] 和处于字段开头的双引号[&]例如:字段 a, b,c(b,c 文本中包含逗号) ,d 就应该变成 a,&b,c&,d有回车换行的也是一样 2.如果 csv字段中有特殊字符,并且字段中含有双引号,则字段中的双引号应该写两次 例如:字段 a, b,c&aa ,d就应该变成 a,&b,c&&aa&,d有了这两个规范,把读取方法重新修改一下就完了,也不复杂修改后的 csv 读取public static string[][] read_csv(string text){if (text == null)var text_array = new List&string[]&();var line = new List&string&();var field = new StringBuilder();//是否在双引号内bool in_quata =//字段是否开始bool field_start =for (int i = 0; i & text.L i++){char ch = text[i];if (in_quata){//如果已经处于双引号范围内if (ch == '\&'){//如果是两个引号,则当成一个普通的引号处理if (i & text.Length - 1 && text[i + 1] == '\&'){field.Append('\&');i++;}else//否则退出引号范围in_quata =}else //双引号范围内的任何字符(除了双引号)都当成普通字符{field.Append(ch);}}else{switch (ch){case ',': //新的字段开始line.Add(field.ToString());field.Remove(0, field.Length);field_start =case '\&'://引号的处理if (field_start)in_quata =elsefield.Append(ch);case '\r': //新的记录行开始if (field.Length & 0 || field_start){line.Add(field.ToString());field.Remove(0, field.Length);}text_array.Add(line.ToArray());line.Clear();field_start =//在 window 环境下,\r\n通常是成对出现,所以要跳过if (i & text.Length - 1 && text[i + 1] == '\n')i++;default:field_start =field.Append(ch);}}}//文件结束if (field.Length & 0 || field_start)line.Add(field.ToString());if (line.Count & 0)text_array.Add(line.ToArray());return text_array.ToArray();}经过修改后,基本上就没遇到什么问题了。
12-1005-0211-0303-1303-2001-2801-2101-2101-1201-12
阅读本文后您有什么感想? 已有23人给出评价!
名称大小下载DB2数据库数据的导出导入
在百度上看到这个文章讲解DB2的导出导入:/view/1f763dc78bd63186bcebbcb0.html
因为我本地的数据库是auto increment的,所以使用这句:
在上一部分,我有提到,若表中存在自增长的IDENTITY列,需要使用相应的参数才能导入,比如:
db2 =& import from /home/movedata/mytbl2.ixf of ixf modified by identityignore insert into mytbl2
但是一直遇到以下出错:
[db2inst1@oc ~]$ db2 &import from /home/elsa/Desktop/dataBackup/holiday.ixf of ixf modified by identityignore insert into
SR.HOLIDAY&
An I/O error (reason = &sqlofopn -&) occurred while
opening the input file.
The utility has completed processing.
&0& rows were read from the
input file.
在网上看了一些资料,提到的普遍观点是:
一、权限问题。来源:http://bbs.chinaunix.net/archiver/tid-917817.html
二、创建一个新的folder,问题就没有了。
三、重装data studio的。
IBM官网的Knowledge Center只是把错误提示再给贴一遍,也是醉了:http://www-/support/knowledgecenter/SSEPGG_9.5.0/com.ibm.db2.luw.messages.sql.doc/doc/msql03030c.html
第三种情况除非是万不得已的情况下,不然我是不会采取的。
所以我采取的解决方案是:在/home/db2inst1里创建一个folder叫做databaseBackup,然后把之前那个放有ixf文件的folder移到这个db2inst1的权限下的folder里,再在命令行里切换到su - db2inst1的权限,执行以下命令进行导入:
db2 &import from holiday.ixf of ixf modified by identityignore insert into SR.HOLIDAY&
报错的时候,我看到很多都是跟其他表格相关的,按理说应该是没问题的。
今天再次实验的时候,出现以下这种情况,说我的ixf文件不正确:
The input file is not a valid PC/IXF file.
The file is too short to
contain a valid H record.
The utility has completed processing.
&0& rows were read from the
input file.
换了一个ixf文件,导入成功:
[db2inst1@oc localbackup]$ db2 &import from tab8.ixf of ixf modified by identityignore insert into SR.POOL&
The H record in the PC/IXF file has product &DB2
02.00&, date
&&, and time &154119&.
The T record in the PC/IXF file has name &tab8.ixf&, qualifier &&,
and source &
The utility is beginning to load data from file &tab8.ixf&.
The utility has completed processing.
&3& rows were read from the
input file.
...Begin COMMIT WORK. Input Record Count = &3&.
...COMMIT of any database changes was successful.
&3& rows were processed from the input file.
&3& rows were
successfully inserted into the table.
&0& rows were rejected.
Number of rows read
Number of rows skipped
Number of rows inserted
Number of rows updated
Number of rows rejected
Number of rows committed
但是查看了一下导入后的数据,依然是按照本地顺序去插入的。所以还是不能符合我的需求……
所以我想在不drop table的情况下,清空我本地的这些数据。然后导入我从服务器上备份下来的数据。
清空表格
在查看清空表格的时候:/shujuku/1448361.html
讲到以下几种方法:
ALTER TABLE SR.HOLIDAY ACTIVATE NOT LOGGED INITIALLY WITH EMPTY TABLE (这个我试过了,不能阻止auto increment继续计数)
IMPORT FROM /dev/null OF DEL REPLACE INTO SR.HOLIDAY (导入一个空表,这个我试过了,也不能阻止auto increment继续计数)
LOAD FROM /dev/null OF DEL REPLACE INTO SR.HOLIDAY NONRECOVERABLE (这句非常危险!看到最后的NONRECOVERABLE了没,不可恢复!命令都救不了我的table。这个命令会导致这个table被挂起,只能通过回滚的方式到之前的备份,如果像我一样没有备份,就等着呵呵呵然后drop
table吧) 来源:http://www.itpub.net/thread--1.html
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:24876次
排名:千里之外
原创:57篇
转载:21篇
(2)(1)(1)(3)(3)(3)(8)(9)(45)(3)(3)(1)

参考资料

 

随机推荐