Внешнее исключение C0000006

Если вы собираетесь делать это вручную и с помощью опции 1, упомянутой zero323, вы должны посмотреть исходный код Spark для инструкции insert здесь

  def insertStatement(conn: Connection, table: String, rddSchema: StructType): PreparedStatement = {
    val columns = rddSchema.fields.map(_.name).mkString(",")
    val placeholders = rddSchema.fields.map(_ => "?").mkString(",")
    val sql = s"INSERT INTO $table ($columns) VALUES ($placeholders)"
    conn.prepareStatement(sql)
  }

PreparedStatement является частью java.sql и имеет методы, подобные execute() и executeUpdate(). Разумеется, вам все равно придется изменить sql.

21
задан Mason Wheeler 23 August 2009 в 12:46
поделиться

4 ответа

Как и @Barry, я бы порекомендовал проверить тип диска тома, с которого запускается ваш исполняемый файл; если это съемный диск (и в нем отсутствует параметр командной строки «уже в темпе»), скопируйте исполняемый файл (и любые его зависимости) в папку пользователя %TEMP%, а затем перезапустите его с дополнительным параметром командной строки. указать «уже в темп».

  1. Создайте каждый временный файл, используя File.Create(targetPath, bufferSize, FileOptions.DeleteOnClose) (или один из конструкторов FileStream, который принимает параметр FileOptions), но убедитесь, что зависаете на возвращенном экземпляре File до после запускается вторая копия (например, в List<File>).
  2. Скопируйте содержимое каждого файла.
  3. Запустите исполняемый файл из временной папки.
  4. Вызвать Close() для каждого из File экземпляров, сохраненных выше.
  5. Выход из исходного исполняемого файла.

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

4
ответ дан devstuff 16 October 2019 в 23:39
поделиться

Что вам нужно сделать, это сказать Windows, чтобы загружать всю вашу программу в память, а не позволять ей требовать загрузки страниц, когда это необходимо. Я сделал это успешно для приложений, работающих с компакт-диска. У меня сейчас нет с собой кода, но я вспоминаю, что нашел подсказки о том, как сделать это в исходном коде для фантастической программы установки с открытым исходным кодом Inno Setup.

Редактировать: На самом деле, после небольшого исследования, вы можете использовать директиву компилятора Delphi, чтобы сообщить Windows о загрузке полного исполняемого файла. Это работает, если у вас Delphi> 2006. Это приведет к тому, что вы никогда не получите внешнее исключение.

Поместите эту строку в файл проекта приложения:

{$SetPEFlags IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP}

Это говорит Windows, что исполняемый файл будет использоваться со съемного носителя, поэтому загрузите исполняемый файл в память (или файл подкачки). Тогда вам не нужно беспокоиться о таких вещах, как копирование файла на компьютер и т. Д.

Редактировать 2: В настоящее время у меня есть доступ к Delphi 7, и я могу подтвердить, как отмечали другие, что это также работает с Delphi 7 (и, вероятно, Delphi 6) со следующим кодом:

const
  IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP = $0400;

{$SetPEFlags IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP}

Для Дельфи < 6, вы можете пойти по пути принудительного выполнения исполняемого файла. В нем есть пример того, как сделать это в C ++ здесь (если только вы не найдете способ изменить флаги заголовка PE после времени соединения , что выглядит сложно)

N @

37
ответ дан Nat 16 October 2019 в 23:39
поделиться

Существует рабочая версия Delphi RunImageLocally от MSJ , которая заставляет выполнять загрузку исполняемого файла / dll. Это может предотвратить ошибки C0000006 при запуске из сети или съемного носителя ...

Проверьте это на https://github.com/jrsoftware/issrc/blob/master/Projects/SetupLdr.dpr

.
0
ответ дан phs.bnu 16 October 2019 в 23:39
поделиться

Это EXCEPTION_IN_PAGE_ERROR . Это означает, что загрузчику ОС не удалось выполнить страницу с некоторыми данными, необходимыми для запуска приложения, вероятно, из-за ошибки ввода-вывода или другой ошибки. Поскольку вы удаляете диск, это имело бы смысл.

Возможно, рабочему набору (набору часто используемых страниц памяти) для приложения было разрешено вырасти достаточно большим на машинах с 1 ГБ, так что обращение к диску для перезагрузки страницы не нужны, но это не так на машинах с 512 МБ?

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

17
ответ дан 16 October 2019 в 23:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: