直接用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),则前面的代码无需任何变化。换句话说,集算器引擎可以自动判断数据库主键(包括联合主键),并和文本文件中的字段进行比对,并生成相应的update或insert语句。
假如库表没有设置主键,则只需在update函数中手工设置主键,即将A2单元格中的脚本改为:=OracleDB.update(A1,Tsales; OrderID)
如果不想改变库表原来的数据,集算器也可以只生成insert语句,这是需要在脚本中加入函数选项@i,比如:=OracleDB.update@i(A1,Tsales)。类似的,函数选项@u表示只生成update语句。
在前面的例子中,我们假设库表和文本文件的结构一致,但有时两者并不完全相同。比如:库表比文本文件的字段多3个,分别是State、OrderYear、Memo,现在要在库表的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(; ”,”)
相关推荐
国产神通数据库创建数据库使用手册,包括创建表空间,用户,导入sql脚本功能的使用说明
在管理员界面,管理员可将医生处理好的结构化文本导入文本编辑区进行规范化,或将文本导入到预编辑字段,在各个字段中修改。最后,将确认无误的字段导入到数据库中。 详细介绍参考:...
DB2MYSQL是一个可以自动将ACCESS数据库文件转化为对应的SQL代码的软件。可广泛应用于ACCESS数据库转换为MYSQL或其他类型的SQL数据库的软件。 <br> DB2MYSQL能够实现可视化操作数据库,转换界面非常简单明了,可...
7.4.1 文本文件备份 7.4.2 逻辑控制文件备份 7.4.3 使用导出和导入 7.4.4 导入方式 7.4.5 增量、累积和完全的导出和导入 7.4.6 创建一致的导出文件 7.4.7 不能同时使用导出和归档重做日志 进行恢复 7.5 开发...
导入过程的三个用途: 初始化创建的数据库 修改一个已存在的数据库 恢复数据库为一个可知状态 注意ptdbimp用于生成一个主数据库的导出文件(使用ptdbexp),并且把数据存回到 DBID工具中这是重要的。若有必要,可...
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 ...
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章 范例系统的...
支持多级目录层次结构化管理 3.口令下以密钥分散为手段的的数据安全性管理 4.友好美观的图形化操作管理 使用概述: ======== PDManager以Microsoft Access数据库文件为信息载体,为方便用户对 某一文本...
数据采集和爬虫基础 ...关系型数据库是一种常用的结构化数据存储和管理方式,易于管理和查询,例如:mysql数据库。 优点:易于管理和查询。 缺点:数据结构一旦定义不能修改。 数据库存储 MongoDB数
30313.3.4 格式化文本和调整文本控件的 大小 30413.3.5 创建绑定、多行、计算文本框 30513.3.6 改变属性的默认视图和获取帮助 30813.3.7 用向导添加选项组 30813.3.8 使用剪贴板复制控件到其他窗体 31113.3.9 使用...
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 ...
30313.3.4 格式化文本和调整文本控件的 大小 30413.3.5 创建绑定、多行、计算文本框 30513.3.6 改变属性的默认视图和获取帮助 30813.3.7 用向导添加选项组 30813.3.8 使用剪贴板复制控件到其他窗体 31113.3.9 使用...
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 ...
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 ...
30313.3.4 格式化文本和调整文本控件的 大小 30413.3.5 创建绑定、多行、计算文本框 30513.3.6 改变属性的默认视图和获取帮助 30813.3.7 用向导添加选项组 30813.3.8 使用剪贴板复制控件到其他窗体 31113.3.9 使用...
30313.3.4 格式化文本和调整文本控件的 大小 30413.3.5 创建绑定、多行、计算文本框 30513.3.6 改变属性的默认视图和获取帮助 30813.3.7 用向导添加选项组 30813.3.8 使用剪贴板复制控件到其他窗体 31113.3.9 使用...
在.aspx页面中,代码隐藏页模型的.aspx页面代码基本上和单文件页模型的代码相同,不同的是在script标记中的单文件页模型的代码默认被放在了同名的.cs文件中,.aspx文件示例代码如下所示。 “C#” AutoEventWireup=...
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-...