Как вставить данные Excel в базу данных с Java - PullRequest
3 голосов
/ 26 июля 2010

Я хочу вставить данные из файла Excel в локальную базу данных на сервере UNIX с Java без каких-либо манипуляций с данными.

1 - кто-то сказал мне, что я должен преобразовать расширение файла Excel в.csv для соответствия с Unix.я создал файл CSV для каждого листа (у меня есть 12) с макросом.проблема в том, что он изменил формат даты с ДД-ММ-ГГГГ на ММ-ДД-ГГГГ.как этого избежать?

2 - я использовал команду LOAD DATA, чтобы вставить данные из файлов CSV в мою базу данных.есть дата двоеточия, которая необязательно указывается в файле Excel.поэтому в CSV он становится ,, так что данные загрузки не работают (необходим аргумент).Как я могу это исправить?спасибо за вашу помощь

Ответы [ 4 ]

2 голосов
/ 26 июля 2010

Должно быть довольно легко считывать значения из Excel с Apache POI. Затем вы сохраняете себе дополнительный шаг преобразования в другой формат и возможные проблемы, когда ваши данные содержат запятую, и вы преобразуете в CSV.

1 голос
/ 26 июля 2010

Сохранить файл 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++);
    }
}

Если вы разбиваете строки файла CSV, используя split, а затем подаете их одну за другой в класс CSVEnumeration, вы можете затем пройти по полям. Или вот некоторый код, который я лежу без дела, который использует StringTokenizer для разбора строк. CSV - это строка, которая содержит все содержимое файла.

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;
        }
    }
}
1 голос
/ 26 июля 2010

Я предлагаю MySQL за его производительность и, очевидно, с открытым исходным кодом.

Вот две ситуации:

  1. Если вы хотите просто сохранить значения ячеек Excel в базе данных,Вы можете преобразовать Excel в формат CSV, так что вы можете просто ЗАГРУЗИТЬ ДАННЫЕ в команде MySQL.

  2. Если вам нужно сделать некоторые манипуляции перед значениямипопасть в таблицы, я предлагаю Apache POI.Я использовал, это работает так хорошо, что бы вы ни использовали формат Excel, вам просто нужно использовать правильную реализацию.

0 голосов
/ 26 июля 2010

Мы используем SQLite в нашем Java-приложении.Он бесполезен, действительно прост в использовании и очень эффективен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...