Как обработать ОГРОМНЫЕ строки SQL в исходном коде

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

BOOL CVCDSOView::PreCreateWindow(CREATESTRUCT& cs)
{
    cs.style |= WS_CLIPCHILDREN;
    return CView::PreCreateWindow(cs);
}

Не связано с мерцающей проблемой:

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

bmpMem.CreateCompatibleBitmap(&dc, Rect.Width(), Rect.Height());

Вам не нужно dcMem.DeleteDC() и DeleteObject(bmpMem) MFC автоматически удалит эти объекты.

Обратите внимание, что MFC не будет автоматически отменять выбор объектов. Это обычно не имеет значения, потому что Windows выполнит необходимую очистку, как в этом примере. Но для полноты картины добавьте следующее:

CBitmap* oldbitmap = (CBitmap*)dcMem.SelectObject(&bmpMem);
...
dc.BitBlt(0,0,Rect.Width(),Rect.Height(),&dcMem,0,0,SRCCOPY);
dcMem.SelectObject(oldbitmap);
5
задан John Sonmez 19 December 2008 в 22:07
поделиться

12 ответов

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

11
ответ дан 18 December 2019 в 05:56
поделиться

SQL имеет много конкатенаций строк для переменных?

Если это не делает можно извлечь их помещенный их в файлах ресурсов. Но необходимо будет удалить строку conatentation в разрывах строки.

Подход хранимой процедуры, который Вы использовали, очень хорош, но иногда когда существует потребность понять то, что делает SQL, необходимо переключить от рабочей области до любимого SQL IDE. Это - единственная плохая вещь.

Для моего предложения это было бы похоже на это:

String query = "select ......."+
3000 lines.

Кому:

ResourceBundle bundle = ResourceBundle.getBundle("queries");
String query = bundle.getString( "customerQuery" );

Хорошо это - идея.

6
ответ дан 18 December 2019 в 05:56
поделиться

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

2
ответ дан 18 December 2019 в 05:56
поделиться

Я предполагаю, что первый вопрос, что Вы, как предполагается, делаете с ним? Если это не повреждается, бесшумно закройте его и притворитесь, что Вы никогда не видели его. Иначе осуществите рефакторинг как безумный - надо надеяться, существует некоторое условие выхода где-нибудь, которое смотрит что-то как контракт.

3
ответ дан 18 December 2019 в 05:56
поделиться

Я второй iBatis рекомендация. По крайней мере, можно вытянуть SQL из кода Java, что наиболее вероятное использование StringBuffer и добавление или Строка concat в XML, где просто легче поддержать.

Я сделал это для веб-приложения прежней версии, и я включил отладку и выполнил модульные тесты на ДАО и просто скопировал сгенерированный sql для каждого оператора в iBatis xml. Обработанный довольно гладкий.

1
ответ дан 18 December 2019 в 05:56
поделиться

Используйте платформу iBatis

1
ответ дан 18 December 2019 в 05:56
поделиться

Я записал инструментарий для этого некоторое время назад и использовал его в нескольких проектах. Это позволяет Вам помещать запросы в главным образом текстовые файлы и генерировать привязку и документацию для них.

Проверьте этот пример и использование в качестве примера (это - в значительной степени просто подготовленный оператор, скомпилированный в класс Java с ранней связанной/безопасной с точки зрения типов привязкой запроса).

Это генерирует некоторый хороший javadocs также, но у меня нет ни одного из тех онлайн в данный момент.

1
ответ дан 18 December 2019 в 05:56
поделиться

Я нахожусь в том же месте, которое Вы... Мой план состоял в том, чтобы вытянуть SQL в separate.sql файлы в рамках проекта и создать служебный метод считать файл в том, когда мне нужен запрос.

string sql = "select asd,asdf,ads,asdf,asdf," 
           + "from asdfj asfj as fasdkfjl asf"
           + "..........................."
           + "where user = @user and ........";

Запрос выводится в файл, названный usageReportByUser.sql
и становление чем-то вроде этого.

string sql = util.queries("usageReportByUser");

Удостоверьтесь, что это сделано способом, что файлы не публично доступны.

2
ответ дан 18 December 2019 в 05:56
поделиться

То, что я делаю в PHP, является этим:

$query = "SELECT * FROM table WHERE ";
$query .= "condition < 5 AND ";
$query .= "condition2 > 10 AND ";

и затем, после того как Вы закончили разделять на уровни на $query:

mysql_query($query);
1
ответ дан 18 December 2019 в 05:56
поделиться

Один простой способ состоял бы в том, чтобы выломать их в некоторые константы. Это, по крайней мере, сделало бы код более читаемым.

0
ответ дан 18 December 2019 в 05:56
поделиться

Я храню их в файлах (или ресурсы), и затем читаю и кэширую их на приложении, запускаются (или на изменении, если это - сервис или что-то).

Или, просто поместите их в большой старый класс SqlQueries как consts или readonlys.

0
ответ дан 18 December 2019 в 05:56
поделиться

У меня был успех в преобразовании больших динамических запросов в linq-запросы. (1K строк+) Это очень хорошо работает для сценариев отчетности, где у вас много динамической фильтрации и динамической группировки на относительно небольшом количестве таблиц. Создайте edmx для этих таблиц, и вы сможете писать отличные композитные запросы с сильной типизацией.

Я обнаружил, что производительность действительно повысилась, а результирующий sql стал намного проще. Я уверен, что вы получите аналогичные результаты с Hibernate - конечно, за исключением возможности использовать linq. Но вообще говоря, если сгенерированный sql должен быть очень динамичным, то он не является хорошим кандидатом для хранимой процедуры. Запись динамического sql внутри хранимой процедуры - худший из двух миров. Если вы копаете Hibernate, я думаю, это будет хорошим решением.

С другой стороны, если запросы представляют собой простые строки с параметрами, то просто бросьте их в хранимую процедуру и дело с концом. -но тогда вы упустите возможность работать с объектами.

0
ответ дан 18 December 2019 в 05:56
поделиться
Другие вопросы по тегам:

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