SQL производится Платформой Объекта для сопоставления строк

У вас есть setter для name1, который принимает 3 строки в качестве параметров, но в вашем методе getBean вы вызываете его динмически, используя m.invoke(obj,"Hello");, это означает, что вы пытаетесь вызвать метод с именем setName1 только с одним параметром, и этот метод не существует.

В целях объяснения я отредактировал его до m.invoke(obj, "Hello","Hello","Hello");, и он работает.

То же самое относится к setAge1: m.invoke(obj, 21,21);

Цель состоит в том, чтобы вы предоставили методу invoke как можно больше объектов, чем количество имеющихся у вас параметров заявлено в методе

7
задан thatismatt 29 January 2009 в 14:08
поделиться

4 ответа

Причина состоит в том, что CharIndex является намного быстрее и более чистым, чтобы SQL работал, чем ПОДОБНЫЙ. Причина, что у Вас могут быть некоторые сумасшедшие "КАК" пункты. Пример:

SELECT * FROM Customer WHERE EmailDomain LIKE 'abc%de%sss%'

Но, функция "CHARINDEX" (который является в основном "IndexOf") ТОЛЬКО обрабатывает нахождение первой инстанции ряда символов... никакие подстановочные знаки не позволяются.

Так, существует Ваш ответ :)

Править: Я просто хотел добавить, что я поощряю людей использовать CHARINDEX в своих SQL-запросах для вещей, как которые они не нуждались для. Важно отметить, хотя это в SQL Server 2000... поле "Text" может использовать ПОДОБНЫЙ метод, но не CHARINDEX.

2
ответ дан 7 December 2019 в 12:25
поделиться

Производительность, кажется, о равном между ПОДОБНЫМ и CHARINDEX, так, чтобы не была причина. Посмотрите здесь или здесь для некоторого обсуждения. Также БРОСОК является очень странным, потому что CHARINDEX возвращает интервал.

0
ответ дан 7 December 2019 в 12:25
поделиться

charindex возвращает местоположение первого срока во втором сроке.

sql запускается с 1 как первое местоположение (0 = не найденный)

http://msdn.microsoft.com/en-us/library/ms186323.aspx

я не знаю, почему это использует тот синтаксис, но это - то, как это работает

0
ответ дан 7 December 2019 в 12:25
поделиться

Я соглашаюсь, что это не быстрее, я получал десятки тысяч строк от нашей базы данных с буквой i имя. Я действительно находил однако, что необходимо использовать>, а не =... так использование

{cols} FROM Customer WHERE ((CAST(CHARINDEX(@term, EmailDomain) AS int)) > 0)

вместо

{cols} FROM Customer WHERE ((CAST(CHARINDEX(@term, EmailDomain) AS int)) = 1)

Вот мои два теста....

select * from members where surname like '%i%'    --12 seconds

select * from sc4_persons where ((CAST(CHARINDEX('i', surname) AS int)) > 0)  --12 seconds

select * from sc4_persons where ((CAST(CHARINDEX('i', surname) AS int)) = 1)  --too few results
0
ответ дан 7 December 2019 в 12:25
поделиться
Другие вопросы по тегам:

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