java.sql.SQLException: индекс параметра вне диапазона (1 > число параметров, которое является 0) через jdbcTemplate

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

Боковое примечание : Повторное использование ActiveSheet меня пугает. Установите это в переменную в начале подпрограммы и используйте вместо нее переменную.

Dim Sheet as Worksheet
Set Sheet = ActiveSheet
.
Sheet.Range(...
.
Set Sheet = nothing

Посмотрите на чтение / запись данных в вариант вместо диапазона. (по крайней мере, для обработки текста) Вот пример загрузки Range в вариант:

Dim vNoiseWords as Variant
vNoiseWords = Sheet.Range("B2", Sheet.Range("B2").End(xlDown)).Value2

Запись просто противоположна (но мне обычно приходится транспонировать массив).

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

Свернуть любые и все взаимодействия с листом

... поэтому ограничьте любую строку, которая начинается с ActiveSheet., Cell., Range. и обрабатывает ее только в том случае, если это необходимо.

Даже Cell = UCase(Cell) является огромная трата времени.

. Вам гораздо лучше делать

Value = UCase(Cell.Value2)
If Value <> Cell.Value2 then Cell.Value2 = Value

Обновить

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

Public Sub TimeStamp(Optional Prompt As String, Optional StartTimer As Boolean)
Static s_fTimer As Single, s_fIntervalTimer As Single
Dim fCurrTime As Single
    fCurrTime = Timer
    If StartTimer Then
        s_fTimer = fCurrTime
        s_fIntervalTimer = fCurrTime
    End If
    If Prompt <> vbNullString Then Prompt = " - " & Prompt
    Debug.Print Format((fCurrTime - s_fTimer), "0.000s") & Format((fCurrTime - s_fIntervalTimer), "(0.000s)") & Prompt
    s_fIntervalTimer = fCurrTime
End Sub

При первом вызове (или в любое время, когда вы хотите сбросить счетчик общего времени ), вы должны установить StartTimer = True следующим образом:

TimeStamp "Start of Program", True

После этого просто вызовите подпрограмму с дополнительным приглашением для отслеживания разделов кода:

TimeStamp "After Smart Quote Loop"

TimeStamp "The End"

Затем просто посмотрите на промежутки времени, найдите самые большие и уничтожьте их, если не считаете их разумными. Вы обнаружите, что каждое взаимодействие с UI / ячейками - это задержка, но обработка данных в фоновом режиме занимает очень мало времени.

0
задан Roland Weisleder 20 January 2019 в 10:28
поделиться

2 ответа

Проблема в том, что количество параметров в операторе SQL не совпадает с количеством предоставленных аргументов. Это не очевидно, глядя на код, но

Object[] obj = new Object[3];
obj[0] = "Duke";
jdbcTemplate.update(sql, obj);

в основном совпадает с

jdbcTemplate.update(sql, new Object[] { "Duke", null, null });

. это то же самое.

Для обработки различного количества аргументов вы можете перейти от массивов к спискам.

0
ответ дан Roland Weisleder 20 January 2019 в 10:28
поделиться

В:

sql+= " commodityPricePerKg = ? "

И:

sql+= ", commodityPricePerKg = ? ";

Вы уверены, что ваше поле в БД названо так? Может быть, он называется "commodity_price_per_kg"?

0
ответ дан Ruku 20 January 2019 в 10:28
поделиться
Другие вопросы по тегам:

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