Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何用java在数据库中插入excel数据_Mysql_Excel_Unix_Datetime_Vba - Fatal编程技术网

Mysql 如何用java在数据库中插入excel数据

Mysql 如何用java在数据库中插入excel数据,mysql,excel,unix,datetime,vba,Mysql,Excel,Unix,Datetime,Vba,我想将excel文件中的数据插入到使用java的UNIX服务器中的本地数据库中,而不需要对数据进行任何操作 1-有人告诉我,我必须将excel文件扩展名转换为.csv以符合unix。我用一个宏为每张工作表(12页)创建了一个CSV文件。问题是它将日期格式从DD-MM-YYYY更改为MM-DD-YYYY。如何避免这种情况 2-我使用LOAD DATA命令将CSV文件中的数据插入数据库。excel文件中有一个可选指定的日期列。因此,在CSV中,它变为,,因此加载数据不起作用(需要参数)。我怎样才能解

我想将excel文件中的数据插入到使用java的UNIX服务器中的本地数据库中,而不需要对数据进行任何操作

1-有人告诉我,我必须将excel文件扩展名转换为.csv以符合unix。我用一个宏为每张工作表(12页)创建了一个CSV文件。问题是它将日期格式从DD-MM-YYYY更改为MM-DD-YYYY。如何避免这种情况

2-我使用LOAD DATA命令将CSV文件中的数据插入数据库。excel文件中有一个可选指定的日期列。因此,在CSV中,它变为,,因此加载数据不起作用(需要参数)。我怎样才能解决这个问题?
感谢您的帮助

我们正在java应用程序中使用。它是无服务的,使用非常简单并且非常高效。

将EXCEL文件保存为CSV(逗号分隔值)格式。通过相当简单地使用StringTokenizer,可以轻松阅读和解析

使用MySQL(或SQLite,具体取决于您的需要)和JDBC将数据加载到数据库中

以下是我开发的CSVEnumeration一级:

package com.aepryus.util;

import java.util.*;

public class CSVEnumeration implements Enumeration {
    private List<String> tokens = new Vector<String>();
    private int index=0;

    public CSVEnumeration (String line) {
        for (int i=0;i<line.length();i++) {
            StringBuffer sb = new StringBuffer();
            if (line.charAt(i) != '"') {
                while (i <  line.length() && line.charAt(i) != ',') {
                    sb.append(line.charAt(i));
                    i++;
                }
                tokens.add(sb.toString());
            } else {
                i++;
                while(line.charAt(i) != '"') {
                    sb.append(line.charAt(i));
                    i++;
                }
                i++;
                tokens.add(sb.toString());
            }
        }
    }

// Enumeration =================================================================
    public boolean hasMoreElements () {
        return index < tokens.size();
    }
    public Object nextElement () {
        return tokens.get(index++);
    }
}

我建议使用MySQL,因为它的性能和明显的开源特性

这里有两种情况:

  • 如果只想将excel单元格值存储到数据库中。您可以将excel转换为CSV格式,这样您就可以简单地在MySQL命令中执行命令

  • 如果必须在值进入表之前进行一些操作,我建议使用ApachePOI。我曾经使用过,它工作得非常好,无论您使用的是Excel格式,您都必须使用正确的实现


  • 使用ApachePOI从Excel中读取值应该很容易。然后,您可以省去转换为另一种格式的额外步骤,以及当数据包含逗号并转换为CSV时可能出现的问题

    编码器:我所需要的就是插入数据而不需要任何操作。我有个问题,我的excel文件有很多表格。当我将文件转换为csv时,它只复制一张工作表。@daria-很简单,你必须将每张工作表分别保存为csv。。就这些,兄弟..我把每张纸都复制到了CSV文件中。它起作用了,但是它改变了日期格式(不是2010年7月9日,而是2010年9月7日)。如何解决这个问题?为什么不将日期值作为字符串处理。。试试看..我读到StringTokenizer不推荐使用,最好使用Split。你真的认为使用StringTokenizer更容易吗?StringTokenizer并没有被弃用,但我确实看到.split()现在是首选方法。我必须做一些研究,但我猜它们同样容易使用。无论如何,我会发布一些代码。谢谢,抱歉,但我需要问你最后一件事:我的文件(csv)是由超过788行组成的,解析它将需要相当长的时间,而且我需要定期更新数据库(每30分钟到1小时一次)。这真的适合我的情况吗?好吧,试试看,但788线算不了什么。它应该能够立即解析它。
    StringTokenizer lines = new StringTokenizer(csv,"\n\r");
    lines.nextToken();
    while (lines.hasMoreElements()) {
        String line = lines.nextToken();
        Enumeration e = new CSVEnumeration(line);
        for (int i=0;e.hasMoreElements();i++) {
            String token = (String)e.nextElement();
            switch (i) {
                case 0:/* do stuff */;break;
            }
        }
    }