Импорт файла CVS в базу данных. Java

187
25 марта 2019, 06:10

Прошу не судить строго. Пишу код- учусь.
Существует потребность в загрузке файла формата CVS в базу данных.

Также, в задании присутствуют параметры доступа к БД:

  • host
  • port
  • database
  • schema
  • целевая таблица
  • login
  • password

Прошу Вас объяснить как получить доступ к этой базе данных, а также привести пример кода, где реализована загрузка содержимого в БД. ЯП - Java.

Заранее спасибо!

Answer 1

Предельно простой пример с использованием SQLite в качестве СУБД

Demo.java

package com.example;
import java.io.FileReader;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.Statement;
import java.sql.SQLException;
import com.opencsv.CSVReader;

public class Demo {
    private static final String DB_URL = "jdbc:sqlite:test.db";
    private static final String CREATE_TABLE_QUERY = "CREATE TABLE IF NOT EXISTS persons ("
                                                   + "id INTEGER PRIMARY KEY, "
                                                   + "name TEXT NOT NULL, "
                                                   + "age INTEGER NOT NULL)";
    private static final String INSERT_PERSON_QUERY = "INSERT INTO persons (name, age) VALUES (?, ?)";

    public static void main(String[] args) {
        try (Connection connection = DriverManager.getConnection(DB_URL)) {
            try (Statement stmt = connection.createStatement()) {
                 stmt.execute(CREATE_TABLE_QUERY);
            }
            catch (SQLException exc) {
                exc.printStackTrace();
            }
            try (CSVReader reader = new CSVReader(new FileReader("test.csv"));
                 PreparedStatement stmt = connection.prepareStatement(INSERT_PERSON_QUERY)) {
                String[] record;
                while ((record = reader.readNext()) != null) {
                    stmt.setString(1, record[0]);
                    stmt.setInt(2, Integer.valueOf(record[1]));
                    stmt.executeUpdate();
                }
            }
            catch(IOException exc) {
                exc.printStackTrace();
            }
            catch (SQLException exc) {
                exc.printStackTrace();
            }
        }
        catch (SQLException exc) {
            exc.printStackTrace();
        }
    }
}

test.csv

John,30
Jack,28
Jimm,41

В общем-то вам нужно только заменить строку DB_URL на ваши параметры доступа к БД в соответствии с правилами формирования JDBC URL и обеспечить в CLASSPATH наличие необходимого драйвера СУБД.

READ ALSO
Цикл for и разновидность

Цикл for и разновидность

Друзья! Нашел такой цикл в книге:

185
System.in.read() или всё же Scanner?

System.in.read() или всё же Scanner?

Заметил во многих книгах используется: Systemin

157
Операторы или Циклы?

Операторы или Циклы?

В книгах вижу часто вот такое: оператор if, оператор switch и тдТак же вижу слова аля: в этом цикле if или в этом цикле for работает так и вот так

175