Spring позволяет передавать java.util.Lists в NamedParameterJdbcTemplate , который автоматизирует генерацию (?,?,?, ...,?), в зависимости от количества аргументов.
Для Oracle в этом блоге сообщение обсуждается использование oracle.sql.ARRAY (Connection.createArrayOf не работает с Oracle). Для этого вам нужно изменить инструкцию SQL:
SELECT my_column FROM my_table where search_column IN (select COLUMN_VALUE from table(?))
Функция таблицы oracle table преобразует переданный массив в таблицу как значение, которое можно использовать в инструкции IN
.
Это объяснение основано на прокомментированном сценарий Ruby от моего друга. Если Вы хотите улучшить сценарий, не стесняйтесь обновлять его в ссылке.
Первый, обратите внимание, что, когда Ruby обращается к оболочке, он обычно звонит /bin/sh
, не Bash. Некоторый синтаксис Bash не поддерживается /bin/sh
во всех системах.
Вот способы выполнить сценарий оболочки:
cmd = "echo 'hi'" # Sample string that can be used
Kernel#`
, обычно называемые обратные галочки †“`cmd`
Это похоже на многие другие языки, включая Bash, PHP и Perl.
Возвраты результат команды оболочки.
Документы: http://ruby-doc.org/core/Kernel.html#method-i-60
value = `echo 'hi'`
value = `#{cmd}`
Встроенный синтаксис, %x( cmd )
После x
символ является разделителем, который может быть любым символом. Если разделитель является одним из символов (
, [
, {
, или <
, литерал состоит из символов до соответствия заключительный разделитель, принимая во внимание вложенных пар разделителя. Для всех других разделителей литерал включает символы до следующего возникновения символа-разделителя. Строковая интерполяция #{ ... }
позволяется.
Возвраты результат команды оболочки, точно так же, как обратные галочки.
Документы: http://www.ruby-doc.org/docs/ProgrammingRuby/html/language.html
value = %x( echo 'hi' )
value = %x[ #{cmd} ]
Kernel#system
Выполняет данную команду в подоболочке.
Возвраты true
, если команда была найдена и выполнена успешно, false
иначе.
Документы: http://ruby-doc.org/core/Kernel.html#method-i-system
wasGood = system( "echo 'hi'" )
wasGood = system( cmd )
Kernel#exec
Замены текущий процесс путем выполнения данной внешней команды.
Возвраты ни один, текущий процесс заменяется и никогда не продолжается.
Документы: http://ruby-doc.org/core/Kernel.html#method-i-exec
exec( "echo 'hi'" )
exec( cmd ) # Note: this will never be reached because of the line above
Вот некоторый дополнительный совет: $?
, то, которое совпадает с $CHILD_STATUS
, получает доступ к состоянию выполняемой команды последней системы, если Вы используете обратные галочки, system()
или %x{}
. Можно тогда получить доступ exitstatus
и pid
свойства:
$?.exitstatus
Для большего количества чтения см.:
Можно также использовать операторы обратной галочки ('), подобный Perl:
directoryListing = `ls /`
puts directoryListing # prints the contents of the root directory
Удобный, если Вам нужно что-то простое.
то, Какой метод Вы хотите использовать, зависит от точно, что Вы пытаетесь выполнить; проверьте документы на большее количество деталей о различных методах.
Мой фаворит Open3
require "open3"
Open3.popen3('nroff -man') { |stdin, stdout, stderr| ... }
Я - определенно не эксперт Ruby, но я дам ему выстрел:
$ irb
system "echo Hi"
Hi
=> true
необходимо также быть в состоянии сделать вещи как:
cmd = 'ls'
system(cmd)
Вот лучшая статья, по-моему, о выполнении сценариев оболочки в Ruby: " 6 Способов Выполнить Команды Shell в Ruby".
, Если только необходимо получить выходные обратные галочки использования.
мне был нужен более усовершенствованный материал как STDOUT и STDERR, таким образом, я использовал драгоценный камень Open4. У Вас есть все методы, объясненные там.
Путем мне нравится делать, это использует %x
литерал, который облегчает (и читаемый!) для использования кавычек в команде, как так:
directorylist = %x[find . -name '*test.rb' | sort]
, Который, в этом случае, заполнит список файлов со всеми тестовыми файлами под текущим каталогом, который можно обработать как ожидалось:
directorylist.each do |filename|
filename.chomp!
# work with file
end
Некоторые вещи думать о при выборе между этими механизмами:
Вам, возможно, понадобится что-либо от простых обратных галочек (''), система (), и IO.popen
к полноценному Kernel.fork
/ Kernel.exec
с IO.pipe
и IO.select
.
можно также хотеть бросить тайм-ауты в соединение, если подпроцесс занимает слишком много времени выполняться.
, К сожалению, это очень зависит .
Еще один вариант:
Когда вам:
Вы можете использовать перенаправление оболочки:
puts %x[cat bogus.txt].inspect
=> ""
puts %x[cat bogus.txt 2>&1].inspect
=> "cat: bogus.txt: No such file or directory\n"
Синтаксис 2> & 1
работает в Linux , Mac и Windows , поскольку первые дни MS-DOS.