#java #csv #jackcess
#java #csv #jackcess
Вопрос:
Я могу открыть файл базы данных и получить имя запроса и инструкцию. Как мне вывести данные запроса в формат csv? Я думал, что приведенный ниже exportWriter сделает это, но это не работает.
Database db = Database.open(new File(args[0]));
for(Query query : db.getQueries()) {
System.out.println(query.getName() ": " query.toSQLString());
if query.getName() = "thequerytooutput" {
BufferedWriter csvOut = new BufferedWriter(new OutputStreamWriter(System.out));
ExportUtil.exportWriter(db, query.getName(), csvOut, true, null, '"',
SimpleExportFilter.INSTANCE);
}
}
Комментарии:
1. Пожалуйста, опишите, как это не работает, например, сообщение об ошибке, или, если ошибки нет, то фактический вывод.
2. Это сообщение об ошибке, которое я получаю за исключением потока «main» java.lang. Исключение NullPointerException на com.healthmarketscience.jackcess. Идентификатор курсора.<инициализация> (Cursor.java:1490) на com.healthmarketscience.jackcess. Курсор $TableScanCursor. <инициализация>(Cursor.java:1334) на com.healthmarketscience.jackcess. Курсор $TableScanCursor. <инициализация>(Cursor.java:1322) на com.healthmarketscience.jackcess. Cursor.CreateCursor(Cursor.java:107) на com.healthmarketscience.jackcess. Экспортируйте файл.exportWriter(ExportUtil.java:271) в DumpQuery.main (неизвестный источник)
Ответ №1:
ExportUtil
не выполняет запросы, он только выгружает таблицы. В качестве второго параметра необходимо указать допустимое имя таблицы. У Jackcess нет возможности выполнять sql-запросы, как отмечено здесь.
Ответ №2:
Я думаю, что лучшим вариантом было бы сначала сохранить ваши значения из базы данных в «двумерный» список строк (я предполагаю, что вы знаете, как это сделать [если нет, скажите мне, и я поясню подробнее]). А затем с помощью FileWriter запишите массив в файл CSV.
Этот пример был взят из stackabuse.com
List<List<String>> rows = Arrays.asList(
Arrays.asList("Jean", "author", "Java"),
Arrays.asList("David", "editor", "Python"),
Arrays.asList("Scott", "editor", "Node.js")
);
FileWriter csvWriter = new FileWriter("new.csv");
csvWriter.append("Name");
csvWriter.append(",");
csvWriter.append("Role");
csvWriter.append(",");
csvWriter.append("Topic");
csvWriter.append("n");
for (List<String> rowData : rows) {
csvWriter.append(String.join(",", rowData));
csvWriter.append("n");
}
csvWriter.flush();
csvWriter.close();
Комментарии:
1. Спасибо за ваше предложение. Я должен был включить импорт, который я использую, в скрипт импорта com.healthmarketscience.jackcess. запрос. Запрос; импортируйте com.healthmarketscience.jackcess. База данных; импортируйте com.healthmarketscience.jackcess. Экспортируйте файл; импортируйте com.healthmarketscience.jackcess. SimpleExportFilter; Я думаю, если я смогу получить строки запроса в <Список>, тогда я смогу сделать то, что вы предложили.
2. Отлично, попробуйте это. Если у вас не получится это сделать, я помогу вам позже. Прямо сейчас я ухожу из дома, поэтому не буду прикасаться к своему компьютеру в течение следующих 2-3 часов.
3. @zjb Привет, я вернулся домой. Не могли бы вы это сделать?
4. Нет. У меня нет. :(все еще пытаюсь
5. О, не волнуйтесь, я уверен, вы сможете это сделать. Сейчас я в постели и собираюсь лечь спать, но я помогу вам завтра, чтобы вы могли разобраться с этим. Тем временем, не могли бы вы уточнить запрос, который вы используете для доступа к базе данных, и сколько столбцов и строк содержит результирующий набор? 🙂