首页 > 代码库 > 《万能数据库查询分析器》实现使用SQL语句直接高效地訪问文本文件

《万能数据库查询分析器》实现使用SQL语句直接高效地訪问文本文件

 

《万能数据库查询分析器》实现使用SQL语句直接高效地訪问文本文件

                           马根峰

                (广东联合电子服务股份有限公司广州 510300)

 

摘要    SQL语句来直接訪问文本文件?是在做梦吗?

本文具体地介绍了“万能数据库查询分析器”,中文版本号《DB 查询分析器》、英文版本号《DB Query Analyzer》在 文本文件处理方面很强大的功能,你能够直接用SQL语句来訪问这些文本文件,訪问250万条记录的文件的复杂的关联操作,也只是用时59秒钟。须要注意的是,文本文件的第一行须要有列名。

关键词   DB 查询分析器;DB Query Analyzer 

 

 

1       引言  

中国本土程序猿马根峰推出的个人作品----万能数据库查询分析器,中文版本号《DB 查询分析器》、英文版本号《DB Query Analyzer》。

万能数据库查询分析器集哈希技术、链表等多种数据结构于一体。使用先进系统开发技术,经历4年的研究、开发、測试周期后在2006年面世。

之后7年来一直在进行不断地完好、升级,到眼下为止。最新版本号为5.04 。“万能数据库查询分析器”核心部分就具有长达5万多行代码的工作量,使得其具有强大的功能、友好的操作界面、良好的操作性、跨越各种数据库平台乃至于EXCEL和文本文件

你能够通过它查询ODBC数据源(包含世面上全部的数据库、TXT/CSV文件、EXCEL文件)的数据。你能够同一时候运行多条DML语句乃至存贮过程。结果会以你设定的表格、文本框、文件来返回。从数据库导出千万条数据时,效率与DBMS没有什么差别。

本文将以5.04版本号为例,具体阐述“万能数据库查询分析器”中文版本号《DB 查询分析器》在 文本文件 处理方面很强大的功能,你能够直接用SQL语句来訪问这些文本文件,訪问250万条记录的文件的复杂的关联操作,也只是用时59秒钟。要注意的是,文本文件的第一行须要有列名。

 
 

2    产品获得的成就及发展历程  

中文版本号《DB 查询分析器》在中关村在线 下载量超过10 多次,位居整个数据库类排行榜中前20位

在《程序猿》20072期的“新产品&工具点评”部分,编辑“特别推荐”了“万能数据库查询分析器”公布。本期仅仅点评了5个工具。各自是“Adobe Acrobat 8 中文版”、“迅雷搜索 1.7 新版上线”、“Google 桌面搜索 5.0 中文公布”、“BEA 公布 WebLogic SIPServer 3.0和特别推荐“万能数据库查询分析器”公布。前面4个都是国内外大型软件公司的产品,仅仅有“万能数据库查询分析器”是个人创作的软件。

截止到2013417,在Baidu上搜索keyword"万能数据库查询分析器",搜索结果达318万。在Baidu上搜索keyword"DB查询分析器""DBQuery Analyzer",搜索结果分别在104万、16万左右。在Google上搜索“DB 查询分析器”、“DBQuery Analyzer”。结果分别达104万、44万之多。

本人撰写了关于“万能数据库查询分析器”有关技术的64文章,公布在《电脑编程技巧与维护》、《软件》、《计算机时代》、《电脑编程技巧与维护》、百度文库、CSDN资源、和本人的四大博客上(CSDN博客、新浪博客、QQ空间和搜狐博客上)。

 

 

3   为何用《DB 查询分析器》来訪问文本文件来解决实际问题

在广东联合电子服务股份有限公司实施一张网的过程中,因为路段上传的流水存在大量的异常,导致依照正常的结算流程无法快速地进行路段的结算。

因此,为了进行及时的结算,广东省快速公路公司授权先将异常流水进行忽略。后期再将这些流水进行上传、改动、拆分结算。

近期,为了实施忽略流水的回传。本人做的第一步就是从忽略的流水中依照(流水仅仅有在管理点存在、中心和管理点都存在)这两种情况。再依照流水金额小于0、等于0、大于0三类进行统计成台账(6个文件),然后业务组,再从这些分类批次(6个文件)中确认哪些批次须要回传(形成个文件。 流水大于0.csv  流水小于0.csv )。

最终,本人还要依据这些这两个文件里是否“回传”,再从结算系统中依据复杂的逻辑,找出要回传的流水号并依照区域分成4个文件。

在本次处理中,

源处理文件:流水大于0.csv  流水小于0.csv tb_road 管理点存在中心不存在的流水_全部.txt  管理点与中心都存在的部分_全部.txt 5个文件。

后两个文件是从结算系统数据库server中通过复杂的逻辑处理生成的中间结果文件。

输出结果:要回传的流水号并依照区域分成4个文件。

 

解决方式:因此,输入条件决定要么在结算数据库系统中建立 数据表 来完毕条件的推断;要么将结果全部忽略的流水、须要关联的数据表(tb_road)导出成.CSV/.TXT 文件,再使用《DB 查询分析器》强大、高效的.CSV/.TXT 訪问功能来实施整个回传流水文件的生成。




 技术分享
 

      tb_road 表仅仅是从生产机数据库中导出tb_road表即可了。

 


技术分享

图2  数据挖掘生成文本文件“管理点与中心都存在部分_全部.txt

 

 

4    5.04中文版本号《DB 查询分析器》为例  

       下面我们就以“万能数据库查询分析器”的中文版本号《DB 查询分析器》 5.04为例,以Windows 2000Server操作系统为平台,先创建基于文件夹 D:\ODBC_TXT_CSV”中 .TXT/.CSV 文件的ODBC数据源 odbc_txt_csv”,然后再通过 DB 查询分析器 5.04来訪问这些文件夹下的文件。

     操作系统: Windows2000 Server操作系统

     CPU2.8 GHZ 单核
   
内存:1GB

     前台程序: DB 查询分析器 5.04

     后台文件: .TXT/.CSV


技术分享

图3  创建基于 .CSV/.TXT 文件的ODBC数据源(一)

 


技术分享

图4  创建基于 .CSV/.TXT 文件的ODBC数据源(二)


技术分享

图5  登录odbc_txt_csv。不用输入username和口令

 

技术分享

图6  对象浏览器来查看数据源 odbc_txt_csv


技术分享

图7 Windows资源管理器中,ODBC数据源odbc_txt_csv相应的文件夹下全部的文件

 

技术分享

图8  用SQL语句来訪问 .txt和 .csv文件,来生成各区域须要回传的流水

 

图8中的复杂的SQL语句例如以下:

 

select listno,‘2014-06-16‘

from

(

    select distinct b.LISTNO,b.roadno

    --select count(*) asrec_num,sum(b.CASHMONEY)/100 as CASHMONEY,sum(b.ETCMONEY)/100 as ETCMONEY

    from

    ( 

        selectw.roadno,w.squaddate,w.roadname,w.outvehclass,

               sum(w.rec_count) as rec_count1,sum(w.cashmoney) as cashmoney1,sum(w.etcmoney) as etcmoney1

        from

        (

           select *

           FROM  [流水大于0.csv] 

           where (备注 is nulland 回送标志=‘回送‘ and(cashmoney+etcmoney)<0

           union all

           select *

           FROM  [流水小于0.csv] 

           where (备注 is nulland 回送标志=‘回送‘ and(cashmoney+etcmoney)<0

        ) w

        group byw.roadno,w.squaddate,w.roadname,w.outvehclass

   

    ) a,[管理点与中心都存在部分_全部.txt] b

    where  ( (b.CASHMONEY+b.ETCMONEY)<0 ) and a.roadno=b.roadno anda.SQUADDATE=b.SQUADDATE

          anda.OUTVEHCLASS=b.OUTVEHCLASSNAME

    union

    select distinct b.LISTNO,b.roadno

    --select count(*) asrec_num,sum(b.CASHMONEY)/100 as CASHMONEY,sum(b.ETCMONEY)/100 as ETCMONEY

    from

    ( 

        selectw.roadno,w.squaddate,w.roadname,w.outvehclass,

               sum(w.rec_count) as rec_count1,sum(w.cashmoney) as cashmoney1,sum(w.etcmoney) as etcmoney1

        from

        (

           select *

           FROM  [流水大于0.csv] 

           where (备注 is nulland 回送标志=‘回送‘ and(cashmoney+etcmoney)>0

           union all

           select *

           FROM  [流水小于0.csv] 

           where (备注 is nulland 回送标志=‘回送‘ and(cashmoney+etcmoney)>0

        ) w

        group byw.roadno,w.squaddate,w.roadname,w.outvehclass

   

    ) a,[管理点与中心都存在部分_全部.txt] b

    where  ( (b.CASHMONEY+b.ETCMONEY)>0 ) and a.roadno=b.roadno anda.SQUADDATE=b.SQUADDATE

          anda.OUTVEHCLASS=b.OUTVEHCLASSNAME  

    union

    select distinct b.LISTNO,b.roadno

    --select count(*) asrec_num,sum(b.CASHMONEY)/100 as CASHMONEY,sum(b.ETCMONEY)/100 as ETCMONEY

    from

    ( 

        selectw.roadno,w.squaddate,w.roadname,w.outvehclass,

               sum(w.rec_count) as rec_count1,sum(w.cashmoney) as cashmoney1,sum(w.etcmoney) as etcmoney1

        from

        (

           select *

           FROM  [流水大于0.csv] 

           where (备注=‘仅仅管理点存在‘) and 回送标志=‘回送‘ and(cashmoney+etcmoney)<0

           union all

           select *

           FROM  [流水小于0.csv] 

           where (备注=‘仅仅管理点存在‘) and 回送标志=‘回送‘ and(cashmoney+etcmoney)<0

        ) w

        group byw.roadno,w.squaddate,w.roadname,w.outvehclass

   

    )  a,[管理点存在中心不存在的流水_全部.txt] b

    where ((b.CASHMONEY+b.ETCMONEY)<0 ) and a.roadno=b.roadno anda.SQUADDATE=b.SQUADDATE

          anda.OUTVEHCLASS=b.OUTVEHCLASSNAME

    union

    select distinct b.LISTNO,b.roadno

    --select count(*) asrec_num,sum(b.CASHMONEY)/100 as CASHMONEY,sum(b.ETCMONEY)/100 as ETCMONEY

    from

    ( 

        selectw.roadno,w.squaddate,w.roadname,w.outvehclass,

               sum(w.rec_count) as rec_count1,sum(w.cashmoney) as cashmoney1,sum(w.etcmoney) as etcmoney1

        from

        (

           select *

           FROM  [流水大于0.csv] 

           where (备注=‘仅仅管理点存在‘) and 回送标志=‘回送‘ and(cashmoney+etcmoney)>0

           union all

           select *

           FROM  [流水小于0.csv] 

           where (备注=‘仅仅管理点存在‘) and 回送标志=‘回送‘ and(cashmoney+etcmoney)>0

        ) w

        group byw.roadno,w.squaddate,w.roadname,w.outvehclass

   

    )  a,[管理点存在中心不存在的流水_全部.txt] b

    where ((b.CASHMONEY+b.ETCMONEY)>0 ) and a.roadno=b.roadno anda.SQUADDATE=b.SQUADDATE

          anda.OUTVEHCLASS=b.OUTVEHCLASSNAME   

)      www

where roadno in (select roadno from [tb_road.txt] where areano=4407)

 

技术分享

图9  一開始运行图8中的SQL语句时。本机CPU使用率立马攀升至97%

 

技术分享

图10  生成中片区须要回传的流水文件,共同拥有6万多条记录


技术分享

图11 从结算中心数据库中用挖掘生成的全部忽略的流水。两个文件共250多万条记录

 

结论:

     对于“交互式”这样的数据处理的方式来说,将结果导出,用《DB 查询分析器》的强大、高效的文本文件的处理功能来分析处理。也是一种不错的选择。而且《DB 查询分析器》的效率很之高、处理很方便,能够将源文件当成一个数据库中的数据表一样用标准SQL语句来进行訪问。

        本人的PC机仅仅只是内存1GB的2005年的DELL 台式PC机。对250万条记录的文件进行关联訪问的时候。也仅仅是用不到59秒的时间就生成了一个区域的结果文件,期间CPU使用率高达97% 。

 

 

5     本人撰写的关于“万能数据库查询分析器”的64 篇技术文章  

 

眼下下面6篇文章公布几个国内计算机刊物上:

[1] 马根峰· DB QueryAnalyzer中断SQL语句的运行 · 杭州:《计算机时代》,2011年第12

[2] 马根峰· DB查询分析器 批量运行DML语句并返回更具体的信息 · 北京:《电脑编程技巧与维护》,2011年第24

[3] 马根峰· DBQuery Analyzer中的事务管理在DB2中的应用 · 北京:《电脑编程技巧与维护》,2011年第22

[4] 马根峰· DB查询分析器中断SQL语句的运行· 天津:《软件》,2011年第6

[5] 马根峰· 万能数据库查询分析器中的事务管理在Oracle中的应用 · 上海:《微型电脑应用》,2011年第11

       [6] 马根峰 · 新产品&工具点评 特别推荐:“万能数据库查询分析器”公布 · 程序猿,20072

 

下面58篇文章公布在百度文库、CSDN资源、和本人的四大博客上:

《万能数据库查询分析器使用技巧之(一)》直到《万能数据库查询分析器使用技巧之(十三)》共13

《The 1st tip ofDB Query Analyze》到《The 13th skills of DB Query Analyzer》13

怎样在client配置ODBC来訪问远程DB2 for Windowsserver》

How to configure ODBC DSN in Client toaccess remote DB2 for Windows

《怎样在server上配置ODBC来訪问本机DB2 forWindowsserver》

How to configure ODBC DSN to access localDB2 for Windows

《软件开发顶尖高手的杀手锏SQL语句》

Which SQL statement is the trump card tothe senior software developer

DB 查询分析器批量运行DML语句并返回更具体的信息》

《用“万能数据库查询分析器”測试SQLite4SQL精髓语句的支持》

《用“DB查询分析器”的对象浏览器来展现数据库的数据字典》

《万能数据库查询分析器用户已基本涵盖当前全部数据库系统》

The DBMS that DB Query Analyzer Users oftenuse cover all kinds of DBMS

《查询分析器应必须具备的功能-中断查询的运行》

《万能数据库查询分析器的EXE文件加壳技术》

Exe packer prevent DB Query Analyzer frombeging debugged

《自己开发的“万能数据库查询分析器”最终有了较大的成果》

DB Query Analyzer中断SQL语句的运行

DB 查询分析器 批量运行DML语句并返回更具体的信息

DB Query Analyzer中的事务管理在DB2中的应用

DB 查询分析器中断SQL语句的运行

万能数据库查询分析器中的事务管理在Oracle中的应用

特别推荐:“万能数据库查询分析器”公布》

《软件开发高手须掌握的4SQL精髓语句(一)》

《软件开发高手须掌握的4SQL精髓语句(二)》

《软件开发高手须掌握的4SQL精髓语句(三)》

《软件开发高手须掌握的4SQL精髓语句(四)》

《软件开发高手须掌握的4SQL精髓语句(综合篇)》

《巅峰之作----“万能数据库查询分析器”5.01公布》

《万能数据库查询分析器与EXCEL强强联合进行数据分析》

DB 查询分析器批量运行多条SQL语句并查看各自的运行时间》

DB查询分析器訪问EXCEL时。要在表名前后加上中括弧或双引號》

The table name must be enclosed in double quotation marks or sqarebracket while accessing EXCEL by DB Query Analyzer

   《基于数据仓库星形模式的广东省快速公路一张网资金结算情况分析系统》

 

 

 

 

 

 

DB查询分析器 5.04  中关村在线下载地址:

http://xiazai.zol.com.cn/detail/27/264455.shtml

 

 

DBQuery Analyzer 5.04中关村在线下载地址: 

http://xiazai.zol.com.cn/detail/43/420901.shtml

 

  

 

 

备注:

 假设您的计算机上安装有“万能数据库查询分析器”曾经的版本号。请先将旧版本号 Uninstall。然后再安装新版本号。谢谢!

 

 

 

作者简单介绍:

马根峰,硕士,研究方向:数据库应用。

个人开发了万能数据库查询分析器。中文版本号《DB 查询分析器》、英文版本号《DB Query Analyzer》。它具有强大的功能、友好的操作界面、良好的操作性、跨越各种数据库平台乃至于EXCEL和文本文件。

个人还开发了彻底删除文件(File Delete Absolutely)。用以将Windows系统上的文件彻底删除,不会被其他软件恢复。

这两个软件均免费使用,在各内几大软件下载站点中关村在线、天空软件站、华军软件园、太平洋电脑、非凡软件站、绿色联盟等均有下载。

 

 

作者博客:

CSDN博客:http://blog.csdn.net/magenfeng

新浪博客:  http://blog.sina.com.cn/magenfeng

QQ空间:  http://user.qzone.qq.com/630414817

 

 



《万能数据库查询分析器》实现使用SQL语句直接高效地訪问文本文件