У вас есть setter
для name1
, который принимает 3
строки в качестве параметров, но в вашем методе getBean
вы вызываете его динмически, используя m.invoke(obj,"Hello");
, это означает, что вы пытаетесь вызвать метод с именем setName1
только с одним параметром, и этот метод не существует.
В целях объяснения я отредактировал его до m.invoke(obj, "Hello","Hello","Hello");
, и он работает.
То же самое относится к setAge1
: m.invoke(obj, 21,21);
Цель состоит в том, чтобы вы предоставили методу invoke
как можно больше объектов, чем количество имеющихся у вас параметров заявлено в методе
Причина состоит в том, что CharIndex является намного быстрее и более чистым, чтобы SQL работал, чем ПОДОБНЫЙ. Причина, что у Вас могут быть некоторые сумасшедшие "КАК" пункты. Пример:
SELECT * FROM Customer WHERE EmailDomain LIKE 'abc%de%sss%'
Но, функция "CHARINDEX" (который является в основном "IndexOf") ТОЛЬКО обрабатывает нахождение первой инстанции ряда символов... никакие подстановочные знаки не позволяются.
Так, существует Ваш ответ :)
Править: Я просто хотел добавить, что я поощряю людей использовать CHARINDEX в своих SQL-запросах для вещей, как которые они не нуждались для. Важно отметить, хотя это в SQL Server 2000... поле "Text" может использовать ПОДОБНЫЙ метод, но не CHARINDEX.
Производительность, кажется, о равном между ПОДОБНЫМ и CHARINDEX, так, чтобы не была причина. Посмотрите здесь или здесь для некоторого обсуждения. Также БРОСОК является очень странным, потому что CHARINDEX возвращает интервал.
charindex возвращает местоположение первого срока во втором сроке.
sql запускается с 1 как первое местоположение (0 = не найденный)
http://msdn.microsoft.com/en-us/library/ms186323.aspx
я не знаю, почему это использует тот синтаксис, но это - то, как это работает
Я соглашаюсь, что это не быстрее, я получал десятки тысяч строк от нашей базы данных с буквой 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