java - 从 .csv 文件生成插入 SQL 语句

标签 java sql excel csv

一开始我需要一些帮助、想法和支持。

我想用 java 编写一个应用程序,它读取 .csv 文件并使用适当的 Insert 语句创建 .sql 文件。

例如:

Title;Author;Price
Java Foundation;Java;15
Excel Tutorial;Excel;25


INSERT INTO TABLE(TITLE,AUTHOR,PRICE) VALUES ('Java Foundation','Java',15);

对于这种情况我有点一无所知,不知道如何正确开始。

提前感谢您的帮助!

<小时/>

更新

除了一种情况外,该示例运行良好。如果我想转换以下 .csv,我会收到 ArrayIndexOutOfBoundsException。

Title;Forename;Surname
Mr.;Andy;Benson
Mrs.;Susi;

因此:String[] values = lines.get(i).split(delimiter);

它只放置 'Mrs.' & 'Susi'在字符串数组中,但它还应该放置一个空字符串 " "在数组中。

是否有其他函数/方法可以避免这个问题?!通常,.csv 文件中并非每一行都已填写,这是很常见的情况。

已解决 String[] values = lines.get(i).split(delimiter, -1);并且 split 不会忽略空字段

最佳答案

您可以使用java非阻塞类Files使用readAllLines方法读取文件的所有行,然后使用模板String 并使用 String format 方法将其格式化为正确的值。

然后,您可以使用 java.nio.Files 中的 write 方法将语句写入 .sql

    final String template = "INSERT INTO TABLE(%s,%s,%s) VALUES ('%s','%s',%s);";
    final String delimiter = ";";

    List<String> statements = new ArrayList<>();

    List<String> lines = Files.readAllLines(Paths.get("your-file.csv"));
    String[] columnNames = lines.get(0).split(delimiter);

    for (int i = 1; i < lines.size(); i++) {
        String[] values = lines.get(i).split(delimiter);
        statements.add(String.format(template, columnNames[0], columnNames[1], columnNames[2], values[0], values[1], values[2]));
    }

    Files.write(Paths.get("your-output.sql"), statements);

这是实现您所要求的一个简短而简单的方法。当然,您需要将单词 TABLE 替换为您的表名称:)

更新:

如果您想在 .csv 中的值上创建语句变量,那么您可以使用嵌套的 for 循环并修改模板

    for (int i = 1; i < lines.size(); i++) {

        String[] values = lines.get(i).split(delimiter);

        StringBuilder cols = new StringBuilder();
        StringBuilder vals = new StringBuilder();

        for (int j = 0; j < columnNames.length; j++) {
            cols.append(columnNames[j]);
            vals.append("'").append(values[j]).append("'");

            if (j != columnNames.length - 1) {
                cols.append(",");
                vals.append(",");
            }
        }

        statements.add(String.format(template, cols.toString(), vals.toString()));
    }

然后您将拥有模板String,如下所示:

最终字符串模板 =“INSERT INTO TABLE (%s) VALUES (%s);”;

关于java - 从 .csv 文件生成插入 SQL 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36744451/

相关文章:

java - Hibernate 4.0 的 MultiTenancy 和 Separate Schema 方法

c# - 如何创建算法或公式来获得组合?

VBA 在工作表之间匹配和复制单元格值

java - Spring Kafka 与 Confluence Kafka Avro 反序列化器

java - 如何让 Android 应用程序等待?

sql - 如何返回表中每一行的 X 最大行

sql - 如何表示(可选)一对(可选)关系

c# - 寻求建议 - Excel 插件 - C# 服务

excel - 有条件地比较值

java - Apache Camel 中的 XML 对象