Если вы собираетесь делать это вручную и с помощью опции 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
.
Как и @Barry, я бы порекомендовал проверить тип диска тома, с которого запускается ваш исполняемый файл; если это съемный диск (и в нем отсутствует параметр командной строки «уже в темпе»), скопируйте исполняемый файл (и любые его зависимости) в папку пользователя %TEMP%
, а затем перезапустите его с дополнительным параметром командной строки. указать «уже в темп».
File.Create(targetPath, bufferSize, FileOptions.DeleteOnClose)
(или один из конструкторов FileStream
, который принимает параметр FileOptions
), но убедитесь, что зависаете на возвращенном экземпляре File
до после запускается вторая копия (например, в List<File>
). Close()
для каждого из File
экземпляров, сохраненных выше. Таким образом, файлы закрываются независимо от того, какой процесс завершается первым, а исходный том может быть удален раньше.
Что вам нужно сделать, это сказать 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 @
Существует рабочая версия Delphi RunImageLocally от MSJ , которая заставляет выполнять загрузку исполняемого файла / dll. Это может предотвратить ошибки C0000006 при запуске из сети или съемного носителя ...
Проверьте это на https://github.com/jrsoftware/issrc/blob/master/Projects/SetupLdr.dpr
. Это EXCEPTION_IN_PAGE_ERROR
. Это означает, что загрузчику ОС не удалось выполнить страницу с некоторыми данными, необходимыми для запуска приложения, вероятно, из-за ошибки ввода-вывода или другой ошибки. Поскольку вы удаляете диск, это имело бы смысл.
Возможно, рабочему набору (набору часто используемых страниц памяти) для приложения было разрешено вырасти достаточно большим на машинах с 1 ГБ, так что обращение к диску для перезагрузки страницы не нужны, но это не так на машинах с 512 МБ?
Я бы посоветовал попытаться скопировать исполняемый файл во временное место и запустить его оттуда, возможно, с отложенным удалением; или используйте какой-либо другой механизм, чтобы гарантировать резервное копирование на диске для всех страниц памяти, затронутых приложением при нормальном использовании, и предотвратить эту ошибку в случаях нехватки памяти,