`
datamachine
  • 浏览: 156977 次
社区版块
存档分类
最新评论

结构化文本文件零代码导入数据库的方法

阅读更多

         直接用JAVA将结构化文本文件导入数据库时,需要手工拼凑SQL语句,还需要处理各种麻烦情况,比如:表中数据是否已经存在,是要update还是要insert,文件中是否包含字段,文件中的字段是否和表字段一致。

使用集算器来辅助Java编程,这些问题都不需要自己写代码解决。下面我们通过例子来看一下具体作法。

 

         文本文件sales.txt中存储着销售订单数据,列分隔符是tab,前几行数据如下:



 

下面,我们要把sales.txt导入到结构相同的空表中。

 

         先在集算器中编写脚本,脚本名为test.dfx



 

         上述脚本中,import函数用来读入文本文件,其默认的列分割符是tab,函数选项@t表示将第一行作为列名。update函数用来将A1中的数据批量导入数据库,这里的OracleDB是数据源名,Tsales是表名。

上述脚本已经完成了所有的导入工作,接下来只需在JAVA代码中调用即可。

         //建立esProc jdbc连接

         Class.forName("com.esproc.jdbc.InternalDriver");

         con= DriverManager.getConnection("jdbc:esproc:local://");

         //调用esProc,其中test是脚本文件名

         st =(com.esproc.jdbc.InternalCStatement)con.prepareCall("call test(?)");

         //类似存储过程的方式执行esProc脚本

         st.execute();

         只要执行上述JAVA代码,sales.txt就会被集算器引擎导入到Tsales表。

上面的集算器脚本比较简单,因此可以直接将脚本嵌入JAVA代码,而不用脚本文件,如下所示:

st.executeQuery("=OracleDB.update(file("E:\\sales.txt").import@t(),Tsales)");

 

         有时,库表并不为空,此时就不能把数据全部导入表中,而应该按照主键来比对。对于主键相同的数据,应当生成update语句,对于库表中没有的主键,应当生成insert语句。这要分几种情况来处理:

         假如库表已经设置了主键(这里是OrderID),则前面的代码无需任何变化。换句话说,集算器引擎可以自动判断数据库主键(包括联合主键),并和文本文件中的字段进行比对,并生成相应的updateinsert语句。

         假如库表没有设置主键,则只需在update函数中手工设置主键,即将A2单元格中的脚本改为:=OracleDB.update(A1,Tsales; OrderID)

如果不想改变库表原来的数据,集算器也可以只生成insert语句,这是需要在脚本中加入函数选项@i,比如:=OracleDB.update@i(A1,Tsales)类似的,函数选项@u表示只生成update语句。

 

 

在前面的例子中,我们假设库表和文本文件的结构一致,但有时两者并不完全相同。比如:库表比文本文件的字段多3个,分别是StateOrderYearMemo,现在要在库表的State字段中填入默认值”done”OrderYear要从OrderDate中计算出年份,Memo保持空。要解决这个问题,只需书写如下脚本:



 

         上述脚本中的derive函数可以为A1加入新的字段,也可以加入计算列。Memo字段不用管,update函数会自动略过它。

         如果库表中的字段比文本文件少,则应当只读取部分列,比如:

         =file("E:\\sales.txt").import@t(OrderID,SellerId,Amount,OrderDate)

         这句脚本表示忽略Client字段,只从文件中读取其他四个字段。

 

 

         前面的例子中,文本文件的第一行正好是库表中的字段名,但有时文本文件中没有列名信息,我们需要手工对应。代码如下:



 

         可以就看到,由于第一行不是字段名,因此import函数也无需选项@t,此时,A1的数据会有默认的字段名,依次为:_1,_2,_3等等。Update函数中的Order_ID:_1表示将A1中的字段“_1”导入到库表中的OrderID字段,以此类推。

 

         如果文本文件中的字段名和库表不一样,比如库表中的Client字段在文本文件中是ClientID,此时可以用同样的办法来对应,代码如下:



 

         前面的例子中,列分隔符是tab,但有时也会遇到“,”等符号,则只需将import函数修改为:=file("E:\\sales.txt").import(; ”,”)

  • 大小: 30 KB
  • 大小: 11.1 KB
  • 大小: 20.3 KB
  • 大小: 19.5 KB
  • 大小: 15.1 KB
0
0
分享到:
评论

相关推荐

    神通数据库使用文档.docx

    国产神通数据库创建数据库使用手册,包括创建表空间,用户,导入sql脚本功能的使用说明

    基于JavaGUI+Web Magic爬虫框架实现的医案采集系统.zip

    在管理员界面,管理员可将医生处理好的结构化文本导入文本编辑区进行规范化,或将文本导入到预编辑字段,在各个字段中修改。最后,将确认无误的字段导入到数据库中。 详细介绍参考:...

    ACCESS数据库转换MYSQL数据库的软件

    DB2MYSQL是一个可以自动将ACCESS数据库文件转化为对应的SQL代码的软件。可广泛应用于ACCESS数据库转换为MYSQL或其他类型的SQL数据库的软件。 <br> DB2MYSQL能够实现可视化操作数据库,转换界面非常简单明了,可...

    Oracle数据库管理员技术指南

    7.4.1 文本文件备份 7.4.2 逻辑控制文件备份 7.4.3 使用导出和导入 7.4.4 导入方式 7.4.5 增量、累积和完全的导出和导入 7.4.6 创建一致的导出文件 7.4.7 不能同时使用导出和归档重做日志 进行恢复 7.5 开发...

    数据库系统安全、技术操作规程.doc

    导入过程的三个用途: 初始化创建的数据库 修改一个已存在的数据库 恢复数据库为一个可知状态 注意ptdbimp用于生成一个主数据库的导出文件(使用ptdbexp),并且把数据存回到 DBID工具中这是重要的。若有必要,可...

    Access 2000数据库系统设计(PDF)---025

    252.1 理解Access的应用设计方法 252.2 从模板文件创建Access应用 262.3 熟悉联系管理应用 292.3.1 数据库窗口中的表对象 292.3.2 切换面板窗体 322.3.3 Access窗体 332.3.4 Access报表 352.3.5 Access模块 362.4 ...

    ASP和SQL网站数据库程序设计(DOC)

    13-2-6 读取文本文件的字符/一行文字 398 13-2-7 读取整个文本文件 400 13-3 CDO对象 403 13-3-1 SMTP环境的创建与 使用 404 13-3-2 实际测试 407 13-3-3 使用邮件接收软件验证 411 第14章 范例系统的...

    PDManager个人文档数据管理

    支持多级目录层次结构化管理 3.口令下以密钥分散为手段的的数据安全性管理 4.友好美观的图形化操作管理 使用概述: ======== PDManager以Microsoft Access数据库文件为信息载体,为方便用户对 某一文本...

    Python程序设计:数据存储技术.pptx

    数据采集和爬虫基础 ...关系型数据库是一种常用的结构化数据存储和管理方式,易于管理和查询,例如:mysql数据库。 优点:易于管理和查询。 缺点:数据结构一旦定义不能修改。 数据库存储 MongoDB数

    Access 2000数据库系统设计(PDF)---002

    30313.3.4 格式化文本和调整文本控件的 大小 30413.3.5 创建绑定、多行、计算文本框 30513.3.6 改变属性的默认视图和获取帮助 30813.3.7 用向导添加选项组 30813.3.8 使用剪贴板复制控件到其他窗体 31113.3.9 使用...

    Access 2000数据库系统设计(PDF)---018

    252.1 理解Access的应用设计方法 252.2 从模板文件创建Access应用 262.3 熟悉联系管理应用 292.3.1 数据库窗口中的表对象 292.3.2 切换面板窗体 322.3.3 Access窗体 332.3.4 Access报表 352.3.5 Access模块 362.4 ...

    Access 2000数据库系统设计(PDF)---003

    30313.3.4 格式化文本和调整文本控件的 大小 30413.3.5 创建绑定、多行、计算文本框 30513.3.6 改变属性的默认视图和获取帮助 30813.3.7 用向导添加选项组 30813.3.8 使用剪贴板复制控件到其他窗体 31113.3.9 使用...

    Access 2000数据库系统设计(PDF)---011

    252.1 理解Access的应用设计方法 252.2 从模板文件创建Access应用 262.3 熟悉联系管理应用 292.3.1 数据库窗口中的表对象 292.3.2 切换面板窗体 322.3.3 Access窗体 332.3.4 Access报表 352.3.5 Access模块 362.4 ...

    Access 2000数据库系统设计(PDF)---020

    252.1 理解Access的应用设计方法 252.2 从模板文件创建Access应用 262.3 熟悉联系管理应用 292.3.1 数据库窗口中的表对象 292.3.2 切换面板窗体 322.3.3 Access窗体 332.3.4 Access报表 352.3.5 Access模块 362.4 ...

    Access 2000数据库系统设计(PDF)---009

    30313.3.4 格式化文本和调整文本控件的 大小 30413.3.5 创建绑定、多行、计算文本框 30513.3.6 改变属性的默认视图和获取帮助 30813.3.7 用向导添加选项组 30813.3.8 使用剪贴板复制控件到其他窗体 31113.3.9 使用...

    Access 2000数据库系统设计(PDF)---001

    30313.3.4 格式化文本和调整文本控件的 大小 30413.3.5 创建绑定、多行、计算文本框 30513.3.6 改变属性的默认视图和获取帮助 30813.3.7 用向导添加选项组 30813.3.8 使用剪贴板复制控件到其他窗体 31113.3.9 使用...

    ASP.NET的网页代码模型及生命周期

    在.aspx页面中,代码隐藏页模型的.aspx页面代码基本上和单文件页模型的代码相同,不同的是在script标记中的单文件页模型的代码默认被放在了同名的.cs文件中,.aspx文件示例代码如下所示。 “C#” AutoEventWireup=...

    ASP与SQL网页数据库程序设计

    1-2 数据库系统的结构 40 3-1-3 数据库系统的主要组件 42 3-1-4 数据集中化管理 44 3-1-5 数据独立 46 3-2 数据库管理系统(DBMS) 46 3-3 关系型数据库 48 3-3-1 数据的表示方法 48 3-3-...

Global site tag (gtag.js) - Google Analytics