精华内容
下载资源
问答
  • 导出通过条件查询出的数据并存为CSV格式步骤其实很简单,但是好多人一开始就会蒙了,不知该如何下手,心想导出文件我会,但是还要有查询条件?别急,我来告诉你怎么导出。这里是以SqlServer为例,同样的方法不保证...

    导出通过条件查询出的数据并存为CSV格式

    步骤其实很简单,但是好多人一开始就会蒙了,不知该如何下手,心想导出文件我会,但是还要有查询条件?别急,我来告诉你怎么导出。

    这里是以SqlServer为例,同样的方法不保证可以在别的数据库使用

    第一步:先写好SQL,并且运行,可以看到已经查询出来的数据;



    第二步:在查询出来的数据中全选内容,右键选择 “将结果另存为”,选好要保存的目录,下边可以更改要导出文件的格式,默认是“CSV”,最后点击保存即可,等待文件全部被导出就ok了。



    最后:就可以在导出的目录中看到,就结束了。


    展开全文
  • ]package com.vefan.csv; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; impor...
    package com.vefan.csv;

    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.ResultSetMetaData;
    import java.sql.SQLException;
    import java.sql.Statement;

    /**
    * 本文讲的是在java环境下对CSV文件进行读取操作,前几天在网上找到一个驱动可以把这种格式的文件当作数据库一样读取。操作步骤如下:
    * 第一、下载驱动程序http://sourceforge.net/projects/csvjdbc
    * 第二、把csvjdbc.jar文件放到classpath路径中去
    * */
    public class JdbcCsv
    {
    public static void main(String args[]){
    JdbcCsv jdbcCsv = new JdbcCsv();
    jdbcCsv.queryCsv();
    }

    public void queryCsv(){
    Connection conn = null;
    Statement stmt = null;
    ResultSet results = null;
    try
    {
    //load the driver into memory
    Class.forName("org.relique.jdbc.csv.CsvDriver");

    // create a connection. The first command line parameter is assumed
    // to be the directory in which the .csv files are held
    conn = DriverManager.getConnection("jdbc:relique:csv:E:\\workspace\\JavaApp\\csv");

    // create a Statement object to execute the query
    stmt = conn.createStatement();

    String sql = "select * from user";
    // String sql = "select * from user where rownum<3"; //不支持此种查询
    // String sql = "select top 10 * from user"; //不支持此种查询

    results = stmt.executeQuery(sql);
    // results.setFetchSize(3); //不支持
    ResultSetMetaData metaData = results.getMetaData();
    int columnCount = metaData.getColumnCount(); //一共有多少列
    for(int i=1; i<=columnCount; i++){
    String name = metaData.getColumnName(i);
    if(i!=columnCount)
    System.out.print(name+"\t\t");
    else
    System.out.println(name+"\t\t");
    }
    while(results.next()){
    // int rowNo = results.getRow(); 不支持获取当前行号
    // System.out.println("第"+rowNo+"行");
    for(int i=1; i<=columnCount; i++){
    String value = results.getString(i);
    if(i!=columnCount)
    System.out.print(value+"\t\t");
    else
    System.out.println(value+"\t\t");
    }

    }

    } catch (Exception e)
    {
    e.printStackTrace();
    }
    finally{
    try
    {
    if(null != results) results.close();
    if(null != stmt) stmt.close();
    if(null != conn) conn.close();
    } catch (SQLException e)
    {
    e.printStackTrace();
    }
    } //end of finally

    }

    }

    /*
    A read-only JDBC driver for Java that uses Comma Separated Value (CSV) files as database tables.
    Ideal for writing data import programs and conversion programs.

    The latest file releases:
    Package Release Date
    CsvJdbc 0.10 August 9, 2004
    当时下载的csvjdbc.jar文件版本是0.10, 有很多JDBC的功能都不支持,
    它只能把csv文件的第一行作为字段名,从第二行作为数据行,不能指定其它行作为字段名;
    在创建链接时,csvjdbc是把存放csv文件的文件夹作为数据库,文件夹中的每一个csv文件作为数据库中的表;
    */

    /*
    * Advanced Options
    --------------------------------------------------------------------------------

    The driver also supports a number of parameters that change the default behaviour of the driver.

    These properties are:


    separator
    Used to specify a different column separator (Default is ',').
    suppressHeaders
    Used to specify if the first line contains column header information (Default is false; column headers are on first line).
    fileExtension
    Used to specify a different file extension (Default is ".csv")
    charset
    Used to specify a different than default charset encoding of input file (default is same VM default charset)

    This following example code shows how these properties are used.

    ...

    Properties props = new java.util.Properties();

    props.put("separator","|"); // separator is a bar
    props.put("suppressHeaders","true"); // first line contains data
    props.put("fileExtension",".txt"); // file extension is .txt
    props.put("charset","ISO-8859-2"); // file encoding is "ISO-8859-2"

    Connection conn = Drivermanager.getConnection("jdbc:relique:csv:" + args[0],props)


    Scrollable ResultSets
    --------------------------------------------------------------------------------

    The driver also now supports scrollable result sets.

    This following example code shows how these are used.

    ...

    Connection conn = Drivermanager.getConnection("jdbc:relique:csv:" + args[0],props)

    Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, 0);

    ResultSet results = stmt.executeQuery("SELECT ID,NAME FROM sample");

    resulst.next();
    ...
    results.first();
    ...
    results.previous();
    ...
    results.relative(2);
    ...
    results.absolute(2);
    ...
    */


    下面是user.csv文件内容:
    [table]
    |ID CODE NAME MOBILE EMAIL VALID ORGANID LOGO|
    |33157 jia 用户甲 13625845145 0 24072 <BLOB>|
    |20600 1 高利强 13064878451 0 41 <BLOB>|
    |33163 yi 用户乙 13436963236 0 24072 <BLOB>|
    |33691 312 用户甲 13636363626 0 24072 <BLOB>|
    |78874 fsdf_gg 大幅度 15865895236 0 999 <BLOB>|
    |81322 1 中心 13533333333 1 45702 <BLOB>|
    |33879 YI 用户乙 13526262512 0 24072 <BLOB>|
    |33966 6 小李 13523075568 0 24072 <BLOB>|
    |81330 12234 中心 13533333333 1 45702 <BLOB>|
    |41637 12 12 15648551210 0 20583 <BLOB>|
    |41665 12 12 15648551210 0 20583 <BLOB>|
    |45829 hi hello 13589898545 0 24082 <BLOB>
    |
    [/table]
    展开全文
  • BookCrossing数据集(包含278858个用户271379本书进行的评分,包括显式和隐式的评分。本数据集主要包含2中文件格式,sqlcsv
  • 在REPL模式下,可以.csv文件使用SQL查询。 例子: 选择 SELECT * FROM table SELECT column1, column2 FROM table 在哪里 支持的运营商 操作员 意义 = 平等的 <> 不平等 > 比...更棒 < 少于 > = 大于...
  • csv文件存储数据时在结构上基本和一个...事实上,通过集算器,可以直接对csv文件进行处理,而且还可以进行一些“高级”操作,就像本文要介绍的比较两个csv文件的差异。 假设在一个简单的销售系统中,前端系统只负...

    csv文件存储数据时在结构上基本和一个数据库表相当,不过因为读写方便,所以使用频率很高,例如输出一些临时结果,或者持续记录类似日志形式的数据。不过,当需要对这些数据进一步处理时,如果还要先导入数据库,那么csv本身的便利性也就没有了。

    事实上,通过集算器,可以直接对csv文件进行处理,而且还可以进行一些“高级”操作,就像本文要介绍的比较两个csv文件的差异。

    假设在一个简单的销售系统中,前端系统只负责录入,包括新增、修改和删除订单,同时,每天会把数据文件做一次备份归档。在后期分析中,需要查看某个时间段内的新增、取消和修改的订单。下面就是不使用数据库,直接比较csv文件的操作。

    例子中使用了2015年3月的两个文件,早一点的是old.csv,晚一点的是new.csv。文件中的逻辑主键是userName和date,需要分别找出新增的、删除的、修改的数据行。源文件如下:

    da1d2a64f8d0510f8d30e476ba696c00.png

    直接观察数据,可以看到new.csv中的第2、3行是新增的记录,第4行是修改的记录,old.csv中第3行是删除的记录。

    集算器代码如下:

    f0497f81a24654f832ab7e6390ef6743.png

    A1,B1:以逗号为分隔符读入文件。

    A2,B2:将数据按照关键字排序。因为后面使用merge函数要求数据有序。

    A3:函数merge可进行多数据集归并,使用选项@d表示归并时找出差集。类似地还有并集选项@u,交集选项@i。新增记录实际上就是较新的数据和较旧数据按关键字的差集,计算结果如下:

    cc6ba9bba3f69439c299064cc32624d2.png

    A4:同样的,较旧数据和较新数据按关键字的差集就是删除的记录,计算结果如下:

    8b38276b3b971009771abf86699a9899.png

    A5:将关键字作为普通字段计算差集,找到修改过的所有记录。计算结果如下:

    bf093ec0f18cf311a8ecac0d85c5d81c.png

    A6:要计算更新的记录,把A5作为中间计算结果,计算A5和“新增”记录之间的差集。计算结果如下:

    1d2aa38945bde1844611d994d38642be.png

    B6:将A6返回给JAVA或报表工具。

    http://c.raqsoft.com.cn/forward?goto=上述脚本完成了所有的数据处理工作,接下来还可以通过JDBC将集算器脚本集成在JAVA里。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()"); com.esproc.jdbc.InternalCStatement st = (com.esproc.jdbc.InternalCStatement)con.prepareCall("call test()");

    st.execute();//执行esProc存储过程

    ResultSet set = st.getResultSet();//获得计算结果

    而如果要将多个数据集返回给JAVA,可以将B6的代码改为:return new,delete,update。

    展开全文
  • csv转成sql文件并导入数据库代码的由来最近接手一个老项目,经过了多名程序员开发,因为公司不大,之前的交接做的也不好,很多业务逻辑都没有书面描述,一些需要功能还需要程序员手工处理,所以新员工的培训成本太...

    PHP程序,将csv转成sql文件并导入数据库

    代码的由来

    最近接手一个老项目,经过了多名程序员开发,因为公司不大,之前的交接做的也不好,很多业务逻辑都没有书面描述,一些需要功能还需要程序员手工处理,所以新员工的培训成本太高,且交接不方便,所以和业务商量了一下,对代码进行整合优化,本文就是其中的一小难点。

    首先介绍一下我们的系统,这是一个俱乐部平台,用户是通过内部系统进行添加,我们的系统没有添加的权限和功能,然而大部分的业务却又在在我们的系统中进行,所以需要用户数据同步,但是上级系统出于安全考虑不提供实时接口,只是每天提供相关的excel,我们需要比对后存入数据库。

    原始的处理流程

    我们首先分别在两台电脑上将excel转成csv文件,然后移到另一台linux电脑用Python程序处理为sql文件,移到线上命令行导入数据库,在运行php进行比对更新。
    很繁琐,且离不开程序员,而且局限性很大。因为Python版本的问题,首先放弃了原Python处理csv的部分,准备改为php处理。

    那如何把数据读出来存入数据库

    按照早期入门时编写习惯,对于csv的处理代码,编写如下:

    <?php
    echo date('Y-m-d H:i:s').'|store<br />';
    set_time_limit(0);
    $file_name = 'store.csv';
    $file = fopen($file_name,'rb');
    $mysql_url = 'localhost';
    $mysql_user = 'root';
    $mysql_password = '123456';
    $con = mysql_connect($mysql_url,$mysql_user,$mysql_password) or die('数据库连接失败');
    mysql_select_db('test_db', $con);
    mysql_query('set names utf8'); 
    while (($data = fgetcsv($file, filesize($file_name), ",")) !== FALSE)
    {
        foreach($data as $k2=>$v)
        {
            $data[$k2] = addslashes(trim($v));
        }
        $str = 'INSERT INTO `store` VALUES(\''.join('\',\'',$data).'\');';
        mysql_query($str); 
    }
    echo date('Y-m-d H:i:s').'|store<br />';

    fgetcsv 解析读入的行并找出 CSV 格式的字段然后返回一个包含这些字段的数组。【手册】

    store表的结构为54个字段,如图
    这里写图片描述

    csv文件包含39000+条数据,如图
    这里写图片描述

    上面代码的运行情况如下
    这里写图片描述
    程序运行了16秒+,对于时间而已还是在可接受的范围内,但是随着数据量的增加,时间还会增加,为了减少资源消耗,我决定采用和之前一样的思路,写sql文件

    读取csv写入sql文件

    <?php
    echo date('Y-m-d H:i:s').'|store<br />';
    set_time_limit(0);
    $file_name = 'store.csv';
    $file = fopen($file_name,'rb');
    $getfile_name = 'store.sql';
    $getfile = fopen($getfile_name,'a');
    while (($data = fgetcsv($file, filesize($file_name), ",")) !== FALSE)
    {
        foreach($data as $k2=>$v)
        {
            $data[$k2] = addslashes(trim($v));
        }
        $str = 'INSERT INTO `store` VALUES(\''.join('\',\'',$data).'\');';
        fwrite($getfile,$str."\n");
    }
    fclose($file);
    fclose($getfile);
    echo date('Y-m-d H:i:s').'|store<br />';
    

    写到这问题就出现。

    如何在程序最后将生成好的sql文件导入数据库

    首先我想到了,MySQL导入sql文件用到的命令source,既然mysql_query()能“set names utf8“,那我猜这样应该也可以,但是结果却是失败的。数据没有导入。
    于是我去网上找解决方案,但网上的方案都是将sql文件读出并逐行输入,这样的话还不如之前的直接入库。有点多此一举的架势。
    这些方案不可行,我将视线转向了Linux,在优化之前,导入的操作就是用Linux的命令cat,这个在这就不细讲了。
    既然是用cat导入,而php可以exec()函数去执行外部命令,那么代码修改如下:

    <?php
    echo date('Y-m-d H:i:s').'|store<br />';
    set_time_limit(0);
    $file_name = 'store.csv';
    $file = fopen($file_name,'rb');
    $getfile_name = 'store.sql';
    $getfile = fopen($getfile_name,'a');
    while (($data = fgetcsv($file, filesize($file_name), ",")) !== FALSE)
    {
        foreach($data as $k2=>$v)
        {
            $data[$k2] = addslashes(trim($v));
        }
        $str = 'INSERT INTO `store` VALUES(\''.join('\',\'',$data).'\');';
        fwrite($getfile,$str."\n");
    }
    fclose($file);
    fclose($getfile);
    exec('cat /var/www/test/store.sql | mysql -u root --default-character-set=utf8 -p123456 test_db');
    echo date('Y-m-d H:i:s').'|store<br />';
    

    运行结果如下
    这里写图片描述

    最终代码

    从图上可以看出,代码有明显的优化,时间为11秒+,是原来程序运行的时间的三分之二,但还有更快的速度,如下代码

    <?php
    echo date('Y-m-d H:i:s').'|store<br />';
    set_time_limit(0);
    $file_name = 'store.csv';
    $file = fopen($file_name,'rb');
    $getfile_name = 'store.sql';
    $getfile = fopen($getfile_name,'a');
    $k = 0;
    while (($data = fgetcsv($file, filesize($file_name), ",")) !== FALSE)
    {
        /****为了实现插入多行 start*****/
        if($k%3000==0&&$k>0)
        {
            $str = ';';
            fwrite($getfile,$str."\n");
            $str = 'INSERT INTO `store` VALUES';
            fwrite($getfile,$str."\n");
        }
        elseif($k>0)
        {
            $str = ',';
            fwrite($getfile,$str."\n");
        }
        else
        {
            $str = 'INSERT INTO `store` VALUES';
            fwrite($getfile,$str."\n");
        }
        /****为了实现插入多行 end*****/
        foreach($data as $k2=>$v)
        {
            $data[$k2] = addslashes(trim($v));
        }
        $str = '(\''.join('\',\'',$data).'\')';
        fwrite($getfile,$str);
        $k++;
    }
    $str = ';';
    fwrite($getfile,$str."\n");
    fclose($file);
    fclose($getfile);
    exec('cat /var/www/test/store.sql | mysql -u root --default-character-set=utf8 -p123456 test_db');
    echo date('Y-m-d H:i:s').'|store<br />';
    

    代码的运行结果如下
    这里写图片描述
    程序现在的执行时间是9秒+,比之前的又有提升,到此为止,我的野路子就描述完了,实现了将csv文件转成sql文件,并直接导入数据库。

    补充,导入命令还有以下写法

    <?php
    exec('mysql -u root -p123456 --default-character-set=utf8 test_db < /var/www/test/store.sql');
    展开全文
  • 作者:余枫​文档编写目的在上一篇《0700-6.2.0-使用Solr...很多时候需要使用Solr对结构化的数据进行索引,根据其中某些字段进行精准的查询或者范围查询,本文档将介绍如何使用Solr对csv文件建立全文索引。内容概述1...
  • SQL server导入csv文件 选中数据库,右键->任务->导入数据 数据源选择平面源文件,(Flat File Source)选项,然后选择自己的csv文件位置,勾选图示选框 3.在高级中设置字段类型。应和数据库字段类型对应...
  • skr,skr~~那我们今天就来聊一段 Hive 与 Spark的爱恨情仇就像在一些场景中,需要将外部的数据导入到Hive表中,然后再这些数据进行额外的处理,提供给不同的部门使用。当导完数据之后,需要用到Spark进行后续的...
  • 【摘要】 使用 SQL 查询语言,你只能查询位于数据库里面的数据,但是当你面对的数据是一些 Excel 表格或者 Txt 文本格式时,有什么办法能直接着文件进行 Select 查询呢?去乾学院看个究竟:Java 中如何使用 SQL ...
  • 仿SQL SERVER 导入导出功能,可以操作 SQL SERVER ,oracle,ACCESS 数据库,数据表进行相关的操作
  • q是一个命令行工具,可以直接在CSV / TSV(和任何其他表格文本文件)上执行类似SQL的查询。 q将普通文件视为数据库表,并支持所有SQL构造,例如WHERE , GROUP BY , JOIN等。它支持自动列名和类型检测,并且q全面...
  • BookCrossing数据集包含278858个用户271379本书进行的评分,包括显式和隐式的评分。本数据集主要包含2中文件格式,sqlcsv,方便不同需求的用户使用。
  • 使您可以轻松地对CSV或TSV等结构化文本执行SQL。 会话示例: 主要变化! 自从最初发布textql以来,我进行了一些改进,并使项目更加模块化。 还进行了其他性能调整和附加功能,但这是以破坏原始命令行标志和更改...
  • sql loader可以把一些以文本格式存放的数据顺利的导入到oracle数据库中,是一种在不同数据库之间进行数据迁移的非常方便而且通用的工具。缺点就速度比较慢,另外blob等类型的数据就有点麻烦了。  sqlldr 有两种...
  • 所以才会把数据库中的不常用数据使用此方式进行归档. 目前主要的思路是: 1 按照顺序读取每天的数据,写成对应的csv. 2 自动压缩csv为zip,删除csv. 3 删除数据库中的数据. 看主要的代码: #!/usr/bin/python...
  • 后者用来进行数据分析和数据清理,并得出结论与模型,用该结论与模型来前者进行存活率预测。当然这篇文章主要是讲解如何用sql进行数据清理。具体字段意义如下:二、数据清洗首先我们利用navicat将csv...
  • 背景:全国二甲医院绩效审查需上传病案数据报表,但其字段有811列之多,虽然建表时提示超过sql最大行字节8060,但对表进行插入数据正常,但导出存在问题。 一.通过可视化管理工具右键导出数据 ![图片说明]...
  • 之前写过一篇文章具体介绍如何使用bulk导入txt,csv文件,其中详细介绍了bulk的基础知识,以及如何同时导入多...下面上次导数脚本进行升级,不需要再更改文件名,直接导入文件夹内所有文件。 解决思路 首先、将文...
  • 在谈SQL优化前,我么先分析下SQL的架构图mysql客户端通过协议与mysql服务器建连接,发送查询语句,先检查查询缓存,如果命中,直接返回结果,否则进行语句解析,也就是说,在解析查询之前,服务器会先访问查询缓存...
  • 这样可以文件进行直观的排序。 它使用Exif数据和文件日期。 它会创建一个小的(或几个)csv文件,其中某些统计信息来自exif数据。 可以使用Tableau或PowerBI轻松进行探索 如何使用它 为了使用脚本 使用config.py...
  • Mybatis介绍1.MyBatis是什么? MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software ... MyBatis是一个优秀的持久层框架,它jdbc的操作数据库的过程进行封装,使开发者只需要关注 SQL...
  • 有时候可能会遇到win10系统将SQL数据导出到EXCEL的设置方法,想必大家都遇到过需要win10系统将SQL数据导出到EXCEL进行设置的情况吧,那么应该怎么设置win10系统将SQL数据导出到EXCEL呢?下面小编带领大家看看win...
  • 一开始打算用python写一个脚本,用pandas读取数据后形成批量insert语句,再执行SQL将数据插入到数据库表,测试发现数据导入太慢,一直卡住,分析发现频繁读写数据库数据库压力较大,极不稳定。 后来改为批量形成...
  • 有时我们需要把数据导入数据库中,可我们手上有,.xls或着csv格式的文档数据,再加上因为一些逻辑关糸不能直接把它们导入到数据库中,这时就可以用利用opencsv来读取csv文档然后组全成sql文,再导入数据库。...
  • 一、提出问题1、 平台的用户流失情况是怎样的?2、 造成该种流失情况是...userId=1本数据集(UserBehavior.csv)包含了2017年11月25日至2017年12月3日之间,有行为的约一百万随机用户的所有行为(行为包括点击、购买...
  • 数据迁移 对于这个项目,我执行了从CSV文件到MySQL...项目的各个方面都进行了性能测试,包括测试执行时间! 设计模式用于良好的干净代码标准(DTO,DAO)。 我觉得最好使用函数式编程。 处理所有异常,并使用记
  • 一、提出问题1、 平台的用户流失情况是怎样的?2、 造成该种流失情况是...userId=1本数据集(UserBehavior.csv)包含了2017年11月25日至2017年12月3日之间,有行为的约一百万随机用户的所有行为(行为包括点击、购买...
  • JAVA CSV 导出

    2020-11-27 16:13:23
    比使用sqlLoader 导出要慢一倍的,大体是在查询的机制上 耗了更多时间和 数据进行组装也耗了时间 但是不需要安装和配置一堆东西 sqlLoad导出csv:https://blog.csdn.net/qq_37203082/article/details/110188164 ...

空空如也

空空如也

1 2 3 4 5 ... 19
收藏数 375
精华内容 150
关键字:

对csv进行sql