Java-код для импорта CSV в Access

голоса
0

Я отправил этот код на форуме разработчиков Sun, так как я думал, что это erroring (истинная ошибка была до этого кода, даже был поражен). Один из ответов я получил сказал, что это не будет работать, и выбросить его. Но это на самом деле работает. Это может быть не лучший код (Я новичок в Java), но есть что-то по своей сути «неправильно» с ним?

=============

КОД:

private static void ImportFromCsvToAccessTable(String mdbFilePath, String accessTableName , String csvDirPath , String csvFileName ) throws ClassNotFoundException, SQLException { Connection msConn = getDestinationConnection(mdbFilePath); try{ String strSQL = SELECT * INTO + accessTableName + FROM [Text;HDR=YES;DATABASE= + csvDirPath + ;].[ + csvFileName + ]; PreparedStatement selectPrepSt = msConn.prepareStatement(strSQL ); boolean result = selectPrepSt.execute(); System.out.println( result = + result ); } catch(Exception e) { System.out.println(e); } finally { msConn.close(); } }
Задан 27/08/2008 в 18:38
источник пользователем
На других языках...                            


4 ответов

голоса
5

Не Дословный ответ нет - никогда нет ничего «плохого» с кодом, это вопрос, отвечает ли она требования, - которые могут включать или не включать быть ремонтопригодны, безопасными, надежными и быстрым.

Код вы работаете на самом деле JET запрос чисто в Access - код Java не делает ничего, кроме говорить Access для выполнения запроса.

С одной стороны, если он не сломался, не исправить. С другой стороны, есть хороший шанс, что он сломается в ближайшее время, так что вы могли бы попробовать фиксируя его заранее.

Два вероятных причин может излома:

  1. SQL инъекция риска. В зависимости от того, где csvDirPath и csvFileName приходят из (например, csvFileName может исходить от имени файла загруженного пользователем?), И о том, как умный драйвер доступа JDBC, вы могли бы быть открыты для кого-то нарушения или удаление данных путем введения в точка с запятой (или некоторые скобки, чтобы сделать подзапрос) и некоторые дополнительные команды SQL в запрос.
  2. Вы полагаетесь на колоннах файла CSV является совместимым со столбцами таблицы Access. Если непроверенный CSV загружается, или если генератор CSV имеет особый способ обработки аннулирует, или если вы один день получить необычную числовой формат дату или, вы можете получить ошибку при вставке в таблицу Access.

Сказав все это, мы все о прагматизме здесь. Если приведенный выше код из утилиты класса, который вы собираетесь использовать вручную несколько раз в неделю / месяц / год / когда-либо, то это не проблема.

Если это класс, который является частью веб-приложения, то «официальный» Java способ сделать это будет читать записи из файла CSV (либо с помощью синтаксического анализа CSV или / драйвер JDBC текстовый CSV), получить колонны из набора записей, сделать некоторые проверки или проверки вменяемости на них, а затем использовать новый PreparedStatement, чтобы вставить их в базу данных Access. Гораздо больше проблем, но гораздо более надежным.

Вы, наверное, можно найти комбинацию инструментов (например, объектно-реляционные слои или другие средства доступа к данным), который будет делать много, что для вас, но настройка инструментов будет столько хлопот, как писать код. Опять же, вы узнаете много от любого из них.

Ответил 27/08/2008 d 18:51
источник пользователем

голоса
2

Одно слово предупреждения - JDBC -> запросы доступа (что мост с помощью ODBC) не работают на 64-битных системах, так как не существует 64 битных драйверов баз данных Access (Драйвер входит в 32-битных копий Windows, и могут быть доступны только 32-битные процессы. Вы можете запустить «odbcad32» или посмотреть на панели управления ODBC, чтобы увидеть, что драйвер присутствует)

Пока я не вижу код с строки подключения в вашем фрагменте кода, я не в курсе каких-либо некоммерческих драйверов доступа JDBC для Java, только jdbc-> ODBC моста и полагаться на Windows, чтобы иметь доступ (* .mdb) водитель , не Microsoft больше не поддерживает этот драйвер и не имеет никаких планов портировать его на 64-битной, так инфраструктуры мудрое это что-то думать.

Ответил 28/08/2008 d 04:32
источник пользователем

голоса
1

@ David.w.fenton.myopenid.com: «Можете ли вы предоставить цитату о планах МС никогда не ввести 64-разрядные драйверы ODBC для Jet?»

Дэвид, я нашел сообщение на Connect Feedback от Microsoft об этом.

http://connect.microsoft.com/SQLServer/feedback/ViewFeedback.aspx?FeedbackID=125117

«На данный момент нет никаких планов корабля 64-битную версии драйвера JET по команде Канцелярии. Мы можем considere альтернативных вариант и уточним вам, когда у нас есть конкретный план.»

Спасибо, SSIS команда. Сообщение от Microsoft на 10/3/2007 в 9:47 PM

Там не было никакого обновления от Microsoft в этом потоке обратной связи.

Ответил 19/09/2008 d 18:46
источник пользователем

голоса
0

Вопрос к Джошуа Маккиннон:

Можете ли вы предоставить цитату о планах МС никогда не ввести 64-разрядные драйверы ODBC для Jet? Это звучит разумно, так что я не сомневаясь вас на всех, я просто хотел бы знать, если у вас есть источник для него, что вы можете указать на.

Конечно , МС является обеспечение доступа к Jet на 64-битных системах через OLEDB, хотя, верно? Это не поможет с JDBC, но , безусловно , обеспечивает способ использования данных Jet (они должны предоставить что - то, так как Jet 4 является частью операционной системы, так как он используется в качестве хранилища данных для Active Directory, и используется таким образом , так как Windows 2000).

Ответил 15/09/2008 d 23:39
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more